Commit 5ffbcf1e authored by Alexander Smorkalov's avatar Alexander Smorkalov

MIPS arch support added to OpenCV manager;

Internal OpenCV library in OpenCV Manager support added;
Unit tests improved, platform specific tests added, MIPS related tests added;
Code refactoring done.
parent ad58e965
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.opencv.engine" package="org.opencv.engine"
android:versionCode="16" android:versionCode="17"
android:versionName="1.6" > android:versionName="1.7" >
<uses-sdk android:minSdkVersion="8" /> <uses-sdk android:minSdkVersion="8" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
......
...@@ -26,6 +26,7 @@ LOCAL_C_INCLUDES := \ ...@@ -26,6 +26,7 @@ LOCAL_C_INCLUDES := \
LOCAL_CFLAGS += -DPLATFORM_ANDROID LOCAL_CFLAGS += -DPLATFORM_ANDROID
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_MIPS
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
...@@ -67,6 +68,7 @@ LOCAL_PRELINK_MODULE := false ...@@ -67,6 +68,7 @@ LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -DPLATFORM_ANDROID LOCAL_CFLAGS += -DPLATFORM_ANDROID
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_MIPS
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_MODULE := libOpenCVEngine_jni LOCAL_MODULE := libOpenCVEngine_jni
......
APP_ABI := armeabi x86 APP_ABI := armeabi x86 mips
APP_PLATFORM := android-8 APP_PLATFORM := android-8
APP_STL := stlport_static APP_STL := stlport_static
APP_CPPFLAGS := -fno-rtti -fno-exceptions APP_CPPFLAGS := -fno-rtti -fno-exceptions
......
...@@ -13,7 +13,7 @@ int GetCpuID() ...@@ -13,7 +13,7 @@ int GetCpuID()
map<string, string> cpu_info = GetCpuInfo(); map<string, string> cpu_info = GetCpuInfo();
map<string, string>::const_iterator it; map<string, string>::const_iterator it;
#ifdef __i386__ #if defined(__i386__)
LOGD("Using X86 HW detector"); LOGD("Using X86 HW detector");
result |= ARCH_X86; result |= ARCH_X86;
it = cpu_info.find("flags"); it = cpu_info.find("flags");
...@@ -33,6 +33,12 @@ int GetCpuID() ...@@ -33,6 +33,12 @@ int GetCpuID()
result |= FEATURES_HAS_SSSE3; result |= FEATURES_HAS_SSSE3;
} }
} }
#elif defined(__mips)
#ifdef __SUPPORT_MIPS
result |= ARCH_MIPS;
#else
result = ARCH_UNKNOWN;
#endif
#else #else
LOGD("Using ARM HW detector"); LOGD("Using ARM HW detector");
it = cpu_info.find("Processor"); it = cpu_info.find("Processor");
...@@ -64,7 +70,6 @@ int GetCpuID() ...@@ -64,7 +70,6 @@ int GetCpuID()
{ {
result |= ARCH_ARMv5; result |= ARCH_ARMv5;
} }
} }
} }
} }
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#define ARCH_ARMv6 134217728L #define ARCH_ARMv6 134217728L
#define ARCH_ARMv7 268435456L #define ARCH_ARMv7 268435456L
#define ARCH_ARMv8 536870912L #define ARCH_ARMv8 536870912L
#define ARCH_MIPS 1073741824L
#define FEATURES_HAS_VFPv3d16 1L #define FEATURES_HAS_VFPv3d16 1L
#define FEATURES_HAS_VFPv3 2L #define FEATURES_HAS_VFPv3 2L
......
...@@ -124,17 +124,17 @@ android::String16 OpenCVEngine::GetLibraryList(android::String16 version) ...@@ -124,17 +124,17 @@ android::String16 OpenCVEngine::GetLibraryList(android::String16 version)
std::string tmp = PackageManager->GetPackagePathByVersion(norm_version, Platform, CpuID); std::string tmp = PackageManager->GetPackagePathByVersion(norm_version, Platform, CpuID);
if (!tmp.empty()) if (!tmp.empty())
{ {
tmp += "/libopencvinfo.so"; tmp += (std::string("/") + LIB_OPENCV_INFO_NAME);
LOGD("Trying to load info library \"%s\"", tmp.c_str()); LOGD("Trying to load info library \"%s\"", tmp.c_str());
void *handle; void* handle;
char* (*info_func)(); char* (*info_func)();
handle = dlopen(tmp.c_str(), RTLD_LAZY); handle = dlopen(tmp.c_str(), RTLD_LAZY);
if (handle) if (handle)
{ {
const char *error; const char* error;
dlerror(); dlerror();
*(void **) (&info_func) = dlsym(handle, "GetLibraryList"); *(void **) (&info_func) = dlsym(handle, "GetLibraryList");
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#define CPU_INFO_ARCH_X86_STR "x86" #define CPU_INFO_ARCH_X86_STR "x86"
#define CPU_INFO_ARCH_MIPS_STR "MIPS"
// public part // public part
std::map<std::string, std::string> GetCpuInfo(); std::map<std::string, std::string> GetCpuInfo();
......
...@@ -3,23 +3,23 @@ ...@@ -3,23 +3,23 @@
#include <jni.h> #include <jni.h>
#include <string> #include <string>
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetCpuID(JNIEnv* env, jclass) JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_GetCpuID(JNIEnv* env, jclass)
{ {
return GetCpuID(); return GetCpuID();
} }
JNIEXPORT jstring JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetPlatformName(JNIEnv* env, jclass) JNIEXPORT jstring JNICALL Java_org_opencv_engine_HardwareDetector_GetPlatformName(JNIEnv* env, jclass)
{ {
std::string hardware_name = GetPlatformName(); std::string hardware_name = GetPlatformName();
return env->NewStringUTF(hardware_name.c_str()); return env->NewStringUTF(hardware_name.c_str());
} }
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetProcessorCount(JNIEnv* env, jclass) JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_GetProcessorCount(JNIEnv* env, jclass)
{ {
return GetProcessorCount(); return GetProcessorCount();
} }
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_DetectKnownPlatforms(JNIEnv* env, jclass) JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_DetectKnownPlatforms(JNIEnv* env, jclass)
{ {
return DetectKnownPlatforms(); return DetectKnownPlatforms();
} }
\ No newline at end of file
...@@ -10,35 +10,35 @@ extern "C" { ...@@ -10,35 +10,35 @@ extern "C" {
#endif #endif
/* /*
* Class: org_opencv_engine_manager_HardwareDetector * Class: org_opencv_engine_HardwareDetector
* Method: GetCpuID * Method: GetCpuID
* Signature: ()I * Signature: ()I
*/ */
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetCpuID JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_GetCpuID
(JNIEnv *, jclass); (JNIEnv *, jclass);
/* /*
* Class: org_opencv_engine_manager_HardwareDetector * Class: org_opencv_engine_HardwareDetector
* Method: GetPlatformName * Method: GetPlatformName
* Signature: ()Ljava/lang/String; * Signature: ()Ljava/lang/String;
*/ */
JNIEXPORT jstring JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetPlatformName JNIEXPORT jstring JNICALL Java_org_opencv_engine_HardwareDetector_GetPlatformName
(JNIEnv *, jclass); (JNIEnv *, jclass);
/* /*
* Class: org_opencv_engine_manager_HardwareDetector * Class: org_opencv_engine_HardwareDetector
* Method: GetProcessorCount * Method: GetProcessorCount
* Signature: ()I * Signature: ()I
*/ */
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_GetProcessorCount JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_GetProcessorCount
(JNIEnv *, jclass); (JNIEnv *, jclass);
/* /*
* Class: org_opencv_engine_manager_HardwareDetector * Class: org_opencv_engine_HardwareDetector
* Method: DetectKnownPlatforms * Method: DetectKnownPlatforms
* Signature: ()I * Signature: ()I
*/ */
JNIEXPORT jint JNICALL Java_org_opencv_engine_manager_HardwareDetector_DetectKnownPlatforms JNIEXPORT jint JNICALL Java_org_opencv_engine_HardwareDetector_DetectKnownPlatforms
(JNIEnv *, jclass); (JNIEnv *, jclass);
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -37,7 +37,7 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_engine_BinderConnector_Init(JNIEnv* e ...@@ -37,7 +37,7 @@ JNIEXPORT jboolean JNICALL Java_org_opencv_engine_BinderConnector_Init(JNIEnv* e
if (NULL == PackageManager) if (NULL == PackageManager)
{ {
JavaVM* jvm; JavaVM* jvm;
env->GetJavaVM(&jvm);; env->GetJavaVM(&jvm);
PackageManager = new JavaBasedPackageManager(jvm, env->NewGlobalRef(market)); PackageManager = new JavaBasedPackageManager(jvm, env->NewGlobalRef(market));
} }
if (PackageManager) if (PackageManager)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <assert.h> #include <assert.h>
#include <vector> #include <vector>
#include <utils/Log.h> #include <utils/Log.h>
#include <dlfcn.h>
using namespace std; using namespace std;
...@@ -23,6 +24,7 @@ map<int, string> PackageInfo::InitPlatformNameMap() ...@@ -23,6 +24,7 @@ map<int, string> PackageInfo::InitPlatformNameMap()
const map<int, string> PackageInfo::PlatformNameMap = InitPlatformNameMap(); const map<int, string> PackageInfo::PlatformNameMap = InitPlatformNameMap();
const string PackageInfo::BasePackageName = "org.opencv.lib"; const string PackageInfo::BasePackageName = "org.opencv.lib";
const string DEFAULT_ENGINE_INSTALL_PATH = "/data/data/org.opencv.engine";
inline string JoinARMFeatures(int cpu_id) inline string JoinARMFeatures(int cpu_id)
{ {
...@@ -284,6 +286,12 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s ...@@ -284,6 +286,12 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s
// FullName += string("_") + features; // FullName += string("_") + features;
//} //}
} }
#ifdef __SUPPORT_MIPS
else if (ARCH_MIPS & CpuID)
{
FullName += string("_") + ARCH_MIPS_NAME;
}
#endif
else else
{ {
LOGD("PackageInfo::PackageInfo: package arch unknown"); LOGD("PackageInfo::PackageInfo: package arch unknown");
...@@ -307,7 +315,7 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s ...@@ -307,7 +315,7 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s
} }
} }
PackageInfo::PackageInfo(const string& fullname, const string& install_path, const string& package_version): PackageInfo::PackageInfo(const string& fullname, const string& install_path, string package_version):
FullName(fullname), FullName(fullname),
InstallPath(install_path) InstallPath(install_path)
{ {
...@@ -316,6 +324,59 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, con ...@@ -316,6 +324,59 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, con
assert(!fullname.empty()); assert(!fullname.empty());
assert(!install_path.empty()); assert(!install_path.empty());
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)
{
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, '_'); vector<string> features = SplitStringVector(FullName, '_');
if (!features.empty() && (BasePackageName == features[0])) if (!features.empty() && (BasePackageName == features[0]))
...@@ -363,6 +424,12 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, con ...@@ -363,6 +424,12 @@ PackageInfo::PackageInfo(const string& fullname, const string& install_path, con
{ {
CpuID = ARCH_X64 | SplitIntelFeatures(features); CpuID = ARCH_X64 | SplitIntelFeatures(features);
} }
#ifdef __SUPPORT_MIPS
else if (ARCH_MIPS_NAME == features[2])
{
CpuID = ARCH_MIPS;
}
#endif
else else
{ {
LOGD("It is not OpenCV library package for this platform"); LOGD("It is not OpenCV library package for this platform");
......
...@@ -6,11 +6,13 @@ ...@@ -6,11 +6,13 @@
#define ARCH_X86_NAME "x86" #define ARCH_X86_NAME "x86"
#define ARCH_X64_NAME "x64" #define ARCH_X64_NAME "x64"
#define ARCH_MIPS_NAME "mips"
#define ARCH_ARMv5_NAME "armv5" #define ARCH_ARMv5_NAME "armv5"
#define ARCH_ARMv6_NAME "armv6" #define ARCH_ARMv6_NAME "armv6"
#define ARCH_ARMv7_NAME "armv7a" #define ARCH_ARMv7_NAME "armv7a"
#define ARCH_ARMv8_NAME "armv8" #define ARCH_ARMv8_NAME "armv8"
#define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16" #define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16"
#define FEATURES_HAS_VFPv3_NAME "vfpv3" #define FEATURES_HAS_VFPv3_NAME "vfpv3"
#define FEATURES_HAS_NEON_NAME "neon" #define FEATURES_HAS_NEON_NAME "neon"
...@@ -29,7 +31,7 @@ class PackageInfo ...@@ -29,7 +31,7 @@ class PackageInfo
{ {
public: public:
PackageInfo(const std::string& version, int platform, int cpu_id, std::string install_path = "/data/data/"); PackageInfo(const std::string& version, int platform, int cpu_id, std::string install_path = "/data/data/");
PackageInfo(const std::string& fullname, const std::string& install_path, const std::string& package_version = "0.0"); PackageInfo(const std::string& fullname, const std::string& install_path, std::string package_version = "0.0");
std::string GetFullName() const; std::string GetFullName() const;
std::string GetVersion() const; std::string GetVersion() const;
int GetPlatform() const; int GetPlatform() const;
......
...@@ -108,6 +108,12 @@ TEST(Split, SplitMultiElementString) ...@@ -108,6 +108,12 @@ TEST(Split, SplitMultiElementString)
EXPECT_FALSE(b.find("eee") == b.end()); EXPECT_FALSE(b.find("eee") == b.end());
} }
TEST(CpuCount, CheckNonZero)
{
EXPECT_TRUE(GetProcessorCount() != 0);
EXPECT_TRUE(a.find("") == a.end());
}
TEST(GetCpuInfo, GetCpuInfo) TEST(GetCpuInfo, GetCpuInfo)
{ {
map<string, string> a = GetCpuInfo(); map<string, string> a = GetCpuInfo();
...@@ -115,20 +121,36 @@ TEST(GetCpuInfo, GetCpuInfo) ...@@ -115,20 +121,36 @@ TEST(GetCpuInfo, GetCpuInfo)
EXPECT_TRUE(a.find("") == a.end()); EXPECT_TRUE(a.find("") == a.end());
} }
TEST(TegraDetector, Detect) TEST(CpuID, CheckNotEmpy)
{ {
EXPECT_TRUE(DetectTegra() != 0); int cpu_id = GetCpuID();
EXPECT_NE(0, cpu_id);
} }
TEST(CpuCount, CheckNonZero) #ifdef __i386__
TEST(CpuID, CheckX86)
{ {
EXPECT_TRUE(GetProcessorCount() != 0); int cpu_id = GetCpuID();
EXPECT_TRUE(cpu_id & ARCH_X86);
} }
TEST(CpuID, CheckNotEmpy) TEST(CpuID, CheckSSE2)
{ {
int cpu_id = GetCpuID(); int cpu_id = GetCpuID();
EXPECT_NE(0, cpu_id); EXPECT_TRUE(cpu_id & FEATURES_HAS_SSE2);
}
#elseif __mips
#ifdef __SUPPORT_MIPS
TEST(CpuID, CheckMips)
{
int cpu_id = GetCpuID();
EXPECT_TRUE(cpu_id & ARCH_MIPS);
}
#endif
#else
TEST(TegraDetector, Detect)
{
EXPECT_TRUE(DetectTegra() != 0);
} }
TEST(CpuID, CheckArmV7) TEST(CpuID, CheckArmV7)
...@@ -153,3 +175,4 @@ TEST(PlatfromDetector, CheckTegra) ...@@ -153,3 +175,4 @@ TEST(PlatfromDetector, CheckTegra)
{ {
EXPECT_NE(PLATFORM_UNKNOWN, DetectKnownPlatforms()); EXPECT_NE(PLATFORM_UNKNOWN, DetectKnownPlatforms());
} }
#endif
\ No newline at end of file
...@@ -64,6 +64,69 @@ TEST(OpenCVEngineTest, GetVersion) ...@@ -64,6 +64,69 @@ TEST(OpenCVEngineTest, GetVersion)
EXPECT_EQ(OPEN_CV_ENGINE_VERSION, Version); EXPECT_EQ(OPEN_CV_ENGINE_VERSION, Version);
} }
#if defined(__i386__)
TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("240", PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string());
}
TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.1"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string());
}
TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("241", PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size());
}
#elif defined (__mips)
TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("240", PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string());
}
TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.1"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string());
}
TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("241", PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size());
}
#else
TEST(OpenCVEngineTest, GetPathForExecHWExistVersion) TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
...@@ -71,15 +134,15 @@ TEST(OpenCVEngineTest, GetPathForExecHWExistVersion) ...@@ -71,15 +134,15 @@ TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
Starter.PackageManager->InstallVersion("240", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion("240", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string());
#else #else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string());
#else #else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string());
#endif #endif
#endif #endif
} }
TEST(OpenCVEngineTest, GetPathForExecHWOldVersion) TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
...@@ -89,15 +152,15 @@ TEST(OpenCVEngineTest, GetPathForExecHWOldVersion) ...@@ -89,15 +152,15 @@ TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.1")); String16 result = Engine->GetLibPathByVersion(String16("2.4.1"));
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string());
#else #else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string());
#else #else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string());
#endif #endif
#endif #endif
} }
TEST(OpenCVEngineTest, GetPathForExecHWNewVersion) TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
...@@ -110,14 +173,6 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion) ...@@ -110,14 +173,6 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
} }
TEST(OpenCVEngineTest, GetPathForUnExistVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.5"));
EXPECT_EQ(0, result.size());
}
TEST(OpenCVEngineTest, GetPathForCompatiblePackage1) TEST(OpenCVEngineTest, GetPathForCompatiblePackage1)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
...@@ -138,14 +193,34 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage2) ...@@ -138,14 +193,34 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage2)
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string());
#else #else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string());
#else #else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string());
#endif
#endif #endif
#endif
} }
TEST(OpenCVEngineTest, InstallAndGetVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
EXPECT_FALSE(NULL == Engine.get());
EXPECT_TRUE(Engine->InstallVersion(String16("2.4")));
String16 result = Engine->GetLibPathByVersion(String16("2.4"));
#ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string());
#else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string());
#else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string());
#endif
#endif
}
#endif
#ifndef __i386__
TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1) TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
...@@ -155,21 +230,22 @@ TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1) ...@@ -155,21 +230,22 @@ TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1)
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
} }
#else
TEST(OpenCVEngineTest, InstallAndGetVersion) TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_ARMv7);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
EXPECT_TRUE(Engine->InstallVersion(String16("2.4")));
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
#ifdef __SUPPORT_TEGRA3 EXPECT_EQ(0, result.size());
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string()); }
#else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string());
#else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string());
#endif
#endif #endif
TEST(OpenCVEngineTest, GetPathForUnExistVersion)
{
sp<IOpenCVEngine> Engine = InitConnect();
EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.5"));
EXPECT_EQ(0, result.size());
} }
\ No newline at end of file
...@@ -96,6 +96,15 @@ TEST(PackageInfo, FullNameX86SSE2) ...@@ -96,6 +96,15 @@ TEST(PackageInfo, FullNameX86SSE2)
#endif #endif
} }
#ifdef __SUPPORT_MIPS
TEST(PackageInfo, FullNameMips)
{
PackageInfo info("243", PLATFORM_UNKNOWN, ARCH_MIPS);
string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v24_mips", name.c_str());
}
#endif
TEST(PackageInfo, Armv7NeonFromFullName) TEST(PackageInfo, Armv7NeonFromFullName)
{ {
PackageInfo info("org.opencv.lib_v23_armv7a_neon", "/data/data/org.opencv.lib_v23_armv7_neon"); PackageInfo info("org.opencv.lib_v23_armv7a_neon", "/data/data/org.opencv.lib_v23_armv7_neon");
...@@ -139,6 +148,15 @@ TEST(PackageInfo, Tegra3FromFullName) ...@@ -139,6 +148,15 @@ TEST(PackageInfo, Tegra3FromFullName)
EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform()); EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform());
} }
#ifdef __SUPPORT_MIPS
TEST(PackageInfo, MipsFromFullName)
{
PackageInfo info("org.opencv.lib_v24_mips", "/data/data/org.opencv.lib_v24_mips");
EXPECT_EQ("240", info.GetVersion());
EXPECT_EQ(ARCH_MIPS, info.GetCpuID());
}
#endif
TEST(PackageInfo, Comparator1) TEST(PackageInfo, Comparator1)
{ {
PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86); PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86);
...@@ -168,3 +186,4 @@ TEST(PackageInfo, Comparator3) ...@@ -168,3 +186,4 @@ TEST(PackageInfo, Comparator3)
EXPECT_EQ(info1, info2); EXPECT_EQ(info1, info2);
} }
#endif #endif
...@@ -39,6 +39,14 @@ TEST(PackageManager, InstallVersion) ...@@ -39,6 +39,14 @@ TEST(PackageManager, InstallVersion)
EXPECT_TRUE(pm.CheckVersionInstalled("240", PLATFORM_UNKNOWN, ARCH_ARMv5)); EXPECT_TRUE(pm.CheckVersionInstalled("240", PLATFORM_UNKNOWN, ARCH_ARMv5));
} }
TEST(PackageManager, GetPackagePathForArmv5)
{
PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("243", PLATFORM_UNKNOWN, ARCH_ARMv5));
string path = pm.GetPackagePathByVersion("243", PLATFORM_UNKNOWN, ARCH_ARMv5);
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", path.c_str());
}
TEST(PackageManager, GetPackagePathForArmv7) TEST(PackageManager, GetPackagePathForArmv7)
{ {
PackageManagerStub pm; PackageManagerStub pm;
...@@ -95,6 +103,16 @@ TEST(PackageManager, GetPackagePathForTegra3) ...@@ -95,6 +103,16 @@ TEST(PackageManager, GetPackagePathForTegra3)
#endif #endif
} }
#ifdef __SUPPORT_MIPS
TEST(PackageManager, GetPackagePathForMips)
{
PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("243", PLATFORM_UNKNOWN, ARCH_MIPS));
string path = pm.GetPackagePathByVersion("243", PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", path.c_str());
}
#endif
// TODO: Enable tests if seporate package will be exists // TODO: Enable tests if seporate package will be exists
// TEST(PackageManager, GetPackagePathForTegra2) // TEST(PackageManager, GetPackagePathForTegra2)
// { // {
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
/* return 0;*/
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }
\ No newline at end of file
...@@ -33,6 +33,7 @@ LOCAL_C_INCLUDES := \ ...@@ -33,6 +33,7 @@ LOCAL_C_INCLUDES := \
LOCAL_CFLAGS += -O0 -DGTEST_HAS_CLONE=0 -DGTEST_OS_LINUX_ANDROID=1 -DGTEST_HAS_TR1_TUPLE=0 LOCAL_CFLAGS += -O0 -DGTEST_HAS_CLONE=0 -DGTEST_OS_LINUX_ANDROID=1 -DGTEST_HAS_TR1_TUPLE=0
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_MIPS
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_LDFLAGS = -Wl,-allow-shlib-undefined LOCAL_LDFLAGS = -Wl,-allow-shlib-undefined
......
...@@ -9,4 +9,6 @@ ...@@ -9,4 +9,6 @@
#define OPEN_CV_ENGINE_VERSION 1 #define OPEN_CV_ENGINE_VERSION 1
#endif #endif
#define LIB_OPENCV_INFO_NAME "libopencv_info.so"
#endif #endif
\ No newline at end of file
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include <binder/Parcel.h> #include <binder/Parcel.h>
#include <utils/String16.h> #include <utils/String16.h>
// OpenCV Manager package name
#define OPENCV_ENGINE_PACKAGE "org.opencv.engine"
// Class name of OpenCV engine binder object. Is needned for connection to service // Class name of OpenCV engine binder object. Is needned for connection to service
#define OPECV_ENGINE_CLASSNAME "org.opencv.engine.OpenCVEngineInterface" #define OPECV_ENGINE_CLASSNAME "org.opencv.engine.OpenCVEngineInterface"
......
...@@ -12,6 +12,7 @@ public class HardwareDetector ...@@ -12,6 +12,7 @@ public class HardwareDetector
public static final int ARCH_ARMv7 = 0x10000000; public static final int ARCH_ARMv7 = 0x10000000;
public static final int ARCH_ARMv8 = 0x20000000; public static final int ARCH_ARMv8 = 0x20000000;
public static final int ARCH_MIPS = 0x40000000;
// Platform specific features // Platform specific features
// ! Check CPU arch before ! // ! Check CPU arch before !
...@@ -33,7 +34,7 @@ public class HardwareDetector ...@@ -33,7 +34,7 @@ public class HardwareDetector
public static final int PLATFORM_TEGRA2 = 2; public static final int PLATFORM_TEGRA2 = 2;
public static final int PLATFORM_TEGRA3 = 3; public static final int PLATFORM_TEGRA3 = 3;
public static final int PLATFORM_UNKNOWN = -1; public static final int PLATFORM_UNKNOWN = 0;
// Return CPU arch and list of supported features // Return CPU arch and list of supported features
public static native int GetCpuID(); public static native int GetCpuID();
...@@ -43,4 +44,10 @@ public class HardwareDetector ...@@ -43,4 +44,10 @@ public class HardwareDetector
public static native int GetProcessorCount(); public static native int GetProcessorCount();
public static native int DetectKnownPlatforms(); public static native int DetectKnownPlatforms();
static
{
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
}
} }
...@@ -10,13 +10,18 @@ import android.content.Intent; ...@@ -10,13 +10,18 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri; import android.net.Uri;
import android.util.Log;
public class MarketConnector public class MarketConnector
{ {
protected static final String OpenCVPackageNamePreffix = "org.opencv.lib"; protected static final String OpenCVPackageNamePreffix = "org.opencv.lib";
private static final String TAG = "OpenCVEngine/MarketConnector";
protected Context mContext; protected Context mContext;
public boolean mIncludeManager = true;
public MarketConnector(Context context) public MarketConnector(Context context)
{ {
mContext = context; mContext = context;
...@@ -75,7 +80,6 @@ public class MarketConnector ...@@ -75,7 +80,6 @@ public class MarketConnector
return result; return result;
} }
public boolean CheckPackageInstalled(String AppID) public boolean CheckPackageInstalled(String AppID)
{ {
List<PackageInfo> Packages = mContext.getPackageManager().getInstalledPackages(PackageManager.GET_CONFIGURATIONS); List<PackageInfo> Packages = mContext.getPackageManager().getInstalledPackages(PackageManager.GET_CONFIGURATIONS);
...@@ -96,6 +100,15 @@ public class MarketConnector ...@@ -96,6 +100,15 @@ public class MarketConnector
{ {
List<PackageInfo> AllPackages = mContext.getPackageManager().getInstalledPackages(PackageManager.GET_CONFIGURATIONS); List<PackageInfo> AllPackages = mContext.getPackageManager().getInstalledPackages(PackageManager.GET_CONFIGURATIONS);
List<PackageInfo> OpenCVPackages = new ArrayList<PackageInfo>(); List<PackageInfo> OpenCVPackages = new ArrayList<PackageInfo>();
if (mIncludeManager)
{
try {
OpenCVPackages.add(mContext.getPackageManager().getPackageInfo("org.opencv.engine", PackageManager.GET_CONFIGURATIONS));
} catch (NameNotFoundException e) {
Log.e(TAG, "OpenCV Manager package info was not found!");
e.printStackTrace();
}
}
Iterator<PackageInfo> it = AllPackages.iterator(); Iterator<PackageInfo> it = AllPackages.iterator();
while(it.hasNext()) while(it.hasNext())
{ {
......
package org.opencv.engine.manager;
public class HardwareDetector
{
public static final int ARCH_UNKNOWN = -1;
public static final int ARCH_X86 = 0x01000000;
public static final int ARCH_X64 = 0x02000000;
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_ARMv8 = 0x20000000;
// Platform specific features
// ! Check CPU arch before !
// ARM specific features
public static final int FEATURES_HAS_VFPv3d16 = 0x01;
public static final int FEATURES_HAS_VFPv3 = 0x02;
public static final int FEATURES_HAS_NEON = 0x04;
public static final int FEATURES_HAS_NEON2 = 0x08;
// X86 specific features
public static final int FEATURES_HAS_SSE = 0x01;
public static final int FEATURES_HAS_SSE2 = 0x02;
public static final int FEATURES_HAS_SSE3 = 0x04;
// GPU Acceleration options
public static final int FEATURES_HAS_GPU = 0x010000;
public static final int PLATFORM_TEGRA = 1;
public static final int PLATFORM_TEGRA2 = 2;
public static final int PLATFORM_TEGRA3 = 3;
public static final int PLATFORM_UNKNOWN = 0;
// Return CPU arch and list of supported features
public static native int GetCpuID();
// Return hardware platform name
public static native String GetPlatformName();
// Return processor count
public static native int GetProcessorCount();
public static native int DetectKnownPlatforms();
static
{
System.loadLibrary("OpenCVEngine");
System.loadLibrary("OpenCVEngine_jni");
}
}
...@@ -4,6 +4,7 @@ import java.util.ArrayList; ...@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.opencv.engine.HardwareDetector;
import org.opencv.engine.MarketConnector; import org.opencv.engine.MarketConnector;
import org.opencv.engine.OpenCVEngineInterface; import org.opencv.engine.OpenCVEngineInterface;
import org.opencv.engine.R; import org.opencv.engine.R;
...@@ -48,7 +49,6 @@ public class ManagerActivity extends Activity ...@@ -48,7 +49,6 @@ public class ManagerActivity extends Activity
PackageInfo packageInfo = getPackageManager().getPackageInfo(this.getPackageName(), 0); PackageInfo packageInfo = getPackageManager().getPackageInfo(this.getPackageName(), 0);
ManagerVersion = packageInfo.versionName; ManagerVersion = packageInfo.versionName;
} catch (NameNotFoundException e) { } catch (NameNotFoundException e) {
// TODO Auto-generated catch block
ManagerVersion = "N/A"; ManagerVersion = "N/A";
e.printStackTrace(); e.printStackTrace();
} }
...@@ -112,6 +112,10 @@ public class ManagerActivity extends Activity ...@@ -112,6 +112,10 @@ public class ManagerActivity extends Activity
{ {
HardwarePlatformView.setText("ARM v8 " + JoinArmFeatures(CpuId)); HardwarePlatformView.setText("ARM v8 " + JoinArmFeatures(CpuId));
} }
else if ((CpuId & HardwareDetector.ARCH_MIPS) == HardwareDetector.ARCH_MIPS)
{
HardwarePlatformView.setText("MIPS");
}
else else
{ {
HardwarePlatformView.setText("not detected"); HardwarePlatformView.setText("not detected");
...@@ -167,18 +171,11 @@ public class ManagerActivity extends Activity ...@@ -167,18 +171,11 @@ public class ManagerActivity extends Activity
mInstalledPackageView.setOnItemClickListener(new OnItemClickListener() { mInstalledPackageView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) {
mInstalledPackageView.setTag(Integer.valueOf((int)id)); mInstalledPackageView.setTag(Integer.valueOf((int)id));
mActionDialog.show(); mActionDialog.show();
} }
}); });
if (!bindService(new Intent("org.opencv.engine.BIND"), mServiceConnection, Context.BIND_AUTO_CREATE))
{
TextView EngineVersionView = (TextView)findViewById(R.id.EngineVersionValue);
EngineVersionView.setText("not avaliable");
}
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
...@@ -272,6 +269,7 @@ public class ManagerActivity extends Activity ...@@ -272,6 +269,7 @@ public class ManagerActivity extends Activity
protected void FillPackageList() protected void FillPackageList()
{ {
synchronized (mListViewItems) { synchronized (mListViewItems) {
mMarket.mIncludeManager = false;
mInstalledPackageInfo = mMarket.GetInstalledOpenCVPackages(); mInstalledPackageInfo = mMarket.GetInstalledOpenCVPackages();
mListViewItems.clear(); mListViewItems.clear();
......
package org.opencv.engine.manager;
public class OpenCVPackageInfo
{
public OpenCVPackageInfo(String PackageName, String PackageInstallPath, String RevName)
{
}
protected long mNativeObject = 0;
protected static native long nativeConstructor(String PackageName, String PackageInstallPath, String RevName);
protected static native void nativeDestructor(long nativeAddress);
protected static native String nativeGetVersion(long thiz);
protected static native String nativeGetPlatfrom(long thiz);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment