~paparazzi-uav/paparazzi/v5.0-manual

« back to all changes in this revision

Viewing changes to sw/ext/opencv_bebop/opencv/platforms/android/service/engine/src/org/opencv/engine/HardwareDetector.java

  • Committer: Paparazzi buildbot
  • Date: 2016-05-18 15:00:29 UTC
  • Revision ID: felix.ruess+docbot@gmail.com-20160518150029-e8lgzi5kvb4p7un9
Manual import commit 4b8bbb730080dac23cf816b98908dacfabe2a8ec from v5.0 branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.opencv.engine;
 
2
 
 
3
import java.io.File;
 
4
import java.util.Arrays;
 
5
import java.util.HashMap;
 
6
import java.util.List;
 
7
import java.util.Map;
 
8
import java.util.Scanner;
 
9
import java.util.regex.Pattern;
 
10
import java.util.regex.Matcher;
 
11
import android.os.Build;
 
12
import android.text.TextUtils;
 
13
import android.util.Log;
 
14
 
 
15
public class HardwareDetector {
 
16
    private static String TAG = "OpenCVEngine/HardwareDetector";
 
17
 
 
18
    public static final int ARCH_UNKNOWN = -1;
 
19
 
 
20
    public static final int ARCH_X86 = 0x01000000;
 
21
    public static final int ARCH_X86_64 = 0x02000000;
 
22
    public static final int ARCH_ARM = 0x04000000;
 
23
    public static final int ARCH_ARMv7 = 0x10000000;
 
24
    public static final int ARCH_ARMv8 = 0x20000000;
 
25
    public static final int ARCH_MIPS = 0x40000000;
 
26
    public static final int ARCH_MIPS_64 = 0x80000000;
 
27
 
 
28
    // Return CPU flags list
 
29
    public static List<String> getFlags() {
 
30
        Map<String, String> raw = getRawCpuInfo();
 
31
        String f = raw.get("flags");
 
32
        if (f == null)
 
33
            f = raw.get("Features");
 
34
        if (f == null)
 
35
            return Arrays.asList();
 
36
        return Arrays.asList(TextUtils.split(f, " "));
 
37
    }
 
38
 
 
39
    // Return CPU arch
 
40
    public static int getAbi() {
 
41
        List<String> abis = Arrays.asList(Build.CPU_ABI, Build.CPU_ABI2);
 
42
        Log.i(TAG, "ABIs: " + abis.toString());
 
43
        if (abis.contains("x86_64")) {
 
44
            return ARCH_X86_64;
 
45
        } else if (abis.contains("x86")) {
 
46
            return ARCH_X86;
 
47
        } else if (abis.contains("arm64-v8a")) {
 
48
            return ARCH_ARMv8;
 
49
        } else if (abis.contains("armeabi-v7a")
 
50
                || abis.contains("armeabi-v7a-hard")) {
 
51
            return ARCH_ARMv7;
 
52
        } else if (abis.contains("armeabi")) {
 
53
            return ARCH_ARM;
 
54
        } else if (abis.contains("mips64")) {
 
55
            return ARCH_MIPS_64;
 
56
        } else if (abis.contains("mips")) {
 
57
            return ARCH_MIPS;
 
58
        }
 
59
        return ARCH_UNKNOWN;
 
60
    }
 
61
 
 
62
    // Return hardware platform name
 
63
    public static String getHardware() {
 
64
        Map<String, String> raw = getRawCpuInfo();
 
65
        return raw.get("Hardware");
 
66
    }
 
67
 
 
68
    // Return processor count
 
69
    public static int getProcessorCount() {
 
70
        int result = 0;
 
71
        try {
 
72
            Pattern pattern = Pattern.compile("(\\d)+(-(\\d+))?");
 
73
            Scanner s = new Scanner(
 
74
                    new File("/sys/devices/system/cpu/possible"));
 
75
            if (s.hasNextLine()) {
 
76
                String line = s.nextLine();
 
77
                Log.d(TAG, "Got CPUs: " + line);
 
78
                Matcher m = pattern.matcher(line);
 
79
                while (m.find()) {
 
80
                    int start = Integer.parseInt(m.group(1));
 
81
                    int finish = start;
 
82
                    if (m.group(3) != null) {
 
83
                        finish = Integer.parseInt(m.group(3));
 
84
                    }
 
85
                    result += finish - start + 1;
 
86
                    Log.d(TAG, "Got CPU range " + start + " ~ " + finish);
 
87
                }
 
88
            }
 
89
        } catch (Exception e) {
 
90
            Log.e(TAG, "Failed to read cpu count");
 
91
            e.printStackTrace();
 
92
        }
 
93
        return result;
 
94
 
 
95
    }
 
96
 
 
97
    // Return parsed cpuinfo contents
 
98
    public static Map<String, String> getRawCpuInfo() {
 
99
        Map<String, String> map = new HashMap<String, String>();
 
100
        try {
 
101
            Scanner s = new Scanner(new File("/proc/cpuinfo"));
 
102
            while (s.hasNextLine()) {
 
103
                String line = s.nextLine();
 
104
                String[] vals = line.split(": ");
 
105
                if (vals.length > 1) {
 
106
                    map.put(vals[0].trim(), vals[1].trim());
 
107
                } else {
 
108
                    Log.d(TAG, "Failed to parse cpuinfo: " + line);
 
109
                }
 
110
            }
 
111
        } catch (Exception e) {
 
112
            Log.e(TAG, "Failed to read cpuinfo");
 
113
            e.printStackTrace();
 
114
        }
 
115
        return map;
 
116
    }
 
117
 
 
118
}