Commit d55e114f authored by Alexander Smorkalov's avatar Alexander Smorkalov

Issue #2357 OpenCV manager fails to determine hardware platfrom on Tegra2 fixed.

parent 415636a6
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#define FEATURES_HAS_SSSE3 4L #define FEATURES_HAS_SSSE3 4L
#define FEATURES_HAS_GPU 65536L #define FEATURES_HAS_GPU 65536L
// 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
......
...@@ -125,23 +125,23 @@ android::String16 OpenCVEngine::GetLibraryList(android::String16 version) ...@@ -125,23 +125,23 @@ android::String16 OpenCVEngine::GetLibraryList(android::String16 version)
if (!tmp.empty()) if (!tmp.empty())
{ {
tmp += "/libopencvinfo.so"; tmp += "/libopencvinfo.so";
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");
if ((error = dlerror()) == NULL) if ((error = dlerror()) == NULL)
{ {
result = String16((*info_func)()); result = String16((*info_func)());
dlclose(handle); dlclose(handle);
} }
else else
{ {
......
...@@ -15,14 +15,14 @@ set<string> CommonPackageManager::GetInstalledVersions() ...@@ -15,14 +15,14 @@ set<string> CommonPackageManager::GetInstalledVersions()
{ {
set<string> result; set<string> result;
vector<PackageInfo> installed_packages = GetInstalledPackages(); vector<PackageInfo> installed_packages = GetInstalledPackages();
for (vector<PackageInfo>::const_iterator it = installed_packages.begin(); it != installed_packages.end(); ++it) for (vector<PackageInfo>::const_iterator it = installed_packages.begin(); it != installed_packages.end(); ++it)
{ {
string version = it->GetVersion(); string version = it->GetVersion();
assert(!version.empty()); assert(!version.empty());
result.insert(version); result.insert(version);
} }
return result; return result;
} }
...@@ -33,12 +33,12 @@ bool CommonPackageManager::CheckVersionInstalled(const std::string& version, int ...@@ -33,12 +33,12 @@ bool CommonPackageManager::CheckVersionInstalled(const std::string& version, int
PackageInfo target_package(version, platform, cpu_id); PackageInfo target_package(version, platform, cpu_id);
LOGD("GetInstalledPackages() call"); LOGD("GetInstalledPackages() call");
vector<PackageInfo> packages = GetInstalledPackages(); vector<PackageInfo> packages = GetInstalledPackages();
for (vector<PackageInfo>::const_iterator it = packages.begin(); it != packages.end(); ++it) 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()) if (!packages.empty())
{ {
result = (packages.end() != find(packages.begin(), packages.end(), target_package)); result = (packages.end() != find(packages.begin(), packages.end(), target_package));
...@@ -60,7 +60,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version, ...@@ -60,7 +60,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
PackageInfo target_package(version, platform, cpu_id); PackageInfo target_package(version, platform, cpu_id);
vector<PackageInfo> all_packages = GetInstalledPackages(); vector<PackageInfo> all_packages = GetInstalledPackages();
vector<PackageInfo> packages; vector<PackageInfo> packages;
for (vector<PackageInfo>::iterator it = all_packages.begin(); it != all_packages.end(); ++it) 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()); LOGD("Check version \"%s\" compatibility with \"%s\"\n", version.c_str(), it->GetVersion().c_str());
...@@ -71,10 +71,10 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version, ...@@ -71,10 +71,10 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
} }
else else
{ {
LOGD("NOT Compatible"); LOGD("NOT Compatible");
} }
} }
if (!packages.empty()) if (!packages.empty())
{ {
vector<PackageInfo>::iterator found = find(packages.begin(), packages.end(), target_package); vector<PackageInfo>::iterator found = find(packages.begin(), packages.end(), target_package);
...@@ -86,13 +86,13 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version, ...@@ -86,13 +86,13 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
{ {
int OptRating = -1; int OptRating = -1;
std::vector<std::pair<int, int> >& group = CommonPackageManager::ArmRating; std::vector<std::pair<int, int> >& group = CommonPackageManager::ArmRating;
if ((cpu_id & ARCH_X86) || (cpu_id & ARCH_X64)) if ((cpu_id & ARCH_X86) || (cpu_id & ARCH_X64))
group = CommonPackageManager::IntelRating; group = CommonPackageManager::IntelRating;
int HardwareRating = GetHardwareRating(platform, cpu_id, group); int HardwareRating = GetHardwareRating(platform, cpu_id, group);
LOGD("Current hardware platform %d, %d", platform, cpu_id); LOGD("Current hardware platform %d, %d", platform, cpu_id);
if (-1 == HardwareRating) if (-1 == HardwareRating)
{ {
LOGE("Cannot calculate rating for current hardware platform!"); LOGE("Cannot calculate rating for current hardware platform!");
...@@ -111,7 +111,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version, ...@@ -111,7 +111,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
} }
} }
} }
if ((-1 != OptRating) && (packages.end() != found)) if ((-1 != OptRating) && (packages.end() != found))
{ {
result = found->GetInstalationPath(); result = found->GetInstalationPath();
...@@ -123,7 +123,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version, ...@@ -123,7 +123,7 @@ string CommonPackageManager::GetPackagePathByVersion(const std::string& version,
} }
} }
} }
return result; return result;
} }
...@@ -131,22 +131,22 @@ bool CommonPackageManager::IsVersionCompatible(const std::string& target_version ...@@ -131,22 +131,22 @@ bool CommonPackageManager::IsVersionCompatible(const std::string& target_version
{ {
assert (target_version.size() == 3); assert (target_version.size() == 3);
assert (package_version.size() == 3); assert (package_version.size() == 3);
bool result = false; bool result = false;
// major version is the same and minor package version is above or the same as target. // major version is the same and minor package version is above or the same as target.
if ((package_version[0] == target_version[0]) && (package_version[1] == target_version[1]) && (package_version[2] >= target_version[2])) if ((package_version[0] == target_version[0]) && (package_version[1] == target_version[1]) && (package_version[2] >= target_version[2]))
{ {
result = true; result = true;
} }
return result; return result;
} }
int CommonPackageManager::GetHardwareRating(int platform, int cpu_id, const std::vector<std::pair<int, int> >& group) int CommonPackageManager::GetHardwareRating(int platform, int cpu_id, const std::vector<std::pair<int, int> >& group)
{ {
int result = -1; int result = -1;
for (size_t i = 0; i < group.size(); i++) for (size_t i = 0; i < group.size(); i++)
{ {
if (group[i] == std::pair<int, int>(platform, cpu_id)) if (group[i] == std::pair<int, int>(platform, cpu_id))
...@@ -162,19 +162,23 @@ int CommonPackageManager::GetHardwareRating(int platform, int cpu_id, const std: ...@@ -162,19 +162,23 @@ int CommonPackageManager::GetHardwareRating(int platform, int cpu_id, const std:
std::vector<std::pair<int, int> > CommonPackageManager::InitArmRating() std::vector<std::pair<int, int> > CommonPackageManager::InitArmRating()
{ {
std::vector<std::pair<int, int> > result; std::vector<std::pair<int, int> > result;
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv5)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv5));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6)); result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_ARMv6));
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_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_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_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_TEGRA2, ARCH_ARMv7 | FEATURES_HAS_VFPv3)); 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_TEGRA2, ARCH_ARMv7 | FEATURES_HAS_VFPv3d16));
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));
return result; return result;
} }
......
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