Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
9b9ebe09
Commit
9b9ebe09
authored
Mar 10, 2015
by
Maksim Shabunin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ported from 2.4
parent
e12a04ac
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
93 additions
and
37 deletions
+93
-37
AndroidManifest.xml
platforms/android/service/engine/AndroidManifest.xml
+2
-2
CMakeLists.txt
platforms/android/service/engine/CMakeLists.txt
+4
-2
HardwareDetector.cpp
...d/service/engine/jni/BinderComponent/HardwareDetector.cpp
+33
-12
HardwareDetector.h
...oid/service/engine/jni/BinderComponent/HardwareDetector.h
+1
-1
OpenCVEngine.cpp
...droid/service/engine/jni/BinderComponent/OpenCVEngine.cpp
+1
-1
CommonPackageManager.cpp
...service/engine/jni/NativeService/CommonPackageManager.cpp
+5
-0
PackageInfo.cpp
.../android/service/engine/jni/NativeService/PackageInfo.cpp
+13
-12
PackageInfo.h
...ms/android/service/engine/jni/NativeService/PackageInfo.h
+1
-1
HardwareDetectionTest.cpp
...ndroid/service/engine/jni/Tests/HardwareDetectionTest.cpp
+8
-0
PackageInfoTest.cpp
...orms/android/service/engine/jni/Tests/PackageInfoTest.cpp
+7
-0
PackageManagmentTest.cpp
...android/service/engine/jni/Tests/PackageManagmentTest.cpp
+10
-0
HardwareDetector.java
...ervice/engine/src/org/opencv/engine/HardwareDetector.java
+1
-1
ManagerActivity.java
...engine/src/org/opencv/engine/manager/ManagerActivity.java
+7
-5
No files found.
platforms/android/service/engine/AndroidManifest.xml
View file @
9b9ebe09
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"org.opencv.engine"
android:versionCode=
"21
8
@ANDROID_PLATFORM_VERSION_CODE@"
android:versionName=
"2.
18
"
>
android:versionCode=
"21
9
@ANDROID_PLATFORM_VERSION_CODE@"
android:versionName=
"2.
20
"
>
<uses-sdk
android:minSdkVersion=
"@ANDROID_NATIVE_API_LEVEL@"
/>
<uses-feature
android:name=
"android.hardware.touchscreen"
android:required=
"false"
/>
...
...
platforms/android/service/engine/CMakeLists.txt
View file @
9b9ebe09
...
...
@@ -12,14 +12,16 @@ if(ARMEABI_V7A)
else
()
set
(
ANDROID_PLATFORM_VERSION_CODE
"3"
)
endif
()
elseif
(
ARM64_V8A
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"4"
)
elseif
(
ARMEABI_V6
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"1"
)
elseif
(
ARMEABI
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"1"
)
elseif
(
X86
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"4"
)
elseif
(
MIPS
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"5"
)
elseif
(
MIPS
)
set
(
ANDROID_PLATFORM_VERSION_CODE
"6"
)
else
()
message
(
WARNING
"Can not automatically determine the value for ANDROID_PLATFORM_VERSION_CODE"
)
endif
()
...
...
platforms/android/service/engine/jni/BinderComponent/HardwareDetector.cpp
View file @
9b9ebe09
...
...
@@ -39,44 +39,63 @@ int GetCpuID()
#else
result
=
ARCH_UNKNOWN
;
#endif
#elif defined(__aarch64__)
#ifdef __SUPPORT_AARCH64
result
|=
ARCH_AARCH64
;
#else
result
=
ARCH_UNKNOWN
;
#endif
#elif defined(__arm__)
LOGD
(
"Using ARM HW detector"
);
it
=
cpu_info
.
find
(
"Processor"
);
if
(
cpu_info
.
end
()
!=
it
)
{
size_t
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_
X86
_STR
);
size_t
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_
ARMV7
_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv7
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
7
_STR
);
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
6
_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv
7
;
result
|=
ARCH_ARMv
6
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
6
_STR
);
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
5
_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv
6
;
result
|=
ARCH_ARMv
5
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV5_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv5
;
}
// Treat the arch of current binary. Google Play checks
// device hardware before installation. Let's assume that
// if the binary works, it's compatible with current hardware
#if defined __ARM_ARCH_7A__
result
|=
ARCH_ARMv7
;
result
|=
FEATURES_HAS_VFPv3d16
;
#else
result
|=
ARCH_ARMv5
;
#endif
}
}
}
}
else
{
return
ARCH_UNKNOWN
;
// Treat the arch of current binary. Google Play checks
// device hardware before installation. Let's assume that
// if the binary works, it's compatible with current hardware
#if defined __ARM_ARCH_7A__
result
|=
ARCH_ARMv7
;
result
|=
FEATURES_HAS_VFPv3
;
#else
result
|=
ARCH_ARMv5
;
#endif
}
it
=
cpu_info
.
find
(
"Features"
);
...
...
@@ -107,7 +126,9 @@ int GetCpuID()
}
}
}
#endif
#else
result
=
ARCH_UNKNOWN
;
#endif
return
result
;
}
...
...
platforms/android/service/engine/jni/BinderComponent/HardwareDetector.h
View file @
9b9ebe09
...
...
@@ -9,7 +9,7 @@
#define ARCH_ARMv5 67108864L
#define ARCH_ARMv6 134217728L
#define ARCH_ARMv7 268435456L
#define ARCH_A
RMv8
536870912L
#define ARCH_A
ARCH64
536870912L
#define ARCH_MIPS 1073741824L
#define FEATURES_HAS_VFPv3d16 1L
...
...
platforms/android/service/engine/jni/BinderComponent/OpenCVEngine.cpp
View file @
9b9ebe09
...
...
@@ -15,7 +15,7 @@ using namespace android;
const
int
OpenCVEngine
::
Platform
=
DetectKnownPlatforms
();
const
int
OpenCVEngine
::
CpuID
=
GetCpuID
();
const
int
OpenCVEngine
::
KnownVersions
[]
=
{
2040000
,
2040100
,
2040200
,
2040300
,
2040301
,
2040302
,
2040400
,
2040500
,
2040600
,
2040700
,
2040701
,
2040800
,
2040900
};
const
int
OpenCVEngine
::
KnownVersions
[]
=
{
2040000
,
2040100
,
2040200
,
2040300
,
2040301
,
2040302
,
2040400
,
2040500
,
2040600
,
2040700
,
2040701
,
2040800
,
2040900
,
2041000
,
2041100
};
bool
OpenCVEngine
::
ValidateVersion
(
int
version
)
{
...
...
platforms/android/service/engine/jni/NativeService/CommonPackageManager.cpp
View file @
9b9ebe09
...
...
@@ -208,6 +208,11 @@ std::vector<std::pair<int, int> > CommonPackageManager::InitArmRating()
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_TEGRA4
,
ARCH_ARMv7
|
FEATURES_HAS_VFPv3
|
FEATURES_HAS_VFPv4
|
FEATURES_HAS_NEON
));
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_TEGRA5
,
ARCH_ARMv7
|
FEATURES_HAS_VFPv3
|
FEATURES_HAS_VFPv4
|
FEATURES_HAS_NEON
));
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_UNKNOWN
,
ARCH_AARCH64
));
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_UNKNOWN
,
ARCH_AARCH64
|
FEATURES_HAS_VFPv3
));
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_UNKNOWN
,
ARCH_AARCH64
|
FEATURES_HAS_VFPv3
|
FEATURES_HAS_VFPv4
));
result
.
push_back
(
std
::
pair
<
int
,
int
>
(
PLATFORM_UNKNOWN
,
ARCH_AARCH64
|
FEATURES_HAS_VFPv3
|
FEATURES_HAS_VFPv3
|
FEATURES_HAS_NEON
));
return
result
;
}
...
...
platforms/android/service/engine/jni/NativeService/PackageInfo.cpp
View file @
9b9ebe09
...
...
@@ -302,20 +302,13 @@ PackageInfo::PackageInfo(int version, int platform, int cpu_id, std::string inst
}
#endif
}
else
if
(
ARCH_ARMv8
&
CpuID
)
#ifdef __SUPPORT_AARCH64
else
if
(
ARCH_AARCH64
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv8"
);
#ifdef __SUPPORT_ARMEABI_V8
FullName
+=
string
(
"_"
)
+
ARCH_ARMv8_NAME
;
#else
FullName
+=
string
(
"_"
)
+
ARCH_ARMv7_NAME
;
#endif
//string features = JoinARMFeatures(CpuID);
//if (!features.empty())
//{
// FullName += string("_") + features;
//}
LOGD
(
"PackageInfo::PackageInfo: package arch AARCH64"
);
FullName
+=
string
(
"_"
)
+
ARCH_AARCH64_NAME
;
}
#endif
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS
&
CpuID
)
{
...
...
@@ -460,14 +453,22 @@ InstallPath(install_path)
{
CpuID
=
ARCH_ARMv7
|
SplitARMFeatures
(
features
);
}
#ifdef __SUPPORT_AARCH64
else
if
(
ARCH_AARCH64_NAME
==
features
[
2
])
{
CpuID
=
ARCH_AARCH64
|
SplitARMFeatures
(
features
);
}
#endif
else
if
(
ARCH_X86_NAME
==
features
[
2
])
{
CpuID
=
ARCH_X86
|
SplitIntelFeatures
(
features
);
}
#ifdef __SUPPORT_INTEL_x64
else
if
(
ARCH_X64_NAME
==
features
[
2
])
{
CpuID
=
ARCH_X64
|
SplitIntelFeatures
(
features
);
}
#endif
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS_NAME
==
features
[
2
])
{
...
...
platforms/android/service/engine/jni/NativeService/PackageInfo.h
View file @
9b9ebe09
...
...
@@ -10,7 +10,7 @@
#define ARCH_ARMv5_NAME "armv5"
#define ARCH_ARMv6_NAME "armv6"
#define ARCH_ARMv7_NAME "armv7a"
#define ARCH_A
RMv8_NAME "armv8
"
#define ARCH_A
ARCH64_NAME "aarch64
"
#define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16"
#define FEATURES_HAS_VFPv3_NAME "vfpv3"
...
...
platforms/android/service/engine/jni/Tests/HardwareDetectionTest.cpp
View file @
9b9ebe09
...
...
@@ -146,11 +146,19 @@ TEST(CpuID, CheckMips)
EXPECT_TRUE
(
cpu_id
&
ARCH_MIPS
);
}
#endif
#elif defined(__aarch64__)
TEST
(
CpuID
,
CheckAarch64
)
{
int
cpu_id
=
GetCpuID
();
EXPECT_TRUE
(
cpu_id
&
ARCH_AARCH64
);
}
#else
# if defined(__arm__) && defined(USE_TEGRA_HW_DETECTOR)
TEST
(
TegraDetector
,
Detect
)
{
EXPECT_TRUE
(
DetectTegra
()
!=
0
);
}
# endif
TEST
(
CpuID
,
CheckArmV7
)
{
...
...
platforms/android/service/engine/jni/Tests/PackageInfoTest.cpp
View file @
9b9ebe09
...
...
@@ -52,6 +52,13 @@ TEST(PackageInfo, FullNameArmv7VFPv3Neon)
#endif
}
TEST
(
PackageInfo
,
FullNameAarch64
)
{
PackageInfo
info
(
2041000
,
PLATFORM_UNKNOWN
,
ARCH_AARCH64
);
string
name
=
info
.
GetFullName
();
EXPECT_STREQ
(
"org.opencv.lib_v24_aarch64"
,
name
.
c_str
());
}
TEST
(
PackageInfo
,
FullNameArmv5
)
{
PackageInfo
info
(
2030000
,
PLATFORM_UNKNOWN
,
ARCH_ARMv5
);
...
...
platforms/android/service/engine/jni/Tests/PackageManagmentTest.cpp
View file @
9b9ebe09
...
...
@@ -54,6 +54,16 @@ TEST(PackageManager, GetPackagePathForArmv7)
EXPECT_STREQ
(
"/data/data/org.opencv.lib_v23_armv7a/lib"
,
path
.
c_str
());
}
#ifdef __SUPPORT_AARCH64
TEST
(
PackageManager
,
GetPackagePathForAarch64
)
{
PackageManagerStub
pm
;
EXPECT_TRUE
(
pm
.
InstallVersion
(
2041100
,
PLATFORM_UNKNOWN
,
ARCH_AARCH64
));
string
path
=
pm
.
GetPackagePathByVersion
(
2041100
,
PLATFORM_UNKNOWN
,
ARCH_AARCH64
);
EXPECT_STREQ
(
"/data/data/org.opencv.lib_v24_aarch64/lib"
,
path
.
c_str
());
}
#endif
TEST
(
PackageManager
,
GetPackagePathForArmv7Neon
)
{
PackageManagerStub
pm
;
...
...
platforms/android/service/engine/src/org/opencv/engine/HardwareDetector.java
View file @
9b9ebe09
...
...
@@ -10,7 +10,7 @@ public class HardwareDetector
public
static
final
int
ARCH_ARMv5
=
0x04000000
;
public
static
final
int
ARCH_ARMv6
=
0x08000000
;
public
static
final
int
ARCH_ARMv7
=
0x10000000
;
public
static
final
int
ARCH_A
RMv8
=
0x20000000
;
public
static
final
int
ARCH_A
ARCH64
=
0x20000000
;
public
static
final
int
ARCH_MIPS
=
0x40000000
;
// Platform specific features
...
...
platforms/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java
View file @
9b9ebe09
...
...
@@ -7,6 +7,7 @@ import java.util.StringTokenizer;
import
org.opencv.engine.HardwareDetector
;
import
org.opencv.engine.MarketConnector
;
import
org.opencv.engine.OpenCVEngineInterface
;
import
org.opencv.engine.OpenCVEngineService
;
import
org.opencv.engine.OpenCVLibraryInfo
;
import
org.opencv.engine.R
;
import
android.annotation.TargetApi
;
...
...
@@ -140,11 +141,11 @@ public class ManagerActivity extends Activity
}
else
if
((
CpuId
&
HardwareDetector
.
ARCH_ARMv7
)
==
HardwareDetector
.
ARCH_ARMv7
)
{
HardwarePlatformView
.
setText
(
"ARM v7 "
+
JoinArmFeatures
(
CpuId
));
HardwarePlatformView
.
setText
(
"ARM v7
a
"
+
JoinArmFeatures
(
CpuId
));
}
else
if
((
CpuId
&
HardwareDetector
.
ARCH_A
RMv8
)
==
HardwareDetector
.
ARCH_ARMv8
)
else
if
((
CpuId
&
HardwareDetector
.
ARCH_A
ARCH64
)
==
HardwareDetector
.
ARCH_AARCH64
)
{
HardwarePlatformView
.
setText
(
"A
RM v8
"
+
JoinArmFeatures
(
CpuId
));
HardwarePlatformView
.
setText
(
"A
ARCH64 (ARM64 v8a)
"
+
JoinArmFeatures
(
CpuId
));
}
else
if
((
CpuId
&
HardwareDetector
.
ARCH_MIPS
)
==
HardwareDetector
.
ARCH_MIPS
)
{
...
...
@@ -220,7 +221,8 @@ public class ManagerActivity extends Activity
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
Log
.
d
(
"OpenCVManager/Receiver"
,
"Broadcast message "
+
intent
.
getAction
()
+
" receiver"
);
Log
.
d
(
"OpenCVManager/Receiver"
,
"Filling package list on broadcast message"
);
if
(!
bindService
(
new
Intent
(
"org.opencv.engine.BIND"
),
new
OpenCVEngineServiceConnection
(),
Context
.
BIND_AUTO_CREATE
))
if
(!
bindService
(
new
Intent
(
"org.opencv.engine.BIND"
),
new
OpenCVEngineServiceConnection
(),
Context
.
BIND_AUTO_CREATE
))
{
TextView
EngineVersionView
=
(
TextView
)
findViewById
(
R
.
id
.
EngineVersionValue
);
EngineVersionView
.
setText
(
"not avaliable"
);
...
...
@@ -251,7 +253,7 @@ public class ManagerActivity extends Activity
if
(
HardwareDetector
.
mIsReady
)
{
Log
.
d
(
TAG
,
"Filling package list on resume"
);
OpenCVEngineServiceConnection
connection
=
new
OpenCVEngineServiceConnection
();
if
(!
bindService
(
new
Intent
(
"org.opencv.engine.BIND"
),
connection
,
Context
.
BIND_AUTO_CREATE
))
{
if
(!
bindService
(
new
Intent
(
this
,
OpenCVEngineService
.
class
),
connection
,
Context
.
BIND_AUTO_CREATE
))
{
Log
.
e
(
TAG
,
"Cannot bind to OpenCV Manager service!"
);
TextView
EngineVersionView
=
(
TextView
)
findViewById
(
R
.
id
.
EngineVersionValue
);
if
(
EngineVersionView
!=
null
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment