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
293063ee
Commit
293063ee
authored
Oct 24, 2012
by
Alexander Smorkalov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Code normalization problems fixed.
Rair hangs on library installation fixed.
parent
680fba7e
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
619 additions
and
629 deletions
+619
-629
BnOpenCVEngine.cpp
...oid/service/engine/jni/BinderComponent/BnOpenCVEngine.cpp
+45
-47
HardwareDetector.cpp
...d/service/engine/jni/BinderComponent/HardwareDetector.cpp
+86
-85
OpenCVEngine.cpp
android/service/engine/jni/BinderComponent/OpenCVEngine.cpp
+65
-73
ProcReader.cpp
android/service/engine/jni/BinderComponent/ProcReader.cpp
+9
-9
StringUtils.cpp
android/service/engine/jni/BinderComponent/StringUtils.cpp
+21
-22
TegraDetector.cpp
android/service/engine/jni/BinderComponent/TegraDetector.cpp
+25
-25
JavaBasedPackageManager.cpp
...service/engine/jni/JNIWrapper/JavaBasedPackageManager.cpp
+32
-32
OpenCVEngine_jni.cpp
android/service/engine/jni/JNIWrapper/OpenCVEngine_jni.cpp
+15
-16
ClientMain.cpp
android/service/engine/jni/NativeClient/ClientMain.cpp
+4
-4
CommonPackageManager.cpp
...service/engine/jni/NativeService/CommonPackageManager.cpp
+53
-52
PackageInfo.cpp
android/service/engine/jni/NativeService/PackageInfo.cpp
+263
-263
OpenCVEngineTest.cpp
android/service/engine/jni/Tests/OpenCVEngineTest.cpp
+1
-1
No files found.
android/service/engine/jni/BinderComponent/BnOpenCVEngine.cpp
View file @
293063ee
...
...
@@ -21,53 +21,51 @@ status_t BnOpenCVEngine::onTransact(uint32_t code, const Parcel& data, android::
switch
(
code
)
{
case
OCVE_GET_ENGINE_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_GET_ENGINE_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
LOGD
(
"OpenCVEngine::GetVersion()"
);
reply
->
writeInt32
(
0
);
return
reply
->
writeInt32
(
GetVersion
());
}
break
;
case
OCVE_GET_LIB_PATH_BY_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_GET_LIB_PATH_BY_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::GetLibPathByVersion(%s)"
,
String8
(
version
).
string
());
String16
path
=
GetLibPathByVersion
(
version
);
reply
->
writeInt32
(
0
);
return
reply
->
writeString16
(
path
);
}
break
;
case
OCVE_GET_LIB_LIST
:
{
LOGD
(
"OpenCVEngine OCVE_GET_LIB_LIST request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::GetLibraryList(%s)"
,
String8
(
version
).
string
());
String16
path
=
GetLibraryList
(
version
);
reply
->
writeInt32
(
0
);
return
reply
->
writeString16
(
path
);
}
break
;
case
OCVE_INSTALL_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_INSTALL_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::InstallVersion(%s)"
,
String8
(
version
).
string
());
bool
result
=
InstallVersion
(
version
);
reply
->
writeInt32
(
0
);
int
res
=
reply
->
writeInt32
(
static_cast
<
int32_t
>
(
result
));
LOGD
(
"InstallVersion call to Binder finished with res %d"
,
res
);
return
res
;
}
break
;
default
:
{
LOGD
(
"OpenCVEngine unknown request"
);
return
BBinder
::
onTransact
(
code
,
data
,
reply
,
flags
);
}
case
OCVE_GET_ENGINE_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_GET_ENGINE_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
LOGD
(
"OpenCVEngine::GetVersion()"
);
reply
->
writeInt32
(
0
);
return
reply
->
writeInt32
(
GetVersion
());
}
break
;
case
OCVE_GET_LIB_PATH_BY_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_GET_LIB_PATH_BY_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::GetLibPathByVersion(%s)"
,
String8
(
version
).
string
());
String16
path
=
GetLibPathByVersion
(
version
);
reply
->
writeInt32
(
0
);
return
reply
->
writeString16
(
path
);
}
break
;
case
OCVE_GET_LIB_LIST
:
{
LOGD
(
"OpenCVEngine OCVE_GET_LIB_LIST request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::GetLibraryList(%s)"
,
String8
(
version
).
string
());
String16
path
=
GetLibraryList
(
version
);
reply
->
writeInt32
(
0
);
return
reply
->
writeString16
(
path
);
}
break
;
case
OCVE_INSTALL_VERSION
:
{
LOGD
(
"OpenCVEngine OCVE_INSTALL_VERSION request"
);
CHECK_INTERFACE
(
IOpenCVEngine
,
data
,
reply
);
const
String16
version
=
data
.
readString16
();
LOGD
(
"OpenCVEngine::InstallVersion(%s)"
,
String8
(
version
).
string
());
bool
result
=
InstallVersion
(
version
);
reply
->
writeInt32
(
0
);
int
res
=
reply
->
writeInt32
(
static_cast
<
int32_t
>
(
result
));
LOGD
(
"InstallVersion call to Binder finished with res %d"
,
res
);
return
res
;
}
break
;
default
:
{
LOGD
(
"OpenCVEngine unknown request"
);
return
BBinder
::
onTransact
(
code
,
data
,
reply
,
flags
);
}
}
return
android
::
NO_ERROR
;
...
...
android/service/engine/jni/BinderComponent/HardwareDetector.cpp
View file @
293063ee
...
...
@@ -13,97 +13,97 @@ int GetCpuID()
map
<
string
,
string
>
cpu_info
=
GetCpuInfo
();
map
<
string
,
string
>::
const_iterator
it
;
#if defined(__i386__)
#if defined(__i386__)
LOGD
(
"Using X86 HW detector"
);
result
|=
ARCH_X86
;
it
=
cpu_info
.
find
(
"flags"
);
if
(
cpu_info
.
end
()
!=
it
)
{
set
<
string
>
features
=
SplitString
(
it
->
second
,
' '
);
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSE_STR
))
{
result
|=
FEATURES_HAS_SSE
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSE2_STR
))
{
result
|=
FEATURES_HAS_SSE2
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSSE3_STR
))
{
result
|=
FEATURES_HAS_SSSE3
;
}
set
<
string
>
features
=
SplitString
(
it
->
second
,
' '
);
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSE_STR
))
{
result
|=
FEATURES_HAS_SSE
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSE2_STR
))
{
result
|=
FEATURES_HAS_SSE2
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_SSSE3_STR
))
{
result
|=
FEATURES_HAS_SSSE3
;
}
}
#elif defined(__mips)
#ifdef __SUPPORT_MIPS
#ifdef __SUPPORT_MIPS
result
|=
ARCH_MIPS
;
#else
#else
result
=
ARCH_UNKNOWN
;
#endif
#endif
#else
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
);
if
(
string
::
npos
!=
proc_name_pos
)
{
}
else
{
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_ARMV6_STR
);
size_t
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_X86_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv6
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
5
_STR
);
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV
7
_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv5
;
result
|=
ARCH_ARMv7
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV6_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv6
;
}
else
{
proc_name_pos
=
it
->
second
.
find
(
CPU_INFO_ARCH_ARMV5_STR
);
if
(
string
::
npos
!=
proc_name_pos
)
{
result
|=
ARCH_ARMv5
;
}
}
}
}
}
}
}
else
{
return
ARCH_UNKNOWN
;
return
ARCH_UNKNOWN
;
}
it
=
cpu_info
.
find
(
"Features"
);
if
(
cpu_info
.
end
()
!=
it
)
{
set
<
string
>
features
=
SplitString
(
it
->
second
,
' '
);
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_NEON_STR
))
{
result
|=
FEATURES_HAS_NEON
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_NEON2_STR
))
{
result
|=
FEATURES_HAS_NEON2
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_VFPV3_STR
))
{
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_VFPV3D16_STR
))
set
<
string
>
features
=
SplitString
(
it
->
second
,
' '
);
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_NEON_STR
))
{
result
|=
FEATURES_HAS_VFPv3d16
;
result
|=
FEATURES_HAS_NEON
;
}
else
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_NEON2_STR
))
{
result
|=
FEATURES_HAS_VFPv3
;
result
|=
FEATURES_HAS_NEON2
;
}
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_VFPV3_STR
))
{
if
(
features
.
end
()
!=
features
.
find
(
CPU_INFO_VFPV3D16_STR
))
{
result
|=
FEATURES_HAS_VFPv3d16
;
}
else
{
result
|=
FEATURES_HAS_VFPv3
;
}
}
}
}
#endif
#endif
return
result
;
}
...
...
@@ -116,7 +116,7 @@ string GetPlatformName()
if
(
cpu_info
.
end
()
!=
hw_iterator
)
{
hardware_name
=
hw_iterator
->
second
;
hardware_name
=
hw_iterator
->
second
;
}
return
hardware_name
;
...
...
@@ -126,37 +126,37 @@ int GetProcessorCount()
{
FILE
*
cpuPossible
=
fopen
(
"/sys/devices/system/cpu/possible"
,
"r"
);
if
(
!
cpuPossible
)
return
1
;
return
1
;
char
buf
[
2000
];
//big enough for 1000 CPUs in worst possible configuration
char
*
pbuf
=
fgets
(
buf
,
sizeof
(
buf
),
cpuPossible
);
fclose
(
cpuPossible
);
if
(
!
pbuf
)
return
1
;
return
1
;
//parse string of form "0-1,3,5-7,10,13-15"
int
cpusAvailable
=
0
;
int
cpusAvailable
=
0
;
while
(
*
pbuf
)
{
const
char
*
pos
=
pbuf
;
bool
range
=
false
;
while
(
*
pbuf
&&
*
pbuf
!=
','
)
while
(
*
pbuf
)
{
if
(
*
pbuf
==
'-'
)
range
=
true
;
++
pbuf
;
}
if
(
*
pbuf
)
*
pbuf
++
=
0
;
if
(
!
range
)
++
cpusAvailable
;
else
{
int
rstart
=
0
,
rend
=
0
;
sscanf
(
pos
,
"%d-%d"
,
&
rstart
,
&
rend
);
cpusAvailable
+=
rend
-
rstart
+
1
;
const
char
*
pos
=
pbuf
;
bool
range
=
false
;
while
(
*
pbuf
&&
*
pbuf
!=
','
)
{
if
(
*
pbuf
==
'-'
)
range
=
true
;
++
pbuf
;
}
if
(
*
pbuf
)
*
pbuf
++
=
0
;
if
(
!
range
)
++
cpusAvailable
;
else
{
int
rstart
=
0
,
rend
=
0
;
sscanf
(
pos
,
"%d-%d"
,
&
rstart
,
&
rend
);
cpusAvailable
+=
rend
-
rstart
+
1
;
}
}
}
return
cpusAvailable
?
cpusAvailable
:
1
;
return
cpusAvailable
?
cpusAvailable
:
1
;
}
int
DetectKnownPlatforms
()
...
...
@@ -165,20 +165,20 @@ int DetectKnownPlatforms()
if
(
3
==
tegra_status
)
{
return
PLATFORM_TEGRA3
;
return
PLATFORM_TEGRA3
;
}
else
{
return
PLATFORM_UNKNOWN
;
return
PLATFORM_UNKNOWN
;
}
// NOTE: Uncomment when all Tegras will be supported
/*if (tegra_status > 0)
{
return PLATFORM_TEGRA + tegra_status - 1;
}
else
{
return PLATFORM_UNKNOWN;
}*/
*
{
*
return PLATFORM_TEGRA + tegra_status - 1;
}
else
{
return PLATFORM_UNKNOWN;
}*/
}
\ No newline at end of file
android/service/engine/jni/BinderComponent/OpenCVEngine.cpp
View file @
293063ee
...
...
@@ -42,31 +42,31 @@ std::string OpenCVEngine::NormalizeVersionString(std::string version)
if
(
version
.
empty
())
{
return
result
;
return
result
;
}
if
((
'a'
==
version
[
version
.
size
()
-
1
])
||
(
'b'
==
version
[
version
.
size
()
-
1
]))
{
suffix
=
version
[
version
.
size
()
-
1
];
version
.
erase
(
version
.
size
()
-
1
);
suffix
=
version
[
version
.
size
()
-
1
];
version
.
erase
(
version
.
size
()
-
1
);
}
std
::
vector
<
std
::
string
>
parts
=
SplitStringVector
(
version
,
'.'
);
if
(
parts
.
size
()
>=
2
)
{
if
(
parts
.
size
()
>=
3
)
{
result
=
parts
[
0
]
+
parts
[
1
]
+
parts
[
2
]
+
suffix
;
if
(
!
ValidateVersionString
(
result
))
result
=
""
;
}
else
{
result
=
parts
[
0
]
+
parts
[
1
]
+
"0"
+
suffix
;
if
(
!
ValidateVersionString
(
result
))
result
=
""
;
}
if
(
parts
.
size
()
>=
3
)
{
result
=
parts
[
0
]
+
parts
[
1
]
+
parts
[
2
]
+
suffix
;
if
(
!
ValidateVersionString
(
result
))
result
=
""
;
}
else
{
result
=
parts
[
0
]
+
parts
[
1
]
+
"0"
+
suffix
;
if
(
!
ValidateVersionString
(
result
))
result
=
""
;
}
}
return
result
;
...
...
@@ -95,19 +95,19 @@ String16 OpenCVEngine::GetLibPathByVersion(android::String16 version)
if
(
!
norm_version
.
empty
())
{
path
=
PackageManager
->
GetPackagePathByVersion
(
norm_version
,
Platform
,
CpuID
);
if
(
path
.
empty
())
{
LOGI
(
"Package OpenCV of version %s is not installed. Try to install it :)"
,
norm_version
.
c_str
());
}
else
{
FixPermissions
(
path
);
}
path
=
PackageManager
->
GetPackagePathByVersion
(
norm_version
,
Platform
,
CpuID
);
if
(
path
.
empty
())
{
LOGI
(
"Package OpenCV of version %s is not installed. Try to install it :)"
,
norm_version
.
c_str
());
}
else
{
FixPermissions
(
path
);
}
}
else
{
LOGE
(
"OpenCV version
\"
%s
\"
(%s) is not supported"
,
String8
(
version
).
string
(),
norm_version
.
c_str
());
LOGE
(
"OpenCV version
\"
%s
\"
(%s) is not supported"
,
String8
(
version
).
string
(),
norm_version
.
c_str
());
}
return
String16
(
path
.
c_str
());
...
...
@@ -122,46 +122,46 @@ android::String16 OpenCVEngine::GetLibraryList(android::String16 version)
if
(
!
norm_version
.
empty
())
{
std
::
string
tmp
=
PackageManager
->
GetPackagePathByVersion
(
norm_version
,
Platform
,
CpuID
);
if
(
!
tmp
.
empty
())
{
tmp
+=
(
std
::
string
(
"/"
)
+
LIB_OPENCV_INFO_NAME
);
LOGD
(
"Trying to load info library
\"
%s
\"
"
,
tmp
.
c_str
());
void
*
handle
;
char
*
(
*
info_func
)();
handle
=
dlopen
(
tmp
.
c_str
(),
RTLD_LAZY
);
if
(
handle
)
std
::
string
tmp
=
PackageManager
->
GetPackagePathByVersion
(
norm_version
,
Platform
,
CpuID
);
if
(
!
tmp
.
empty
())
{
const
char
*
error
;
dlerror
();
*
(
void
**
)
(
&
info_func
)
=
dlsym
(
handle
,
"GetLibraryList"
);
if
((
error
=
dlerror
())
==
NULL
)
{
result
=
String16
((
*
info_func
)());
dlclose
(
handle
);
tmp
+=
(
std
::
string
(
"/"
)
+
LIB_OPENCV_INFO_NAME
);
LOGD
(
"Trying to load info library
\"
%s
\"
"
,
tmp
.
c_str
());
void
*
handle
;
char
*
(
*
info_func
)();
handle
=
dlopen
(
tmp
.
c_str
(),
RTLD_LAZY
);
if
(
handle
)
{
const
char
*
error
;
dlerror
();
*
(
void
**
)
(
&
info_func
)
=
dlsym
(
handle
,
"GetLibraryList"
);
if
((
error
=
dlerror
())
==
NULL
)
{
result
=
String16
((
*
info_func
)());
dlclose
(
handle
);
}
else
{
LOGE
(
"Library loading error:
\"
%s
\"
"
,
error
);
}
}
else
{
LOGI
(
"Info library not found in package"
);
}
}
else
{
LOGE
(
"Library loading error:
\"
%s
\"
"
,
error
);
}
LOGI
(
"Package OpenCV of version %s is not installed. Try to install it :)"
,
norm_version
.
c_str
());
}
else
{
LOGI
(
"Info library not found in package"
);
}
}
else
{
LOGI
(
"Package OpenCV of version %s is not installed. Try to install it :)"
,
norm_version
.
c_str
());
}
}
else
{
LOGE
(
"OpenCV version
\"
%s
\"
is not supported"
,
norm_version
.
c_str
());
LOGE
(
"OpenCV version
\"
%s
\"
is not supported"
,
norm_version
.
c_str
());
}
return
result
;
...
...
@@ -173,26 +173,18 @@ bool OpenCVEngine::InstallVersion(android::String16 version)
std
::
string
norm_version
;
bool
result
=
false
;
LOGD
(
"OpenCVEngine::InstallVersion() begin"
);
norm_version
=
NormalizeVersionString
(
std_version
);
if
(
!
norm_version
.
empty
())
{
LOGD
(
"OpenCVEngine::InstallVersion() begin"
);
if
(
!
PackageManager
->
CheckVersionInstalled
(
norm_version
,
Platform
,
CpuID
))
{
LOGD
(
"PackageManager->InstallVersion call"
);
result
=
PackageManager
->
InstallVersion
(
norm_version
,
Platform
,
CpuID
);
}
else
{
LOGI
(
"Package OpenCV of version %s is already installed. Skiped."
,
norm_version
.
c_str
());
result
=
true
;
}
}
else
{
LOGE
(
"OpenCV version
\"
%s
\"
is not supported"
,
norm_version
.
c_str
());
LOGE
(
"OpenCV version
\"
%s
\"
is not supported"
,
norm_version
.
c_str
());
}
LOGD
(
"OpenCVEngine::InstallVersion() end"
);
...
...
@@ -208,16 +200,16 @@ bool OpenCVEngine::FixPermissions(const std::string& path)
DIR
*
dir
=
opendir
(
path
.
c_str
());
if
(
!
dir
)
{
LOGD
(
"Fixing permissions error"
);
return
false
;
LOGD
(
"Fixing permissions error"
);
return
false
;
}
dirent
*
files
=
readdir
(
dir
);
while
(
files
)
{
LOGD
(
"Fix permissions for
\"
%s
\"
"
,
files
->
d_name
);
chmod
((
path
+
std
::
string
(
"/"
)
+
std
::
string
(
files
->
d_name
)).
c_str
(),
S_IRUSR
|
S_IWUSR
|
S_IXUSR
|
S_IRGRP
|
S_IXGRP
|
S_IROTH
|
S_IXOTH
);
files
=
readdir
(
dir
);
LOGD
(
"Fix permissions for
\"
%s
\"
"
,
files
->
d_name
);
chmod
((
path
+
std
::
string
(
"/"
)
+
std
::
string
(
files
->
d_name
)).
c_str
(),
S_IRUSR
|
S_IWUSR
|
S_IXUSR
|
S_IRGRP
|
S_IXGRP
|
S_IROTH
|
S_IXOTH
);
files
=
readdir
(
dir
);
}
closedir
(
dir
);
...
...
android/service/engine/jni/BinderComponent/ProcReader.cpp
View file @
293063ee
...
...
@@ -12,18 +12,18 @@ map<string, string> GetCpuInfo()
f
.
open
(
"/proc/cpuinfo"
);
if
(
f
.
is_open
())
{
while
(
!
f
.
eof
())
{
string
tmp
;
string
key
;
string
value
;
getline
(
f
,
tmp
);
if
(
ParseString
(
tmp
,
key
,
value
))
while
(
!
f
.
eof
())
{
result
[
key
]
=
value
;
string
tmp
;
string
key
;
string
value
;
getline
(
f
,
tmp
);
if
(
ParseString
(
tmp
,
key
,
value
))
{
result
[
key
]
=
value
;
}
}
}
}
f
.
close
();
...
...
android/service/engine/jni/BinderComponent/StringUtils.cpp
View file @
293063ee
...
...
@@ -8,7 +8,7 @@ bool StripString(string& src)
if
(
src
.
empty
())
{
return
false
;
return
false
;
}
while
((
pos
<
src
.
length
())
&&
(
' '
==
src
[
pos
]))
pos
++
;
...
...
@@ -32,7 +32,7 @@ bool StripString(string& src)
bool
ParseString
(
const
string
&
src
,
string
&
key
,
string
&
value
)
{
if
(
src
.
empty
())
return
false
;
return
false
;
// find seporator ":"
size_t
seporator_pos
=
src
.
find
(
":"
);
...
...
@@ -52,20 +52,19 @@ bool ParseString(const string& src, string& key, string& value)
set
<
string
>
SplitString
(
const
string
&
src
,
const
char
seporator
)
{
set
<
string
>
result
;
if
(
!
src
.
empty
())
{
size_t
seporator_pos
;
size_t
prev_pos
=
0
;
do
{
seporator_pos
=
src
.
find
(
seporator
,
prev_pos
);
result
.
insert
(
src
.
substr
(
prev_pos
,
seporator_pos
-
prev_pos
));
prev_pos
=
seporator_pos
+
1
;
}
while
(
string
::
npos
!=
seporator_pos
);
size_t
seporator_pos
;
size_t
prev_pos
=
0
;
do
{
seporator_pos
=
src
.
find
(
seporator
,
prev_pos
);
result
.
insert
(
src
.
substr
(
prev_pos
,
seporator_pos
-
prev_pos
));
prev_pos
=
seporator_pos
+
1
;
}
while
(
string
::
npos
!=
seporator_pos
);
}
return
result
;
...
...
@@ -77,16 +76,16 @@ vector<string> SplitStringVector(const string& src, const char seporator)
if
(
!
src
.
empty
())
{
size_t
seporator_pos
;
size_t
prev_pos
=
0
;
do
{
seporator_pos
=
src
.
find
(
seporator
,
prev_pos
);
string
tmp
=
src
.
substr
(
prev_pos
,
seporator_pos
-
prev_pos
);
result
.
push_back
(
tmp
);
prev_pos
=
seporator_pos
+
1
;
}
while
(
string
::
npos
!=
seporator_pos
);
size_t
seporator_pos
;
size_t
prev_pos
=
0
;
do
{
seporator_pos
=
src
.
find
(
seporator
,
prev_pos
);
string
tmp
=
src
.
substr
(
prev_pos
,
seporator_pos
-
prev_pos
);
result
.
push_back
(
tmp
);
prev_pos
=
seporator_pos
+
1
;
}
while
(
string
::
npos
!=
seporator_pos
);
}
return
result
;
...
...
android/service/engine/jni/BinderComponent/TegraDetector.cpp
View file @
293063ee
...
...
@@ -15,38 +15,38 @@ int DetectTegra()
gzFile
kernelConfig
=
gzopen
(
KERNEL_CONFIG
,
"r"
);
if
(
kernelConfig
!=
0
)
{
char
tmpbuf
[
KERNEL_CONFIG_MAX_LINE_WIDTH
];
const
char
*
tegra_config
=
KERNEL_CONFIG_TEGRA_MAGIC
;
const
char
*
tegra2_config
=
KERNEL_CONFIG_TEGRA2_MAGIC
;
const
char
*
tegra3_config
=
KERNEL_CONFIG_TEGRA3_MAGIC
;
int
len
=
strlen
(
tegra_config
);
int
len2
=
strlen
(
tegra2_config
);
int
len3
=
strlen
(
tegra3_config
);
while
(
0
!=
gzgets
(
kernelConfig
,
tmpbuf
,
KERNEL_CONFIG_MAX_LINE_WIDTH
))
{
if
(
0
==
strncmp
(
tmpbuf
,
tegra_config
,
len
))
char
tmpbuf
[
KERNEL_CONFIG_MAX_LINE_WIDTH
];
const
char
*
tegra_config
=
KERNEL_CONFIG_TEGRA_MAGIC
;
const
char
*
tegra2_config
=
KERNEL_CONFIG_TEGRA2_MAGIC
;
const
char
*
tegra3_config
=
KERNEL_CONFIG_TEGRA3_MAGIC
;
int
len
=
strlen
(
tegra_config
);
int
len2
=
strlen
(
tegra2_config
);
int
len3
=
strlen
(
tegra3_config
);
while
(
0
!=
gzgets
(
kernelConfig
,
tmpbuf
,
KERNEL_CONFIG_MAX_LINE_WIDTH
))
{
result
=
1
;
}
if
(
0
==
strncmp
(
tmpbuf
,
tegra_config
,
len
))
{
result
=
1
;
}
if
(
0
==
strncmp
(
tmpbuf
,
tegra2_config
,
len2
))
{
result
=
2
;
break
;
}
if
(
0
==
strncmp
(
tmpbuf
,
tegra2_config
,
len2
))
{
result
=
2
;
break
;
}
if
(
0
==
strncmp
(
tmpbuf
,
tegra3_config
,
len3
))
{
result
=
3
;
break
;
}
if
(
0
==
strncmp
(
tmpbuf
,
tegra3_config
,
len3
))
{
result
=
3
;
break
;
}
}
gzclose
(
kernelConfig
);
}
gzclose
(
kernelConfig
);
}
else
{
result
=
TEGRA_DETECTOR_ERROR
;
result
=
TEGRA_DETECTOR_ERROR
;
}
return
result
;
...
...
android/service/engine/jni/JNIWrapper/JavaBasedPackageManager.cpp
View file @
293063ee
...
...
@@ -8,8 +8,8 @@
using
namespace
std
;
JavaBasedPackageManager
::
JavaBasedPackageManager
(
JavaVM
*
JavaMashine
,
jobject
MarketConnector
)
:
JavaContext
(
JavaMashine
),
JavaPackageManager
(
MarketConnector
)
JavaContext
(
JavaMashine
),
JavaPackageManager
(
MarketConnector
)
{
assert
(
JavaContext
);
assert
(
JavaPackageManager
);
...
...
@@ -24,23 +24,23 @@ bool JavaBasedPackageManager::InstallPackage(const PackageInfo& package)
self_attached
=
(
JNI_EDETACHED
==
JavaContext
->
GetEnv
((
void
**
)
&
jenv
,
JNI_VERSION_1_6
));
if
(
self_attached
)
{
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
}
LOGD
(
"GetObjectClass call
\n
"
);
jclass
jclazz
=
jenv
->
GetObjectClass
(
JavaPackageManager
);
if
(
!
jclazz
)
{
LOGE
(
"MarketConnector class was not found!"
);
return
false
;
LOGE
(
"MarketConnector class was not found!"
);
return
false
;
}
LOGD
(
"GetMethodID call
\n
"
);
jmethodID
jmethod
=
jenv
->
GetMethodID
(
jclazz
,
"InstallAppFromMarket"
,
"(Ljava/lang/String;)Z"
);
if
(
!
jmethod
)
{
LOGE
(
"MarketConnector::GetAppFormMarket method was not found!"
);
return
false
;
LOGE
(
"MarketConnector::GetAppFormMarket method was not found!"
);
return
false
;
}
LOGD
(
"Calling java package manager with package name %s
\n
"
,
package
.
GetFullName
().
c_str
());
...
...
@@ -50,7 +50,7 @@ bool JavaBasedPackageManager::InstallPackage(const PackageInfo& package)
if
(
self_attached
)
{
JavaContext
->
DetachCurrentThread
();
JavaContext
->
DetachCurrentThread
();
}
LOGD
(
"JavaBasedPackageManager::InstallPackage() end
\n
"
);
...
...
@@ -69,23 +69,23 @@ vector<PackageInfo> JavaBasedPackageManager::GetInstalledPackages()
self_attached
=
(
JNI_EDETACHED
==
JavaContext
->
GetEnv
((
void
**
)
&
jenv
,
JNI_VERSION_1_6
));
if
(
self_attached
)
{
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
}
LOGD
(
"GetObjectClass call"
);
jclass
jclazz
=
jenv
->
GetObjectClass
(
JavaPackageManager
);
if
(
!
jclazz
)
{
LOGE
(
"MarketConnector class was not found!"
);
return
result
;
LOGE
(
"MarketConnector class was not found!"
);
return
result
;
}
LOGD
(
"GetMethodID call"
);
jmethodID
jmethod
=
jenv
->
GetMethodID
(
jclazz
,
"GetInstalledOpenCVPackages"
,
"()[Landroid/content/pm/PackageInfo;"
);
if
(
!
jmethod
)
{
LOGE
(
"MarketConnector::GetInstalledOpenCVPackages method was not found!"
);
return
result
;
LOGE
(
"MarketConnector::GetInstalledOpenCVPackages method was not found!"
);
return
result
;
}
LOGD
(
"Java package manager call"
);
...
...
@@ -98,19 +98,19 @@ vector<PackageInfo> JavaBasedPackageManager::GetInstalledPackages()
for
(
jsize
i
=
0
;
i
<
size
;
i
++
)
{
jobject
jtmp
=
jenv
->
GetObjectArrayElement
(
jpkgs
,
i
);
PackageInfo
tmp
=
ConvertPackageFromJava
(
jtmp
,
jenv
);
jenv
->
DeleteLocalRef
(
jtmp
);
jobject
jtmp
=
jenv
->
GetObjectArrayElement
(
jpkgs
,
i
);
PackageInfo
tmp
=
ConvertPackageFromJava
(
jtmp
,
jenv
);
jenv
->
DeleteLocalRef
(
jtmp
);
if
(
tmp
.
IsValid
())
result
.
push_back
(
tmp
);
if
(
tmp
.
IsValid
())
result
.
push_back
(
tmp
);
}
jenv
->
DeleteLocalRef
(
jpkgs
);
if
(
self_attached
)
{
JavaContext
->
DetachCurrentThread
();
JavaContext
->
DetachCurrentThread
();
}
LOGD
(
"JavaBasedPackageManager::GetInstalledPackages() end"
);
...
...
@@ -140,20 +140,20 @@ PackageInfo JavaBasedPackageManager::ConvertPackageFromJava(jobject package, JNI
jint
api_level
=
jenv
->
GetStaticIntField
(
jclazz
,
jfield
);
if
(
api_level
>
8
)
{
jclazz
=
jenv
->
GetObjectClass
(
package
);
jfield
=
jenv
->
GetFieldID
(
jclazz
,
"applicationInfo"
,
"Landroid/content/pm/ApplicationInfo;"
);
jobject
japp_info
=
jenv
->
GetObjectField
(
package
,
jfield
);
jclazz
=
jenv
->
GetObjectClass
(
japp_info
);
jfield
=
jenv
->
GetFieldID
(
jclazz
,
"nativeLibraryDir"
,
"Ljava/lang/String;"
);
jstring
jpathobj
=
static_cast
<
jstring
>
(
jenv
->
GetObjectField
(
japp_info
,
jfield
));
const
char
*
jpathstr
=
jenv
->
GetStringUTFChars
(
jpathobj
,
NULL
);
path
=
string
(
jpathstr
);
jenv
->
ReleaseStringUTFChars
(
jpathobj
,
jpathstr
);
jenv
->
DeleteLocalRef
(
jpathobj
);
jclazz
=
jenv
->
GetObjectClass
(
package
);
jfield
=
jenv
->
GetFieldID
(
jclazz
,
"applicationInfo"
,
"Landroid/content/pm/ApplicationInfo;"
);
jobject
japp_info
=
jenv
->
GetObjectField
(
package
,
jfield
);
jclazz
=
jenv
->
GetObjectClass
(
japp_info
);
jfield
=
jenv
->
GetFieldID
(
jclazz
,
"nativeLibraryDir"
,
"Ljava/lang/String;"
);
jstring
jpathobj
=
static_cast
<
jstring
>
(
jenv
->
GetObjectField
(
japp_info
,
jfield
));
const
char
*
jpathstr
=
jenv
->
GetStringUTFChars
(
jpathobj
,
NULL
);
path
=
string
(
jpathstr
);
jenv
->
ReleaseStringUTFChars
(
jpathobj
,
jpathstr
);
jenv
->
DeleteLocalRef
(
jpathobj
);
}
else
{
path
=
"/data/data/"
+
name
+
"/lib"
;
path
=
"/data/data/"
+
name
+
"/lib"
;
}
return
PackageInfo
(
name
,
path
,
verison
);
...
...
@@ -170,14 +170,14 @@ JavaBasedPackageManager::~JavaBasedPackageManager()
self_attached
=
(
JNI_EDETACHED
==
JavaContext
->
GetEnv
((
void
**
)
&
jenv
,
JNI_VERSION_1_6
));
if
(
self_attached
)
{
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
JavaContext
->
AttachCurrentThread
(
&
jenv
,
NULL
);
}
jenv
->
DeleteGlobalRef
(
JavaPackageManager
);
if
(
self_attached
)
{
JavaContext
->
DetachCurrentThread
();
JavaContext
->
DetachCurrentThread
();
}
LOGD
(
"JavaBasedPackageManager::~JavaBasedPackageManager() end"
);
}
android/service/engine/jni/JNIWrapper/OpenCVEngine_jni.cpp
View file @
293063ee
...
...
@@ -20,11 +20,11 @@ JNIEXPORT jobject JNICALL Java_org_opencv_engine_BinderConnector_Connect(JNIEnv*
LOGI
(
"Creating new component"
);
if
(
NULL
!=
OpenCVEngineBinder
.
get
())
{
LOGI
(
"New component created successfully"
);
LOGI
(
"New component created successfully"
);
}
else
{
LOGE
(
"OpenCV Engine component was not created!"
);
LOGE
(
"OpenCV Engine component was not created!"
);
}
return
javaObjectForIBinder
(
env
,
OpenCVEngineBinder
);
...
...
@@ -36,25 +36,25 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_engine_BinderConnector_Init(JNIEnv* e
if
(
NULL
==
PackageManager
)
{
JavaVM
*
jvm
;
env
->
GetJavaVM
(
&
jvm
);
PackageManager
=
new
JavaBasedPackageManager
(
jvm
,
env
->
NewGlobalRef
(
market
));
JavaVM
*
jvm
;
env
->
GetJavaVM
(
&
jvm
);
PackageManager
=
new
JavaBasedPackageManager
(
jvm
,
env
->
NewGlobalRef
(
market
));
}
if
(
PackageManager
)
{
if
(
!
OpenCVEngineBinder
.
get
())
{
OpenCVEngineBinder
=
new
OpenCVEngine
(
PackageManager
);
return
(
NULL
!=
OpenCVEngineBinder
.
get
());
}
else
{
return
true
;
}
if
(
!
OpenCVEngineBinder
.
get
())
{
OpenCVEngineBinder
=
new
OpenCVEngine
(
PackageManager
);
return
(
NULL
!=
OpenCVEngineBinder
.
get
());
}
else
{
return
true
;
}
}
else
{
return
false
;
return
false
;
}
}
...
...
@@ -67,4 +67,3 @@ JNIEXPORT void JNICALL Java_org_opencv_engine_BinderConnector_Final(JNIEnv *, jo
delete
PackageManager
;
PackageManager
=
NULL
;
}
android/service/engine/jni/NativeClient/ClientMain.cpp
View file @
293063ee
...
...
@@ -25,10 +25,10 @@ int main(int argc, char *argv[])
LOGI
(
"Trying to contect to service"
);
do
{
EngineService
=
ServiceManager
->
getService
(
IOpenCVEngine
::
descriptor
);
if
(
EngineService
!=
0
)
break
;
LOGW
(
"OpenCVEngine not published, waiting..."
);
usleep
(
500000
);
// 0.5 s
EngineService
=
ServiceManager
->
getService
(
IOpenCVEngine
::
descriptor
);
if
(
EngineService
!=
0
)
break
;
LOGW
(
"OpenCVEngine not published, waiting..."
);
usleep
(
500000
);
// 0.5 s
}
while
(
true
);
LOGI
(
"Connection established"
);
...
...
android/service/engine/jni/NativeService/CommonPackageManager.cpp
View file @
293063ee
...
...
@@ -18,9 +18,9 @@ set<string> CommonPackageManager::GetInstalledVersions()
for
(
vector
<
PackageInfo
>::
const_iterator
it
=
installed_packages
.
begin
();
it
!=
installed_packages
.
end
();
++
it
)
{
string
version
=
it
->
GetVersion
();
assert
(
!
version
.
empty
());
result
.
insert
(
version
);
string
version
=
it
->
GetVersion
();
assert
(
!
version
.
empty
());
result
.
insert
(
version
);
}
return
result
;
...
...
@@ -36,12 +36,13 @@ bool CommonPackageManager::CheckVersionInstalled(const std::string& version, int
for
(
vector
<
PackageInfo
>::
const_iterator
it
=
packages
.
begin
();
it
!=
packages
.
end
();
++
it
)
{
LOGD
(
"Found package:
\"
%s
\"
"
,
it
->
GetFullName
().
c_str
());
LOGD
(
"Found package:
\"
%s
\"
"
,
it
->
GetFullName
().
c_str
());
}
if
(
!
packages
.
empty
())
{
result
=
(
packages
.
end
()
!=
find
(
packages
.
begin
(),
packages
.
end
(),
target_package
));
vector
<
PackageInfo
>::
const_iterator
it
=
find
(
packages
.
begin
(),
packages
.
end
(),
target_package
);
result
=
(
it
!=
packages
.
end
());
}
LOGD
(
"CommonPackageManager::CheckVersionInstalled() end"
);
return
result
;
...
...
@@ -63,66 +64,66 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
for
(
vector
<
PackageInfo
>::
iterator
it
=
all_packages
.
begin
();
it
!=
all_packages
.
end
();
++
it
)
{
LOGD
(
"Check version
\"
%s
\"
compatibility with
\"
%s
\"\n
"
,
version
.
c_str
(),
it
->
GetVersion
().
c_str
());
if
(
IsVersionCompatible
(
version
,
it
->
GetVersion
()))
{
LOGD
(
"Compatible"
);
packages
.
push_back
(
*
it
);
}
else
{
LOGD
(
"NOT Compatible"
);
}
}
if
(
!
packages
.
empty
())
{
vector
<
PackageInfo
>::
iterator
found
=
find
(
packages
.
begin
(),
packages
.
end
(),
target_package
);
if
(
packages
.
end
()
!=
found
)
{
result
=
found
->
GetInstalationPath
();
}
else
{
int
OptRating
=
-
1
;
std
::
vector
<
std
::
pair
<
int
,
int
>
>&
group
=
CommonPackageManager
::
ArmRating
;
if
((
cpu_id
&
ARCH_X86
)
||
(
cpu_id
&
ARCH_X64
))
group
=
CommonPackageManager
::
IntelRating
;
int
HardwareRating
=
GetHardwareRating
(
platform
,
cpu_id
,
group
);
LOGD
(
"Current hardware platform %d, %d"
,
platform
,
cpu_id
);
if
(
-
1
==
HardwareRating
)
LOGD
(
"Check version
\"
%s
\"
compatibility with
\"
%s
\"\n
"
,
version
.
c_str
(),
it
->
GetVersion
().
c_str
());
if
(
IsVersionCompatible
(
version
,
it
->
GetVersion
()))
{
LOGE
(
"Cannot calculate rating for current hardware platform!"
);
LOGD
(
"Compatible"
);
packages
.
push_back
(
*
it
);
}
else
{
for
(
vector
<
PackageInfo
>::
iterator
it
=
packages
.
begin
();
it
!=
packages
.
end
();
++
it
)
{
int
PackageRating
=
GetHardwareRating
(
it
->
GetPlatform
(),
it
->
GetCpuID
(),
group
);
if
(
PackageRating
>=
0
)
{
if
((
PackageRating
<=
HardwareRating
)
&&
(
PackageRating
>
OptRating
))
{
OptRating
=
PackageRating
;
found
=
it
;
}
}
LOGD
(
"NOT Compatible"
);
}
}
if
((
-
1
!=
OptRating
)
&&
(
packages
.
end
()
!=
found
))
if
(
!
packages
.
empty
())
{
vector
<
PackageInfo
>::
iterator
found
=
find
(
packages
.
begin
(),
packages
.
end
(),
target_package
);
if
(
packages
.
end
()
!=
found
)
{
result
=
found
->
GetInstalationPath
();
}
else
{
LOGI
(
"Found package is incompatible with current hardware platform"
);
}
int
OptRating
=
-
1
;
std
::
vector
<
std
::
pair
<
int
,
int
>
>&
group
=
CommonPackageManager
::
ArmRating
;
if
((
cpu_id
&
ARCH_X86
)
||
(
cpu_id
&
ARCH_X64
))
group
=
CommonPackageManager
::
IntelRating
;
int
HardwareRating
=
GetHardwareRating
(
platform
,
cpu_id
,
group
);
LOGD
(
"Current hardware platform %d, %d"
,
platform
,
cpu_id
);
if
(
-
1
==
HardwareRating
)
{
LOGE
(
"Cannot calculate rating for current hardware platform!"
);
}
else
{
for
(
vector
<
PackageInfo
>::
iterator
it
=
packages
.
begin
();
it
!=
packages
.
end
();
++
it
)
{
int
PackageRating
=
GetHardwareRating
(
it
->
GetPlatform
(),
it
->
GetCpuID
(),
group
);
if
(
PackageRating
>=
0
)
{
if
((
PackageRating
<=
HardwareRating
)
&&
(
PackageRating
>
OptRating
))
{
OptRating
=
PackageRating
;
found
=
it
;
}
}
}
if
((
-
1
!=
OptRating
)
&&
(
packages
.
end
()
!=
found
))
{
result
=
found
->
GetInstalationPath
();
}
else
{
LOGI
(
"Found package is incompatible with current hardware platform"
);
}
}
}
}
}
return
result
;
}
...
...
android/service/engine/jni/NativeService/PackageInfo.cpp
View file @
293063ee
...
...
@@ -32,23 +32,23 @@ inline string JoinARMFeatures(int cpu_id)
if
(
FEATURES_HAS_NEON2
&
cpu_id
)
{
if
(
!
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
)
||
(
ARCH_ARMv7
&
cpu_id
)))
result
=
string
(
FEATURES_HAS_NEON2_NAME
);
if
(
!
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
)
||
(
ARCH_ARMv7
&
cpu_id
)))
result
=
string
(
FEATURES_HAS_NEON2_NAME
);
}
else
if
(
FEATURES_HAS_NEON
&
cpu_id
)
{
if
(
!
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
)))
result
=
string
(
FEATURES_HAS_NEON_NAME
);
if
(
!
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
)))
result
=
string
(
FEATURES_HAS_NEON_NAME
);
}
else
if
(
FEATURES_HAS_VFPv3
&
cpu_id
)
{
if
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
))
result
=
string
(
FEATURES_HAS_VFPv3_NAME
);
if
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
))
result
=
string
(
FEATURES_HAS_VFPv3_NAME
);
}
else
if
(
FEATURES_HAS_VFPv3d16
&
cpu_id
)
{
if
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
))
result
=
string
(
FEATURES_HAS_VFPv3d16_NAME
);
if
((
ARCH_ARMv5
&
cpu_id
)
||
(
ARCH_ARMv6
&
cpu_id
))
result
=
string
(
FEATURES_HAS_VFPv3d16_NAME
);
}
return
result
;
...
...
@@ -60,22 +60,22 @@ inline int SplitARMFeatures(const vector<string>& features)
for
(
size_t
i
=
3
;
i
<
features
.
size
();
i
++
)
{
if
(
FEATURES_HAS_VFPv3_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_VFPv3
;
}
else
if
(
FEATURES_HAS_VFPv3d16_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_VFPv3d16
;
}
else
if
(
FEATURES_HAS_NEON_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_NEON
;
}
else
if
(
FEATURES_HAS_NEON2_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_NEON2
;
}
if
(
FEATURES_HAS_VFPv3_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_VFPv3
;
}
else
if
(
FEATURES_HAS_VFPv3d16_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_VFPv3d16
;
}
else
if
(
FEATURES_HAS_NEON_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_NEON
;
}
else
if
(
FEATURES_HAS_NEON2_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_NEON2
;
}
}
return
result
;
...
...
@@ -87,15 +87,15 @@ inline string JoinIntelFeatures(int cpu_id)
if
(
FEATURES_HAS_SSSE3
&
cpu_id
)
{
result
=
FEATURES_HAS_SSSE3_NAME
;
result
=
FEATURES_HAS_SSSE3_NAME
;
}
else
if
(
FEATURES_HAS_SSE2
&
cpu_id
)
{
result
=
FEATURES_HAS_SSE2_NAME
;
result
=
FEATURES_HAS_SSE2_NAME
;
}
else
if
(
FEATURES_HAS_SSE
&
cpu_id
)
{
result
=
FEATURES_HAS_SSE_NAME
;
result
=
FEATURES_HAS_SSE_NAME
;
}
return
result
;
...
...
@@ -107,18 +107,18 @@ inline int SplitIntelFeatures(const vector<string>& features)
for
(
size_t
i
=
3
;
i
<
features
.
size
();
i
++
)
{
if
(
FEATURES_HAS_SSSE3_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSSE3
;
}
else
if
(
FEATURES_HAS_SSE2_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSE2
;
}
else
if
(
FEATURES_HAS_SSE_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSE
;
}
if
(
FEATURES_HAS_SSSE3_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSSE3
;
}
else
if
(
FEATURES_HAS_SSE2_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSE2
;
}
else
if
(
FEATURES_HAS_SSE_NAME
==
features
[
i
])
{
result
|=
FEATURES_HAS_SSE
;
}
}
return
result
;
...
...
@@ -130,12 +130,12 @@ inline string SplitVersion(const vector<string>& features, const string& package
if
((
features
.
size
()
>
1
)
&&
(
'v'
==
features
[
1
][
0
]))
{
result
=
features
[
1
].
substr
(
1
);
result
+=
SplitStringVector
(
package_version
,
'.'
)[
0
];
result
=
features
[
1
].
substr
(
1
);
result
+=
SplitStringVector
(
package_version
,
'.'
)[
0
];
}
else
{
// TODO: Report package name format error
// TODO: Report package name format error
}
return
result
;
...
...
@@ -158,23 +158,23 @@ inline int SplitPlatfrom(const vector<string>& features)
if
(
features
.
size
()
>
2
)
{
string
tmp
=
features
[
2
];
if
(
PLATFORM_TEGRA_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA
;
}
else
if
(
PLATFORM_TEGRA2_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA2
;
}
else
if
(
PLATFORM_TEGRA3_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA3
;
}
string
tmp
=
features
[
2
];
if
(
PLATFORM_TEGRA_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA
;
}
else
if
(
PLATFORM_TEGRA2_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA2
;
}
else
if
(
PLATFORM_TEGRA3_NAME
==
tmp
)
{
result
=
PLATFORM_TEGRA3
;
}
}
else
{
// TODO: Report package name format error
// TODO: Report package name format error
}
return
result
;
...
...
@@ -189,135 +189,135 @@ inline int SplitPlatfrom(const vector<string>& features)
* Example: armv7_neon, armv5_vfpv3
*/
PackageInfo
::
PackageInfo
(
const
string
&
version
,
int
platform
,
int
cpu_id
,
std
::
string
install_path
)
:
Version
(
version
),
Platform
(
platform
),
CpuID
(
cpu_id
),
InstallPath
(
""
)
Version
(
version
),
Platform
(
platform
),
CpuID
(
cpu_id
),
InstallPath
(
""
)
{
#ifndef __SUPPORT_TEGRA3
#ifndef __SUPPORT_TEGRA3
Platform
=
PLATFORM_UNKNOWN
;
#endif
#endif
FullName
=
BasePackageName
+
"_v"
+
Version
.
substr
(
0
,
Version
.
size
()
-
1
);
if
(
PLATFORM_UNKNOWN
!=
Platform
)
{
FullName
+=
string
(
"_"
)
+
JoinPlatform
(
platform
);
FullName
+=
string
(
"_"
)
+
JoinPlatform
(
platform
);
}
else
{
if
(
ARCH_UNKNOWN
!=
CpuID
)
{
if
(
ARCH_X86
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch x86"
);
FullName
+=
string
(
"_"
)
+
ARCH_X86_NAME
;
#ifdef __SUPPORT_INTEL_FEATURES
string
features
=
JoinIntelFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_X64
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch x64"
);
#ifdef __SUPPORT_INTEL_x64
FullName
+=
string
(
"_"
)
+
ARCH_X64_NAME
;
#else
FullName
+=
string
(
"_"
)
+
ARCH_X86_NAME
;
#endif
#ifdef __SUPPORT_INTEL_FEATURES
string
features
=
JoinIntelFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv5
&
CpuID
)
if
(
ARCH_UNKNOWN
!=
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv5"
);
FullName
+=
string
(
"_"
)
+
ARCH_ARMv5_NAME
;
#ifdef __SUPPORT_ARMEABI_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv6
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv6"
);
// NOTE: ARM v5 used instead ARM v6
//FullName += string("_") + ARCH_ARMv6_NAME;
FullName
+=
string
(
"_"
)
+
ARCH_ARMv5_NAME
;
#ifdef __SUPPORT_ARMEABI_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv7
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv7"
);
FullName
+=
string
(
"_"
)
+
ARCH_ARMv7_NAME
;
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv8
&
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;
//}
if
(
ARCH_X86
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch x86"
);
FullName
+=
string
(
"_"
)
+
ARCH_X86_NAME
;
#ifdef __SUPPORT_INTEL_FEATURES
string
features
=
JoinIntelFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_X64
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch x64"
);
#ifdef __SUPPORT_INTEL_x64
FullName
+=
string
(
"_"
)
+
ARCH_X64_NAME
;
#else
FullName
+=
string
(
"_"
)
+
ARCH_X86_NAME
;
#endif
#ifdef __SUPPORT_INTEL_FEATURES
string
features
=
JoinIntelFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv5
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv5"
);
FullName
+=
string
(
"_"
)
+
ARCH_ARMv5_NAME
;
#ifdef __SUPPORT_ARMEABI_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv6
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv6"
);
// NOTE: ARM v5 used instead ARM v6
//FullName += string("_") + ARCH_ARMv6_NAME;
FullName
+=
string
(
"_"
)
+
ARCH_ARMv5_NAME
;
#ifdef __SUPPORT_ARMEABI_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv7
&
CpuID
)
{
LOGD
(
"PackageInfo::PackageInfo: package arch ARMv7"
);
FullName
+=
string
(
"_"
)
+
ARCH_ARMv7_NAME
;
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES
string
features
=
JoinARMFeatures
(
CpuID
);
if
(
!
features
.
empty
())
{
FullName
+=
string
(
"_"
)
+
features
;
}
#endif
}
else
if
(
ARCH_ARMv8
&
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;
//}
}
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS
&
CpuID
)
{
FullName
+=
string
(
"_"
)
+
ARCH_MIPS_NAME
;
}
#endif
else
{
LOGD
(
"PackageInfo::PackageInfo: package arch unknown"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
}
}
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS
&
CpuID
)
{
FullName
+=
string
(
"_"
)
+
ARCH_MIPS_NAME
;
}
#endif
else
{
LOGD
(
"PackageInfo::PackageInfo: package arch unknown"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
LOGD
(
"PackageInfo::PackageInfo: package arch unknown"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
}
}
else
{
LOGD
(
"PackageInfo::PackageInfo: package arch unknown"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
}
}
if
(
!
FullName
.
empty
())
{
InstallPath
=
install_path
+
FullName
+
"/lib"
;
InstallPath
=
install_path
+
FullName
+
"/lib"
;
}
}
PackageInfo
::
PackageInfo
(
const
string
&
fullname
,
const
string
&
install_path
,
string
package_version
)
:
FullName
(
fullname
),
InstallPath
(
install_path
)
FullName
(
fullname
),
InstallPath
(
install_path
)
{
LOGD
(
"PackageInfo::PackageInfo(
\"
%s
\"
,
\"
%s
\"
,
\"
%s
\"
)"
,
fullname
.
c_str
(),
install_path
.
c_str
(),
package_version
.
c_str
());
...
...
@@ -326,127 +326,127 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, str
if
(
OPENCV_ENGINE_PACKAGE
==
fullname
)
{
// Science version 1.7 OpenCV Manager has it's own version of OpenCV inside
// Load libopencv_info.so to understand OpenCV version, platform and other features
std
::
string
tmp
;
if
(
install_path
.
empty
())
{
tmp
=
std
::
string
(
DEFAULT_ENGINE_INSTALL_PATH
)
+
"/"
+
LIB_OPENCV_INFO_NAME
;
}
else
{
tmp
=
install_path
+
"/"
+
LIB_OPENCV_INFO_NAME
;
}
LOGD
(
"Trying to load info library
\"
%s
\"
"
,
tmp
.
c_str
());
void
*
handle
;
const
char
*
(
*
name_func
)();
const
char
*
(
*
revision_func
)();
handle
=
dlopen
(
tmp
.
c_str
(),
RTLD_LAZY
);
if
(
handle
)
{
const
char
*
error
;
dlerror
();
*
(
void
**
)
(
&
name_func
)
=
dlsym
(
handle
,
"GetPackageName"
);
*
(
void
**
)
(
&
revision_func
)
=
dlsym
(
handle
,
"GetRevision"
);
error
=
dlerror
();
if
(
!
error
&&
revision_func
&&
name_func
)
// Science version 1.7 OpenCV Manager has it's own version of OpenCV inside
// Load libopencv_info.so to understand OpenCV version, platform and other features
std
::
string
tmp
;
if
(
install_path
.
empty
())
{
FullName
=
std
::
string
((
*
name_func
)());
package_version
=
std
::
string
((
*
revision_func
)());
dlclose
(
handle
);
LOGI
(
"OpenCV package
\"
%s
\"
revision
\"
%s
\"
found"
,
FullName
.
c_str
(),
package_version
.
c_str
());
tmp
=
std
::
string
(
DEFAULT_ENGINE_INSTALL_PATH
)
+
"/"
+
LIB_OPENCV_INFO_NAME
;
}
else
{
LOGE
(
"Library loading error (%x, %x):
\"
%s
\"
"
,
name_func
,
revision_func
,
error
)
;
tmp
=
install_path
+
"/"
+
LIB_OPENCV_INFO_NAME
;
}
}
else
{
LOGI
(
"Info library not found in package"
);
LOGI
(
"OpenCV Manager package does not contain any verison of OpenCV library"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
LOGD
(
"Trying to load info library
\"
%s
\"
"
,
tmp
.
c_str
());
void
*
handle
;
const
char
*
(
*
name_func
)();
const
char
*
(
*
revision_func
)();
handle
=
dlopen
(
tmp
.
c_str
(),
RTLD_LAZY
);
if
(
handle
)
{
const
char
*
error
;
dlerror
();
*
(
void
**
)
(
&
name_func
)
=
dlsym
(
handle
,
"GetPackageName"
);
*
(
void
**
)
(
&
revision_func
)
=
dlsym
(
handle
,
"GetRevision"
);
error
=
dlerror
();
if
(
!
error
&&
revision_func
&&
name_func
)
{
FullName
=
std
::
string
((
*
name_func
)());
package_version
=
std
::
string
((
*
revision_func
)());
dlclose
(
handle
);
LOGI
(
"OpenCV package
\"
%s
\"
revision
\"
%s
\"
found"
,
FullName
.
c_str
(),
package_version
.
c_str
());
}
else
{
LOGE
(
"Library loading error (%x, %x):
\"
%s
\"
"
,
name_func
,
revision_func
,
error
);
}
}
else
{
LOGI
(
"Info library not found in package"
);
LOGI
(
"OpenCV Manager package does not contain any verison of OpenCV library"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
}
vector
<
string
>
features
=
SplitStringVector
(
FullName
,
'_'
);
if
(
!
features
.
empty
()
&&
(
BasePackageName
==
features
[
0
]))
{
Version
=
SplitVersion
(
features
,
package_version
);
if
(
Version
.
empty
())
{
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
Platform
=
SplitPlatfrom
(
features
);
if
(
PLATFORM_UNKNOWN
!=
Platform
)
{
CpuID
=
0
;
}
else
{
if
(
features
.
size
()
<
3
)
{
LOGD
(
"It is not OpenCV library package for this platform"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
else
if
(
ARCH_ARMv5_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv5
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_ARMv6_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv6
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_ARMv7_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv7
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_X86_NAME
==
features
[
2
])
{
CpuID
=
ARCH_X86
|
SplitIntelFeatures
(
features
);
}
else
if
(
ARCH_X64_NAME
==
features
[
2
])
Version
=
SplitVersion
(
features
,
package_version
);
if
(
Version
.
empty
())
{
CpuID
=
ARCH_X64
|
SplitIntelFeatures
(
features
);
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS_NAME
==
features
[
2
])
Platform
=
SplitPlatfrom
(
features
);
if
(
PLATFORM_UNKNOWN
!=
Platform
)
{
CpuID
=
ARCH_MIPS
;
CpuID
=
0
;
}
#endif
else
{
if
(
features
.
size
()
<
3
)
{
LOGD
(
"It is not OpenCV library package for this platform"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
else
if
(
ARCH_ARMv5_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv5
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_ARMv6_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv6
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_ARMv7_NAME
==
features
[
2
])
{
CpuID
=
ARCH_ARMv7
|
SplitARMFeatures
(
features
);
}
else
if
(
ARCH_X86_NAME
==
features
[
2
])
{
CpuID
=
ARCH_X86
|
SplitIntelFeatures
(
features
);
}
else
if
(
ARCH_X64_NAME
==
features
[
2
])
{
CpuID
=
ARCH_X64
|
SplitIntelFeatures
(
features
);
}
#ifdef __SUPPORT_MIPS
else
if
(
ARCH_MIPS_NAME
==
features
[
2
])
{
CpuID
=
ARCH_MIPS
;
}
#endif
else
{
LOGD
(
"It is not OpenCV library package for this platform"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
}
}
else
{
LOGD
(
"It is not OpenCV library package for this platform"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
}
}
else
{
LOGD
(
"It is not OpenCV library package for this platform"
);
Version
.
clear
();
CpuID
=
ARCH_UNKNOWN
;
Platform
=
PLATFORM_UNKNOWN
;
return
;
}
}
...
...
android/service/engine/jni/Tests/OpenCVEngineTest.cpp
View file @
293063ee
...
...
@@ -126,7 +126,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
EXPECT_EQ
(
0
,
result
.
size
());
}
#else
#else
// armeabi
TEST
(
OpenCVEngineTest
,
GetPathForExecHWExistVersion
)
{
sp
<
IOpenCVEngine
>
Engine
=
InitConnect
();
...
...
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