Merge pull request #1854 from asmorkalov:android_engine_tegra4i5

pull/1853/merge
Roman Donchenko 12 years ago committed by OpenCV Buildbot
commit 901dc3b878
  1. 4
      platforms/android/service/engine/jni/BinderComponent/HardwareDetector.cpp
  2. 16
      platforms/android/service/engine/jni/BinderComponent/HardwareDetector.h
  3. 3
      platforms/android/service/engine/jni/BinderComponent/ProcReader.h
  4. 11
      platforms/android/service/engine/jni/NativeService/CommonPackageManager.cpp
  5. 2
      platforms/android/service/engine/jni/NativeService/PackageInfo.cpp
  6. 2
      platforms/android/service/engine/jni/NativeService/PackageInfo.h
  7. 50
      platforms/android/service/engine/jni/Tests/OpenCVEngineTest.cpp
  8. 61
      platforms/android/service/engine/jni/Tests/PackageInfoTest.cpp
  9. 20
      platforms/android/service/engine/jni/Tests/PackageManagmentTest.cpp
  10. 5
      platforms/android/service/engine/src/org/opencv/engine/HardwareDetector.java
  11. 15
      platforms/android/service/engine/src/org/opencv/engine/manager/ManagerActivity.java

@ -91,6 +91,10 @@ int GetCpuID()
{ {
result |= FEATURES_HAS_NEON2; result |= FEATURES_HAS_NEON2;
} }
if (features.end() != features.find(CPU_INFO_VFPV4_STR))
{
result |= FEATURES_HAS_VFPv4;
}
if (features.end() != features.find(CPU_INFO_VFPV3_STR)) if (features.end() != features.find(CPU_INFO_VFPV3_STR))
{ {
if (features.end () != features.find(CPU_INFO_VFPV3D16_STR)) if (features.end () != features.find(CPU_INFO_VFPV3D16_STR))

@ -14,8 +14,10 @@
#define FEATURES_HAS_VFPv3d16 1L #define FEATURES_HAS_VFPv3d16 1L
#define FEATURES_HAS_VFPv3 2L #define FEATURES_HAS_VFPv3 2L
#define FEATURES_HAS_NEON 4L #define FEATURES_HAS_VFPv4 4L
#define FEATURES_HAS_NEON2 8L #define FEATURES_HAS_NEON 8L
#define FEATURES_HAS_NEON2 16L
#define FEATURES_HAS_SSE 1L #define FEATURES_HAS_SSE 1L
#define FEATURES_HAS_SSE2 2L #define FEATURES_HAS_SSE2 2L
#define FEATURES_HAS_SSSE3 4L #define FEATURES_HAS_SSSE3 4L
@ -24,10 +26,12 @@
// TODO: Do not forget to add Platrfom name to PackageInfo::PlatformNameMap // TODO: Do not forget to add Platrfom name to PackageInfo::PlatformNameMap
// in method PackageInfo::InitPlatformNameMap() // in method PackageInfo::InitPlatformNameMap()
#define PLATFORM_UNKNOWN 0L #define PLATFORM_UNKNOWN 0L
#define PLATFORM_TEGRA 1L #define PLATFORM_TEGRA 1L
#define PLATFORM_TEGRA2 2L #define PLATFORM_TEGRA2 2L
#define PLATFORM_TEGRA3 3L #define PLATFORM_TEGRA3 3L
#define PLATFORM_TEGRA4 4L #define PLATFORM_TEGRA4i 4L
#define PLATFORM_TEGRA4 5L
#define PLATFORM_TEGRA5 6L
int DetectKnownPlatforms(); int DetectKnownPlatforms();
int GetProcessorCount(); int GetProcessorCount();

@ -7,8 +7,9 @@
#define CPU_INFO_NEON_STR "neon" #define CPU_INFO_NEON_STR "neon"
#define CPU_INFO_NEON2_STR "neon2" #define CPU_INFO_NEON2_STR "neon2"
#define CPU_INFO_VFPV3_STR "vfpv3"
#define CPU_INFO_VFPV3D16_STR "vfpv3d16" #define CPU_INFO_VFPV3D16_STR "vfpv3d16"
#define CPU_INFO_VFPV3_STR "vfpv3"
#define CPU_INFO_VFPV4_STR "vfpv4"
#define CPU_INFO_SSE_STR "sse" #define CPU_INFO_SSE_STR "sse"
#define CPU_INFO_SSE2_STR "sse2" #define CPU_INFO_SSE2_STR "sse2"

@ -187,17 +187,26 @@ std::vector<std::pair<int, int> > CommonPackageManager::InitArmRating()
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3d16)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3d16));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16));
result.push_back(std::pair<int, int>(PLATFORM_TEGRA2, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16)); result.push_back(std::pair<int, int>(PLATFORM_TEGRA2, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_VFPv3)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_VFPv3));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv4 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv4 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv3d16 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON));
result.push_back(std::pair<int, int>(PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); result.push_back(std::pair<int, int>(PLATFORM_TEGRA4i, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON));
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));
return result; return result;
} }

@ -19,6 +19,8 @@ map<int, string> PackageInfo::InitPlatformNameMap()
result[PLATFORM_TEGRA2] = PLATFORM_TEGRA2_NAME; result[PLATFORM_TEGRA2] = PLATFORM_TEGRA2_NAME;
result[PLATFORM_TEGRA3] = PLATFORM_TEGRA3_NAME; result[PLATFORM_TEGRA3] = PLATFORM_TEGRA3_NAME;
result[PLATFORM_TEGRA4] = PLATFORM_TEGRA4_NAME; result[PLATFORM_TEGRA4] = PLATFORM_TEGRA4_NAME;
result[PLATFORM_TEGRA4i] = PLATFORM_TEGRA4_NAME;
result[PLATFORM_TEGRA5] = PLATFORM_TEGRA5_NAME;
return result; return result;
} }

@ -21,10 +21,12 @@
#define FEATURES_HAS_SSSE3_NAME "ssse3" #define FEATURES_HAS_SSSE3_NAME "ssse3"
#define FEATURES_HAS_GPU_NAME "gpu" #define FEATURES_HAS_GPU_NAME "gpu"
// TODO: Do not forget to update PackageInfo::InitPlatformNameMap() after constant changes
#define PLATFORM_TEGRA_NAME "tegra" #define PLATFORM_TEGRA_NAME "tegra"
#define PLATFORM_TEGRA2_NAME "tegra2" #define PLATFORM_TEGRA2_NAME "tegra2"
#define PLATFORM_TEGRA3_NAME "tegra3" #define PLATFORM_TEGRA3_NAME "tegra3"
#define PLATFORM_TEGRA4_NAME "tegra4" #define PLATFORM_TEGRA4_NAME "tegra4"
#define PLATFORM_TEGRA5_NAME "tegra5"
class PackageInfo class PackageInfo
{ {

@ -20,16 +20,16 @@ class ServiceStarter
public: public:
ServiceStarter() ServiceStarter()
{ {
PackageManager = new PackageManagerStub(); PackageManager = new PackageManagerStub();
Engine = new OpenCVEngine(PackageManager); Engine = new OpenCVEngine(PackageManager);
defaultServiceManager()->addService(IOpenCVEngine::descriptor, Engine); defaultServiceManager()->addService(IOpenCVEngine::descriptor, Engine);
LOGI("OpenCVEngine native service started successfully"); LOGI("OpenCVEngine native service started successfully");
ProcessState::self()->startThreadPool(); ProcessState::self()->startThreadPool();
} }
~ServiceStarter() ~ServiceStarter()
{ {
delete PackageManager; delete PackageManager;
} }
PackageManagerStub* PackageManager; PackageManagerStub* PackageManager;
@ -46,9 +46,9 @@ sp<IOpenCVEngine> InitConnect()
do do
{ {
EngineService = ServiceManager->getService(IOpenCVEngine::descriptor); EngineService = ServiceManager->getService(IOpenCVEngine::descriptor);
if (EngineService != 0) break; if (EngineService != 0) break;
usleep(500000); // 0.5 s usleep(500000); // 0.5 s
} while(true); } while(true);
Engine = interface_cast<IOpenCVEngine>(EngineService); Engine = interface_cast<IOpenCVEngine>(EngineService);
@ -193,11 +193,11 @@ 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
} }
@ -205,18 +205,18 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage3)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | 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_tegra4/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra4/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) TEST(OpenCVEngineTest, InstallAndGetVersion)
@ -226,15 +226,15 @@ TEST(OpenCVEngineTest, InstallAndGetVersion)
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
EXPECT_TRUE(Engine->InstallVersion(String16("2.4"))); EXPECT_TRUE(Engine->InstallVersion(String16("2.4")));
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, GetPathFor2_4_2) TEST(OpenCVEngineTest, GetPathFor2_4_2)

@ -34,6 +34,13 @@ TEST(PackageInfo, FullNameArmv7VFPv3)
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
} }
TEST(PackageInfo, FullNameArmv7VFPv4)
{
PackageInfo info(2030300, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv4);
string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
}
TEST(PackageInfo, FullNameArmv7VFPv3Neon) TEST(PackageInfo, FullNameArmv7VFPv3Neon)
{ {
PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON);
@ -74,30 +81,60 @@ TEST(PackageInfo, FullNameTegra3)
{ {
PackageInfo info(2030000, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); PackageInfo info(2030000, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("org.opencv.lib_v23_tegra3", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_tegra3", name.c_str());
#else #else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES # ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str());
#else # else
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
#endif # endif
#endif #endif
} }
TEST(PackageInfo, FullNameTegra4) TEST(PackageInfo, FullNameTegra4)
{ {
PackageInfo info(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_NEON); PackageInfo info(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("org.opencv.lib_v24_tegra4", name.c_str());
#else
# ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str());
# else
EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str());
# endif
#endif
}
TEST(PackageInfo, FullNameTegra4i)
{
PackageInfo info(2040700, PLATFORM_TEGRA4i, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName();
#ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("org.opencv.lib_v24_tegra4", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_tegra4", name.c_str());
#else #else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES # ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str());
#else # else
EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str());
#endif # endif
#endif #endif
}
TEST(PackageInfo, FullNameTegra5)
{
PackageInfo info(2040700, PLATFORM_TEGRA5, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName();
#ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("org.opencv.lib_v24_tegra5", name.c_str());
#else
# ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str());
# else
EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str());
# endif
#endif
} }
TEST(PackageInfo, FullNameX86SSE2) TEST(PackageInfo, FullNameX86SSE2)

@ -105,8 +105,8 @@ TEST(PackageManager, GetPackagePathForTegra3)
TEST(PackageManager, GetPackagePathForTegra4) TEST(PackageManager, GetPackagePathForTegra4)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON)); EXPECT_TRUE(pm.InstallVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON));
string path = pm.GetPackagePathByVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); string path = pm.GetPackagePathByVersion(2040400, PLATFORM_TEGRA4, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON);
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra4/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra4/lib", path.c_str());
#else #else
@ -118,6 +118,22 @@ TEST(PackageManager, GetPackagePathForTegra4)
#endif #endif
} }
TEST(PackageManager, GetPackagePathForTegra5)
{
PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion(2040400, PLATFORM_TEGRA5, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON));
string path = pm.GetPackagePathByVersion(2040400, PLATFORM_TEGRA5, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_VFPv4 | FEATURES_HAS_NEON);
#ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra5/lib", path.c_str());
#else
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", path.c_str());
#else
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", path.c_str());
#endif
#endif
}
#ifdef __SUPPORT_MIPS #ifdef __SUPPORT_MIPS
TEST(PackageManager, GetPackagePathForMips) TEST(PackageManager, GetPackagePathForMips)
{ {

@ -19,8 +19,9 @@ public class HardwareDetector
// ARM specific features // ARM specific features
public static final int FEATURES_HAS_VFPv3d16 = 0x01; public static final int FEATURES_HAS_VFPv3d16 = 0x01;
public static final int FEATURES_HAS_VFPv3 = 0x02; public static final int FEATURES_HAS_VFPv3 = 0x02;
public static final int FEATURES_HAS_NEON = 0x04; public static final int FEATURES_HAS_VFPv4 = 0x04;
public static final int FEATURES_HAS_NEON2 = 0x08; public static final int FEATURES_HAS_NEON = 0x08;
public static final int FEATURES_HAS_NEON2 = 0x16;
// X86 specific features // X86 specific features
public static final int FEATURES_HAS_SSE = 0x01; public static final int FEATURES_HAS_SSE = 0x01;

@ -111,10 +111,14 @@ public class ManagerActivity extends Activity
{ {
HardwarePlatformView.setText("Tegra 4i"); HardwarePlatformView.setText("Tegra 4i");
} }
else else if (HardwareDetector.PLATFORM_TEGRA4 == Platfrom)
{ {
HardwarePlatformView.setText("Tegra 4"); HardwarePlatformView.setText("Tegra 4");
} }
else
{
HardwarePlatformView.setText("Tegra 5");
}
} }
else else
{ {
@ -478,7 +482,14 @@ public class ManagerActivity extends Activity
// TODO: update if package will be published // TODO: update if package will be published
if ((features & HardwareDetector.FEATURES_HAS_NEON) == HardwareDetector.FEATURES_HAS_NEON) if ((features & HardwareDetector.FEATURES_HAS_NEON) == HardwareDetector.FEATURES_HAS_NEON)
{ {
return "with Neon"; if ((features & HardwareDetector.FEATURES_HAS_VFPv4) == HardwareDetector.FEATURES_HAS_VFPv4)
{
return "with Neon and VFPv4";
}
else
{
return "with Neon";
}
} }
else if ((features & HardwareDetector.FEATURES_HAS_VFPv3) == HardwareDetector.FEATURES_HAS_VFPv3) else if ((features & HardwareDetector.FEATURES_HAS_VFPv3) == HardwareDetector.FEATURES_HAS_VFPv3)
{ {

Loading…
Cancel
Save