Merge branch '2.4'

pull/509/merge
Andrey Kamaev 12 years ago
commit 637397f621
  1. 1
      android/scripts/cmake_android_service.sh
  2. 11
      android/service/engine/CMakeLists.txt
  3. 69
      android/service/engine/jni/NativeService/CommonPackageManager.cpp
  4. 4
      android/service/engine/jni/NativeService/CommonPackageManager.h
  5. 17
      android/service/engine/jni/Tests/HardwareDetectionTest.cpp
  6. 28
      android/service/engine/jni/Tests/OpenCVEngineTest.cpp
  7. 40
      android/service/engine/jni/Tests/PackageInfoTest.cpp
  8. 45
      android/service/engine/jni/Tests/PackageManagmentTest.cpp
  9. 2
      doc/check_docs2.py
  10. 61
      doc/ocv.py
  11. 6
      doc/tutorials/introduction/android_binary_package/android_dev_intro.rst
  12. 4
      doc/tutorials/introduction/desktop_java/java_dev_intro.rst
  13. 17
      modules/core/doc/basic_structures.rst
  14. 4
      modules/core/doc/utility_and_system_functions_and_macros.rst
  15. 4
      modules/core/src/matrix.cpp
  16. 2
      modules/features2d/doc/common_interfaces_of_feature_detectors.rst
  17. 6
      modules/gpu/doc/data_structures.rst
  18. 29
      modules/gpu/doc/initalization_and_information.rst
  19. 63
      modules/gpu/doc/video.rst
  20. 2
      modules/legacy/src/epilines.cpp
  21. 2
      modules/legacy/src/lmeds.cpp
  22. 16
      modules/legacy/src/scanlines.cpp
  23. 8
      modules/ml/doc/boosting.rst
  24. 2
      modules/ml/doc/support_vector_machines.rst
  25. 34
      modules/ocl/include/opencv2/ocl/matrix_operations.hpp
  26. 32
      modules/ocl/include/opencv2/ocl/ocl.hpp
  27. 83
      modules/ocl/src/arithm.cpp
  28. 25
      modules/ocl/src/matrix_operations.cpp
  29. 14
      modules/stitching/doc/motion_estimation.rst
  30. 4
      modules/video/doc/motion_analysis_and_object_tracking.rst
  31. 4
      samples/python2/hist.py

@ -5,4 +5,3 @@ mkdir -p build_service
cd build_service cd build_service
cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.4.3" -DANDROID_STL=stlport_static -DANDROID_STL_FORCE_FEATURES=OFF -DBUILD_ANDROID_SERVICE=ON -DANDROID_SOURCE_TREE=~/Projects/AndroidSource/ServiceStub/ $@ ../.. cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain.cmake -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.4.3" -DANDROID_STL=stlport_static -DANDROID_STL_FORCE_FEATURES=OFF -DBUILD_ANDROID_SERVICE=ON -DANDROID_SOURCE_TREE=~/Projects/AndroidSource/ServiceStub/ $@ ../..

@ -62,3 +62,14 @@ set_target_properties(${engine}_jni PROPERTIES
get_target_property(engine_lib_location ${engine}_jni LOCATION) get_target_property(engine_lib_location ${engine}_jni LOCATION)
add_custom_command(TARGET ${engine}_jni POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${engine_lib_location}") add_custom_command(TARGET ${engine}_jni POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${engine_lib_location}")
# native tests
add_definitions(-DGTEST_HAS_CLONE=0 -DANDROID -DGTEST_HAS_TR1_TUPLE=0)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-allow-shlib-undefined")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/jni/Tests)
file(GLOB engine_test_files "jni/Tests/*.cpp")
add_executable(opencv_test_engine ${engine_test_files} jni/Tests/gtest/gtest-all.cpp)
target_link_libraries(opencv_test_engine z binder log utils android_runtime ${engine} ${engine}_jni)

@ -80,17 +80,21 @@ string CommonPackageManager::GetPackagePathByVersion(int version, int platform,
if (!packages.empty()) if (!packages.empty())
{ {
int OptRating = -1; int platform_group = 0;
int OptVersion = 0;
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; platform_group = 1;
int HardwareRating = GetHardwareRating(platform, cpu_id, group); if (cpu_id & ARCH_MIPS)
LOGD("Current hardware platform rating %d for (%d,%d)", HardwareRating, platform, cpu_id); platform_group = 2;
if (-1 == HardwareRating) int opt_rating = -1;
int opt_version = 0;
const int hardware_rating = GetHardwareRating(platform, cpu_id, ArchRatings[platform_group]);
LOGD("Current hardware platform rating %d for (%d,%d)", hardware_rating, platform, cpu_id);
if (-1 == hardware_rating)
{ {
LOGE("Cannot calculate rating for current hardware platform!"); LOGE("Cannot calculate rating for current hardware platform!");
} }
@ -99,26 +103,38 @@ string CommonPackageManager::GetPackagePathByVersion(int version, int platform,
vector<PackageInfo>::iterator found = packages.end(); vector<PackageInfo>::iterator found = packages.end();
for (vector<PackageInfo>::iterator it = packages.begin(); it != packages.end(); ++it) for (vector<PackageInfo>::iterator it = packages.begin(); it != packages.end(); ++it)
{ {
int PackageRating = GetHardwareRating(it->GetPlatform(), it->GetCpuID(), group); int package_group = 0;
LOGD("Package \"%s\" rating %d for (%d,%d)", it->GetFullName().c_str(), PackageRating, it->GetPlatform(), it->GetCpuID());
if ((PackageRating >= 0) && (PackageRating <= HardwareRating)) if ((it->GetCpuID() & ARCH_X86) || (it->GetCpuID() & ARCH_X64))
package_group = 1;
if (it->GetCpuID() & ARCH_MIPS)
package_group = 2;
if (package_group != platform_group)
continue;
const int package_rating = GetHardwareRating(it->GetPlatform(), it->GetCpuID(), ArchRatings[package_group]);
LOGD("Package \"%s\" rating %d for (%d,%d)", it->GetFullName().c_str(), package_rating, it->GetPlatform(), it->GetCpuID());
if ((package_rating >= 0) && (package_rating <= hardware_rating))
{ {
if (((it->GetVersion() >= OptVersion) && (PackageRating >= OptRating)) || (it->GetVersion() > OptVersion)) if (((it->GetVersion() >= opt_version) && (package_rating >= opt_rating)) || (it->GetVersion() > opt_version))
{ {
OptRating = PackageRating; opt_rating = package_rating;
OptVersion = it->GetVersion(); opt_version = it->GetVersion();
found = it; found = it;
} }
} }
} }
if ((-1 != OptRating) && (packages.end() != found)) if ((-1 != opt_rating) && (packages.end() != found))
{ {
result = found->GetInstalationPath(); result = found->GetInstalationPath();
} }
else else
{ {
LOGI("Found package is incompatible with current hardware platform"); LOGI("No compatible packages found!");
} }
} }
} }
@ -146,10 +162,13 @@ int CommonPackageManager::GetHardwareRating(int platform, int cpu_id, const std:
else else
{ {
// Calculate rating for Arm // Calculate rating for Arm
LOGD("!!! Calculating rating for ARM\n");
for (size_t i = 0; i < group.size(); i++) for (size_t i = 0; i < group.size(); i++)
{ {
LOGD("Checking (%d, %d) against (%d,%d)\n", group[i].first, group[i].second, platform, cpu_id);
if (group[i] == std::pair<int, int>(platform, cpu_id)) if (group[i] == std::pair<int, int>(platform, cpu_id))
{ {
LOGD("Rating found: %d\n", i);
result = i; result = i;
break; break;
} }
@ -182,21 +201,27 @@ std::vector<std::pair<int, int> > CommonPackageManager::InitArmRating()
return result; return result;
} }
// Stub for Intel platforms rating initialization. Common package for all Intel based devices is used now
std::vector<std::pair<int, int> > CommonPackageManager::InitIntelRating() std::vector<std::pair<int, int> > CommonPackageManager::InitIntelRating()
{ {
std::vector<std::pair<int, int> > result; std::vector<std::pair<int, int> > result;
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_X64)); return result;
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSSE3)); }
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2));
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE)); // Stub for MIPS platforms rating initialization. Common package for all MIPS based devices is used now
result.push_back(std::pair<int, int>(PLATFORM_UNKNOWN, ARCH_X86)); std::vector<std::pair<int, int> > CommonPackageManager::InitMipsRating()
{
std::vector<std::pair<int, int> > result;
return result; return result;
} }
std::vector<std::pair<int, int> > CommonPackageManager::IntelRating = CommonPackageManager::InitIntelRating(); const std::vector<std::pair<int, int> > CommonPackageManager::ArchRatings[] = {
std::vector<std::pair<int, int> > CommonPackageManager::ArmRating = InitArmRating(); CommonPackageManager::InitArmRating(),
CommonPackageManager::InitIntelRating(),
CommonPackageManager::InitMipsRating()
};
CommonPackageManager::~CommonPackageManager() CommonPackageManager::~CommonPackageManager()
{ {

@ -16,11 +16,11 @@ public:
virtual ~CommonPackageManager(); virtual ~CommonPackageManager();
protected: protected:
static std::vector<std::pair<int, int> > ArmRating; static const std::vector<std::pair<int, int> > ArchRatings[];
static std::vector<std::pair<int, int> > IntelRating;
static std::vector<std::pair<int, int> > InitArmRating(); static std::vector<std::pair<int, int> > InitArmRating();
static std::vector<std::pair<int, int> > InitIntelRating(); static std::vector<std::pair<int, int> > InitIntelRating();
static std::vector<std::pair<int, int> > InitMipsRating();
bool IsVersionCompatible(int target_version, int package_version); bool IsVersionCompatible(int target_version, int package_version);
int GetHardwareRating(int platform, int cpu_id, const std::vector<std::pair<int, int> >& group); int GetHardwareRating(int platform, int cpu_id, const std::vector<std::pair<int, int> >& group);

@ -111,7 +111,6 @@ TEST(Split, SplitMultiElementString)
TEST(CpuCount, CheckNonZero) TEST(CpuCount, CheckNonZero)
{ {
EXPECT_TRUE(GetProcessorCount() != 0); EXPECT_TRUE(GetProcessorCount() != 0);
EXPECT_TRUE(a.find("") == a.end());
} }
TEST(GetCpuInfo, GetCpuInfo) TEST(GetCpuInfo, GetCpuInfo)
@ -127,7 +126,7 @@ TEST(CpuID, CheckNotEmpy)
EXPECT_NE(0, cpu_id); EXPECT_NE(0, cpu_id);
} }
#ifdef __i386__ #if defined(__i386__)
TEST(CpuID, CheckX86) TEST(CpuID, CheckX86)
{ {
int cpu_id = GetCpuID(); int cpu_id = GetCpuID();
@ -139,14 +138,14 @@ TEST(CpuID, CheckSSE2)
int cpu_id = GetCpuID(); int cpu_id = GetCpuID();
EXPECT_TRUE(cpu_id & FEATURES_HAS_SSE2); EXPECT_TRUE(cpu_id & FEATURES_HAS_SSE2);
} }
#elseif __mips #elif defined(__mips)
#ifdef __SUPPORT_MIPS #ifdef __SUPPORT_MIPS
TEST(CpuID, CheckMips) TEST(CpuID, CheckMips)
{ {
int cpu_id = GetCpuID(); int cpu_id = GetCpuID();
EXPECT_TRUE(cpu_id & ARCH_MIPS); EXPECT_TRUE(cpu_id & ARCH_MIPS);
} }
#endif #endif
#else #else
TEST(TegraDetector, Detect) TEST(TegraDetector, Detect)
{ {
@ -175,4 +174,4 @@ TEST(PlatfromDetector, CheckTegra)
{ {
EXPECT_NE(PLATFORM_UNKNOWN, DetectKnownPlatforms()); EXPECT_NE(PLATFORM_UNKNOWN, DetectKnownPlatforms());
} }
#endif #endif

@ -69,7 +69,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("240", PLATFORM_UNKNOWN, ARCH_X86); Starter.PackageManager->InstallVersion(2040000, PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string());
@ -79,7 +79,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_X86); Starter.PackageManager->InstallVersion(2040200, PLATFORM_UNKNOWN, ARCH_X86);
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"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_x86/lib", String8(result).string());
@ -89,7 +89,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("241", PLATFORM_UNKNOWN, ARCH_X86); Starter.PackageManager->InstallVersion(2040100, PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.2")); String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
@ -100,7 +100,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("240", PLATFORM_UNKNOWN, ARCH_MIPS); Starter.PackageManager->InstallVersion(2040000, PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string());
@ -110,7 +110,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_MIPS); Starter.PackageManager->InstallVersion(2040200, PLATFORM_UNKNOWN, ARCH_MIPS);
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"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", String8(result).string());
@ -120,7 +120,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("241", PLATFORM_UNKNOWN, ARCH_MIPS); Starter.PackageManager->InstallVersion(2040100, PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.2")); String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
@ -131,7 +131,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWExistVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("240", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion(2040000, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | 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
@ -149,7 +149,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWOldVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion(2040200, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | 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
@ -167,7 +167,7 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("241", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion(2040100, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.2")); String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
@ -177,7 +177,7 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage1)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_ARMv5); Starter.PackageManager->InstallVersion(2040200, PLATFORM_UNKNOWN, ARCH_ARMv5);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", String8(result).string()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", String8(result).string());
@ -187,7 +187,7 @@ TEST(OpenCVEngineTest, GetPathForCompatiblePackage2)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion(2040200, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | 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
@ -225,7 +225,7 @@ 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_X64); Starter.PackageManager->InstallVersion(2040200, PLATFORM_UNKNOWN, ARCH_X64);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
@ -235,7 +235,7 @@ 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); Starter.PackageManager->InstallVersion(2040200, PLATFORM_UNKNOWN, ARCH_ARMv7);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
@ -248,4 +248,4 @@ TEST(OpenCVEngineTest, GetPathForUnExistVersion)
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.5")); String16 result = Engine->GetLibPathByVersion(String16("2.5"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
} }

@ -11,14 +11,14 @@ using namespace std;
TEST(PackageInfo, FullNameArmv7) TEST(PackageInfo, FullNameArmv7)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
} }
TEST(PackageInfo, FullNameArmv7Neon) TEST(PackageInfo, FullNameArmv7Neon)
{ {
PackageInfo info("241", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON); PackageInfo info(2040100, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#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());
@ -29,14 +29,14 @@ TEST(PackageInfo, FullNameArmv7Neon)
TEST(PackageInfo, FullNameArmv7VFPv3) TEST(PackageInfo, FullNameArmv7VFPv3)
{ {
PackageInfo info("233", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3); PackageInfo info(2030300, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
} }
TEST(PackageInfo, FullNameArmv7VFPv3Neon) TEST(PackageInfo, FullNameArmv7VFPv3Neon)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#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());
@ -47,21 +47,21 @@ TEST(PackageInfo, FullNameArmv7VFPv3Neon)
TEST(PackageInfo, FullNameArmv5) TEST(PackageInfo, FullNameArmv5)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv5); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv5);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str());
} }
TEST(PackageInfo, FullNameArmv6) TEST(PackageInfo, FullNameArmv6)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv6); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv6);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str());
} }
TEST(PackageInfo, FullNameArmv6VFPv3) TEST(PackageInfo, FullNameArmv6VFPv3)
{ {
PackageInfo info("232", PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3); PackageInfo info(2030200, PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_ARMEABI_FEATURES #ifdef __SUPPORT_ARMEABI_FEATURES
EXPECT_STREQ("org.opencv.lib_v23_armv5_vfpv3", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv5_vfpv3", name.c_str());
@ -72,7 +72,7 @@ TEST(PackageInfo, FullNameArmv6VFPv3)
TEST(PackageInfo, FullNameTegra3) TEST(PackageInfo, FullNameTegra3)
{ {
PackageInfo info("230", 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());
@ -87,7 +87,7 @@ TEST(PackageInfo, FullNameTegra3)
TEST(PackageInfo, FullNameX86SSE2) TEST(PackageInfo, FullNameX86SSE2)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_INTEL_FEATURES #ifdef __SUPPORT_INTEL_FEATURES
EXPECT_STREQ("org.opencv.lib_v23_x86_sse2", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_x86_sse2", name.c_str());
@ -99,7 +99,7 @@ TEST(PackageInfo, FullNameX86SSE2)
#ifdef __SUPPORT_MIPS #ifdef __SUPPORT_MIPS
TEST(PackageInfo, FullNameMips) TEST(PackageInfo, FullNameMips)
{ {
PackageInfo info("243", PLATFORM_UNKNOWN, ARCH_MIPS); PackageInfo info(2040300, PLATFORM_UNKNOWN, ARCH_MIPS);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v24_mips", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_mips", name.c_str());
} }
@ -108,21 +108,21 @@ TEST(PackageInfo, FullNameMips)
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");
EXPECT_EQ("230", info.GetVersion()); EXPECT_EQ(2030000, info.GetVersion());
EXPECT_EQ(ARCH_ARMv7 | FEATURES_HAS_NEON, info.GetCpuID()); EXPECT_EQ(ARCH_ARMv7 | FEATURES_HAS_NEON, info.GetCpuID());
} }
TEST(PackageInfo, Armv5FromFullName) TEST(PackageInfo, Armv5FromFullName)
{ {
PackageInfo info("org.opencv.lib_v23_armv5", "/data/data/org.opencv.lib_v23_armv5"); PackageInfo info("org.opencv.lib_v23_armv5", "/data/data/org.opencv.lib_v23_armv5");
EXPECT_EQ("230", info.GetVersion()); EXPECT_EQ(2030000, info.GetVersion());
EXPECT_EQ(ARCH_ARMv5, info.GetCpuID()); EXPECT_EQ(ARCH_ARMv5, info.GetCpuID());
} }
TEST(PackageInfo, Armv5VFPv3FromFullName) TEST(PackageInfo, Armv5VFPv3FromFullName)
{ {
PackageInfo info("org.opencv.lib_v23_armv5_vfpv3", "/data/data/org.opencv.lib_v23_armv5_vfpv3"); PackageInfo info("org.opencv.lib_v23_armv5_vfpv3", "/data/data/org.opencv.lib_v23_armv5_vfpv3");
EXPECT_EQ("230", info.GetVersion()); EXPECT_EQ(2030000, info.GetVersion());
EXPECT_EQ(ARCH_ARMv5 | FEATURES_HAS_VFPv3, info.GetCpuID()); EXPECT_EQ(ARCH_ARMv5 | FEATURES_HAS_VFPv3, info.GetCpuID());
} }
@ -131,20 +131,20 @@ TEST(PackageInfo, X86SSE2FromFullName)
PackageInfo info("org.opencv.lib_v24_x86_sse2", "/data/data/org.opencv.lib_v24_x86_sse2"); PackageInfo info("org.opencv.lib_v24_x86_sse2", "/data/data/org.opencv.lib_v24_x86_sse2");
EXPECT_EQ(PLATFORM_UNKNOWN, info.GetPlatform()); EXPECT_EQ(PLATFORM_UNKNOWN, info.GetPlatform());
EXPECT_EQ(ARCH_X86 | FEATURES_HAS_SSE2, info.GetCpuID()); EXPECT_EQ(ARCH_X86 | FEATURES_HAS_SSE2, info.GetCpuID());
EXPECT_EQ("240", info.GetVersion()); EXPECT_EQ(2040000, info.GetVersion());
} }
TEST(PackageInfo, Tegra2FromFullName) TEST(PackageInfo, Tegra2FromFullName)
{ {
PackageInfo info("org.opencv.lib_v23_tegra2", "/data/data/org.opencv.lib_v23_tegra2"); PackageInfo info("org.opencv.lib_v23_tegra2", "/data/data/org.opencv.lib_v23_tegra2");
EXPECT_EQ("230", info.GetVersion()); EXPECT_EQ(2030000, info.GetVersion());
EXPECT_EQ(PLATFORM_TEGRA2, info.GetPlatform()); EXPECT_EQ(PLATFORM_TEGRA2, info.GetPlatform());
} }
TEST(PackageInfo, Tegra3FromFullName) TEST(PackageInfo, Tegra3FromFullName)
{ {
PackageInfo info("org.opencv.lib_v24_tegra3", "/data/data/org.opencv.lib_v24_tegra3"); PackageInfo info("org.opencv.lib_v24_tegra3", "/data/data/org.opencv.lib_v24_tegra3");
EXPECT_EQ("240", info.GetVersion()); EXPECT_EQ(2040000, info.GetVersion());
EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform()); EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform());
} }
@ -152,14 +152,14 @@ TEST(PackageInfo, Tegra3FromFullName)
TEST(PackageInfo, MipsFromFullName) TEST(PackageInfo, MipsFromFullName)
{ {
PackageInfo info("org.opencv.lib_v24_mips", "/data/data/org.opencv.lib_v24_mips"); PackageInfo info("org.opencv.lib_v24_mips", "/data/data/org.opencv.lib_v24_mips");
EXPECT_EQ("240", info.GetVersion()); EXPECT_EQ(2040000, info.GetVersion());
EXPECT_EQ(ARCH_MIPS, info.GetCpuID()); EXPECT_EQ(ARCH_MIPS, info.GetCpuID());
} }
#endif #endif
TEST(PackageInfo, Comparator1) TEST(PackageInfo, Comparator1)
{ {
PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86); PackageInfo info1(2040000, PLATFORM_UNKNOWN, ARCH_X86);
PackageInfo info2("org.opencv.lib_v24_x86", "/data/data/org.opencv.lib_v24_x86"); PackageInfo info2("org.opencv.lib_v24_x86", "/data/data/org.opencv.lib_v24_x86");
EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str()); EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str());
EXPECT_EQ(info1, info2); EXPECT_EQ(info1, info2);
@ -167,7 +167,7 @@ TEST(PackageInfo, Comparator1)
TEST(PackageInfo, Comparator2) TEST(PackageInfo, Comparator2)
{ {
PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON | FEATURES_HAS_VFPv3); PackageInfo info1(2040000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON | FEATURES_HAS_VFPv3);
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
PackageInfo info2("org.opencv.lib_v24_armv7a_neon", "/data/data/org.opencv.lib_v24_armv7a_neon"); PackageInfo info2("org.opencv.lib_v24_armv7a_neon", "/data/data/org.opencv.lib_v24_armv7a_neon");
#else #else
@ -180,7 +180,7 @@ TEST(PackageInfo, Comparator2)
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
TEST(PackageInfo, Comparator3) TEST(PackageInfo, Comparator3)
{ {
PackageInfo info1("230", PLATFORM_TEGRA3, 0); PackageInfo info1(2030000, PLATFORM_TEGRA3, 0);
PackageInfo info2("org.opencv.lib_v23_tegra3", "/data/data/org.opencv.lib_v23_tegra3"); PackageInfo info2("org.opencv.lib_v23_tegra3", "/data/data/org.opencv.lib_v23_tegra3");
EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str()); EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str());
EXPECT_EQ(info1, info2); EXPECT_EQ(info1, info2);

@ -5,7 +5,6 @@
#include "IOpenCVEngine.h" #include "IOpenCVEngine.h"
#include <utils/String16.h> #include <utils/String16.h>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <set>
#include <string> #include <string>
#include <vector> #include <vector>
@ -14,52 +13,52 @@ using namespace std;
TEST(PackageManager, InstalledVersions) TEST(PackageManager, InstalledVersions)
{ {
PackageManagerStub pm; PackageManagerStub pm;
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7);
pm.InstalledPackages.push_back(info); pm.InstalledPackages.push_back(info);
std::set<string> versions = pm.GetInstalledVersions(); std::vector<int> versions = pm.GetInstalledVersions();
EXPECT_EQ(1, versions.size()); EXPECT_EQ(1, versions.size());
EXPECT_EQ("230", *versions.begin()); EXPECT_EQ(2030000, *versions.begin());
} }
TEST(PackageManager, CheckVersionInstalled) TEST(PackageManager, CheckVersionInstalled)
{ {
PackageManagerStub pm; PackageManagerStub pm;
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7);
pm.InstalledPackages.push_back(info); pm.InstalledPackages.push_back(info);
EXPECT_TRUE(pm.CheckVersionInstalled("230", PLATFORM_UNKNOWN, ARCH_ARMv7)); EXPECT_TRUE(pm.CheckVersionInstalled(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7));
} }
TEST(PackageManager, InstallVersion) TEST(PackageManager, InstallVersion)
{ {
PackageManagerStub pm; PackageManagerStub pm;
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv5); PackageInfo info(2030000, PLATFORM_UNKNOWN, ARCH_ARMv5);
pm.InstalledPackages.push_back(info); pm.InstalledPackages.push_back(info);
EXPECT_TRUE(pm.InstallVersion("240", PLATFORM_UNKNOWN, ARCH_ARMv5)); EXPECT_TRUE(pm.InstallVersion(2040000, PLATFORM_UNKNOWN, ARCH_ARMv5));
EXPECT_EQ(2, pm.InstalledPackages.size()); EXPECT_EQ(2, pm.InstalledPackages.size());
EXPECT_TRUE(pm.CheckVersionInstalled("240", PLATFORM_UNKNOWN, ARCH_ARMv5)); EXPECT_TRUE(pm.CheckVersionInstalled(2040000, PLATFORM_UNKNOWN, ARCH_ARMv5));
} }
TEST(PackageManager, GetPackagePathForArmv5) TEST(PackageManager, GetPackagePathForArmv5)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("243", PLATFORM_UNKNOWN, ARCH_ARMv5)); EXPECT_TRUE(pm.InstallVersion(2040300, PLATFORM_UNKNOWN, ARCH_ARMv5));
string path = pm.GetPackagePathByVersion("243", PLATFORM_UNKNOWN, ARCH_ARMv5); string path = pm.GetPackagePathByVersion(2040300, PLATFORM_UNKNOWN, ARCH_ARMv5);
EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", path.c_str());
} }
TEST(PackageManager, GetPackagePathForArmv7) TEST(PackageManager, GetPackagePathForArmv7)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("230", PLATFORM_UNKNOWN, ARCH_ARMv7)); EXPECT_TRUE(pm.InstallVersion(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7));
string path = pm.GetPackagePathByVersion("230", PLATFORM_UNKNOWN, ARCH_ARMv7); string path = pm.GetPackagePathByVersion(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7);
EXPECT_STREQ("/data/data/org.opencv.lib_v23_armv7a/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v23_armv7a/lib", path.c_str());
} }
TEST(PackageManager, GetPackagePathForArmv7Neon) TEST(PackageManager, GetPackagePathForArmv7Neon)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON)); EXPECT_TRUE(pm.InstallVersion(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON));
string path = pm.GetPackagePathByVersion("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON); string path = pm.GetPackagePathByVersion(2030000, PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON);
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v23_armv7a_neon/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v23_armv7a_neon/lib", path.c_str());
#else #else
@ -70,16 +69,16 @@ TEST(PackageManager, GetPackagePathForArmv7Neon)
TEST(PackageManager, GetPackagePathForX86) TEST(PackageManager, GetPackagePathForX86)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("230", PLATFORM_UNKNOWN, ARCH_X86)); EXPECT_TRUE(pm.InstallVersion(2030000, PLATFORM_UNKNOWN, ARCH_X86));
string path = pm.GetPackagePathByVersion("230", PLATFORM_UNKNOWN, ARCH_X86); string path = pm.GetPackagePathByVersion(2030000, PLATFORM_UNKNOWN, ARCH_X86);
EXPECT_STREQ("/data/data/org.opencv.lib_v23_x86/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v23_x86/lib", path.c_str());
} }
TEST(PackageManager, GetPackagePathForX86SSE2) TEST(PackageManager, GetPackagePathForX86SSE2)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2)); EXPECT_TRUE(pm.InstallVersion(2030000, PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2));
string path = pm.GetPackagePathByVersion("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2); string path = pm.GetPackagePathByVersion(2030000, PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2);
#ifdef __SUPPORT_INTEL_FEATURES #ifdef __SUPPORT_INTEL_FEATURES
EXPECT_STREQ("/data/data/org.opencv.lib_v23_x86_sse2/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v23_x86_sse2/lib", path.c_str());
#else #else
@ -90,8 +89,8 @@ TEST(PackageManager, GetPackagePathForX86SSE2)
TEST(PackageManager, GetPackagePathForTegra3) TEST(PackageManager, GetPackagePathForTegra3)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("230", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON)); EXPECT_TRUE(pm.InstallVersion(2030000, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON));
string path = pm.GetPackagePathByVersion("230", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); string path = pm.GetPackagePathByVersion(2030000, PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON);
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
EXPECT_STREQ("/data/data/org.opencv.lib_v23_tegra3/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v23_tegra3/lib", path.c_str());
#else #else
@ -107,8 +106,8 @@ TEST(PackageManager, GetPackagePathForTegra3)
TEST(PackageManager, GetPackagePathForMips) TEST(PackageManager, GetPackagePathForMips)
{ {
PackageManagerStub pm; PackageManagerStub pm;
EXPECT_TRUE(pm.InstallVersion("243", PLATFORM_UNKNOWN, ARCH_MIPS)); EXPECT_TRUE(pm.InstallVersion(2040000, PLATFORM_UNKNOWN, ARCH_MIPS));
string path = pm.GetPackagePathByVersion("243", PLATFORM_UNKNOWN, ARCH_MIPS); string path = pm.GetPackagePathByVersion(2040000, PLATFORM_UNKNOWN, ARCH_MIPS);
EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", path.c_str()); EXPECT_STREQ("/data/data/org.opencv.lib_v24_mips/lib", path.c_str());
} }
#endif #endif

@ -38,7 +38,7 @@ doc_signatures_whitelist = [
"CvArr", "CvFileStorage", "CvArr", "CvFileStorage",
# other # other
"InputArray", "OutputArray", "InputArray", "OutputArray",
] ] + ["CvSubdiv2D", "CvQuadEdge2D", "CvSubdiv2DPoint", "cvDrawContours"]
defines = ["cvGraphEdgeIdx", "cvFree", "CV_Assert", "cvSqrt", "cvGetGraphVtx", "cvGraphVtxIdx", defines = ["cvGraphEdgeIdx", "cvFree", "CV_Assert", "cvSqrt", "cvGetGraphVtx", "cvGraphVtxIdx",
"cvCaptureFromFile", "cvCaptureFromCAM", "cvCalcBackProjectPatch", "cvCalcBackProject", "cvCaptureFromFile", "cvCaptureFromCAM", "cvCalcBackProjectPatch", "cvCalcBackProject",

@ -992,6 +992,11 @@ class DefinitionParser(object):
return rv return rv
def _parse_signature(self): def _parse_signature(self):
if r'CvStatModel::train' in self.definition:
# hack to skip parsing of problematic definition
self.pos = self.end
return [ArgumentDefExpr("const Mat&", "train_data", None), ArgumentDefExpr(None, self.definition[self.definition.find("["):-1], None)], False, True
self.skip_ws() self.skip_ws()
if not self.skip_string('('): if not self.skip_string('('):
self.fail('expected parentheses for function') self.fail('expected parentheses for function')
@ -1075,6 +1080,17 @@ class DefinitionParser(object):
value = None value = None
return MemberObjDefExpr(name, visibility, static, typename, value) return MemberObjDefExpr(name, visibility, static, typename, value)
def parse_enum_member_object(self):
visibility, static = self._parse_visibility_static()
typename = None
name = self._parse_type()
self.skip_ws()
if self.skip_string('='):
value = self.read_rest().strip()
else:
value = None
return MemberObjDefExpr(name, visibility, static, typename, value)
def parse_function(self): def parse_function(self):
visibility, static = self._parse_visibility_static() visibility, static = self._parse_visibility_static()
if self.skip_word('explicit'): if self.skip_word('explicit'):
@ -1180,6 +1196,8 @@ class OCVObject(ObjectDescription):
def add_target_and_index(self, sigobj, sig, signode): def add_target_and_index(self, sigobj, sig, signode):
theid = sig#obj.get_id() theid = sig#obj.get_id()
theid = re.sub(r" +", " ", theid) theid = re.sub(r" +", " ", theid)
if self.objtype == 'emember':
theid = re.sub(r" ?=.*", "", theid)
theid = re.sub(r"=[^,()]+\([^)]*?\)[^,)]*(,|\))", "\\1", theid) theid = re.sub(r"=[^,()]+\([^)]*?\)[^,)]*(,|\))", "\\1", theid)
theid = re.sub(r"=\w*[^,)(]+(,|\))", "\\1", theid) theid = re.sub(r"=\w*[^,)(]+(,|\))", "\\1", theid)
theid = theid.replace("( ", "(").replace(" )", ")") theid = theid.replace("( ", "(").replace(" )", ")")
@ -1293,6 +1311,25 @@ class OCVTypeObject(OCVObject):
signode += nodes.Text(' ') signode += nodes.Text(' ')
self.attach_name(signode, obj.name) self.attach_name(signode, obj.name)
class OCVEnumObject(OCVObject):
def get_index_text(self, name):
if self.objtype == 'enum':
return _('%s (enum)') % name
return ''
def parse_definition(self, parser):
return parser.parse_type_object()
def describe_signature(self, signode, obj):
self.attach_modifiers(signode, obj)
signode += addnodes.desc_annotation('enum ', 'enum ')
if obj.typename is not None:
self.attach_type(signode, obj.typename)
signode += nodes.Text(' ')
self.attach_name(signode, obj.name)
class OCVMemberObject(OCVObject): class OCVMemberObject(OCVObject):
ismember = True ismember = True
@ -1309,12 +1346,20 @@ class OCVMemberObject(OCVObject):
def describe_signature(self, signode, obj): def describe_signature(self, signode, obj):
self.attach_modifiers(signode, obj) self.attach_modifiers(signode, obj)
self.attach_type(signode, obj.typename) if obj.typename:
signode += nodes.Text(' ') self.attach_type(signode, obj.typename)
signode += nodes.Text(' ')
self.attach_name(signode, obj.name) self.attach_name(signode, obj.name)
if obj.value is not None: if obj.value is not None:
signode += nodes.Text(u' = ' + obj.value) signode += nodes.Text(u' = ' + obj.value)
class OCVEnumMemberObject(OCVMemberObject):
def parse_definition(self, parser):
# parent_class = self.env.temp_data.get('ocv:parent')
# if parent_class is None:
# parser.fail("missing parent structure/class")
return parser.parse_enum_member_object()
class OCVFunctionObject(OCVObject): class OCVFunctionObject(OCVObject):
def attach_function(self, node, func): def attach_function(self, node, func):
@ -1448,7 +1493,9 @@ class OCVDomain(Domain):
'pyfunction': ObjType(l_('pyfunction'), 'pyfunc'), 'pyfunction': ObjType(l_('pyfunction'), 'pyfunc'),
'pyoldfunction': ObjType(l_('pyoldfunction'), 'pyoldfunc'), 'pyoldfunction': ObjType(l_('pyoldfunction'), 'pyoldfunc'),
'member': ObjType(l_('member'), 'member'), 'member': ObjType(l_('member'), 'member'),
'type': ObjType(l_('type'), 'type') 'emember': ObjType(l_('emember'), 'emember'),
'type': ObjType(l_('type'), 'type'),
'enum': ObjType(l_('enum'), 'enum')
} }
directives = { directives = {
@ -1460,7 +1507,9 @@ class OCVDomain(Domain):
'pyfunction': OCVPyModulelevel, 'pyfunction': OCVPyModulelevel,
'pyoldfunction': OCVPyOldModulelevel, 'pyoldfunction': OCVPyOldModulelevel,
'member': OCVMemberObject, 'member': OCVMemberObject,
'emember': OCVEnumMemberObject,
'type': OCVTypeObject, 'type': OCVTypeObject,
'enum': OCVEnumObject,
'namespace': OCVCurrentNamespace 'namespace': OCVCurrentNamespace
} }
roles = { roles = {
@ -1475,7 +1524,9 @@ class OCVDomain(Domain):
'pyfunc' : OCVPyXRefRole(), 'pyfunc' : OCVPyXRefRole(),
'pyoldfunc' : OCVPyXRefRole(), 'pyoldfunc' : OCVPyXRefRole(),
'member': OCVXRefRole(), 'member': OCVXRefRole(),
'type': OCVXRefRole() 'emember': OCVXRefRole(),
'type': OCVXRefRole(),
'enum': OCVXRefRole()
} }
initial_data = { initial_data = {
'objects': {}, # fullname -> docname, objtype 'objects': {}, # fullname -> docname, objtype
@ -1563,7 +1614,9 @@ class OCVDomain(Domain):
'pyfunction': _('Python function'), 'pyfunction': _('Python function'),
'pyoldfunction': _('Legacy Python function'), 'pyoldfunction': _('Legacy Python function'),
'member': _('C++ member'), 'member': _('C++ member'),
'emember': _('enum member'),
'type': _('C/C++ type'), 'type': _('C/C++ type'),
'enum': _('C/C++ enum'),
'namespace': _('C++ namespace'), 'namespace': _('C++ namespace'),
}.get(type.lname, _('%s %s') % (self.label, type.lname)) }.get(type.lname, _('%s %s') % (self.label, type.lname))

@ -210,9 +210,9 @@ You need the following software to be installed in order to develop for Android
.. note:: Before start you can read official Android NDK documentation which is in the Android .. note:: Before start you can read official Android NDK documentation which is in the Android
NDK archive, in the folder :file:`docs/`. NDK archive, in the folder :file:`docs/`.
The main article about using Android NDK build system is in the :file:`ANDROID-MK.html` file. The main article about using Android NDK build system is in the :file:`ANDROID-MK.html` file.
Some additional information you can find in the :file:`APPLICATION-MK.html`, Some additional information you can find in
:file:`NDK-BUILD.html` files, and :file:`CPU-ARM-NEON.html`, :file:`CPLUSPLUS-SUPPORT.html`, the :file:`APPLICATION-MK.html`, :file:`NDK-BUILD.html` files,
:file:`PREBUILTS.html`. and :file:`CPU-ARM-NEON.html`, :file:`CPLUSPLUS-SUPPORT.html`, :file:`PREBUILTS.html`.
#. **CDT plugin for Eclipse** #. **CDT plugin for Eclipse**

@ -35,8 +35,8 @@ Starting from version 2.4.4 OpenCV includes desktop Java bindings.
The most simple way to get it is downloading the appropriate package of **version 2.4.4 or higher** from the The most simple way to get it is downloading the appropriate package of **version 2.4.4 or higher** from the
`OpenCV SourceForge repository <http://sourceforge.net/projects/opencvlibrary/files/>`_. `OpenCV SourceForge repository <http://sourceforge.net/projects/opencvlibrary/files/>`_.
.. note:: Windows users can find the prebuilt files needed for Java development in the .. note:: Windows users can find the prebuilt files needed for Java development in
:file:`opencv/build/java/` folder inside the package. the :file:`opencv/build/java/` folder inside the package.
For other OSes it's required to build OpenCV from sources. For other OSes it's required to build OpenCV from sources.
Another option to get OpenCV sources is to clone `OpenCV git repository Another option to get OpenCV sources is to clone `OpenCV git repository

@ -2064,10 +2064,11 @@ SparseMat::SparseMat
Various SparseMat constructors. Various SparseMat constructors.
.. ocv:function:: SparseMat::SparseMat() .. ocv:function:: SparseMat::SparseMat()
.. ocv:function:: SparseMat::SparseMat(int dims, const int* _sizes, int _type) .. ocv:function:: SparseMat::SparseMat( int dims, const int* _sizes, int _type )
.. ocv:function:: SparseMat::SparseMat(const SparseMat& m) .. ocv:function:: SparseMat::SparseMat( const SparseMat& m )
.. ocv:function:: SparseMat::SparseMat(const Mat& m, bool try1d=false) .. ocv:function:: SparseMat::SparseMat( const Mat& m )
.. ocv:function:: SparseMat::SparseMat(const CvSparseMat* m) .. ocv:function:: SparseMat::SparseMat( const CvSparseMat* m )
:param m: Source matrix for copy constructor. If m is dense matrix (ocv:class:`Mat`) then it will be converted to sparse representation. :param m: Source matrix for copy constructor. If m is dense matrix (ocv:class:`Mat`) then it will be converted to sparse representation.
:param dims: Array dimensionality. :param dims: Array dimensionality.
@ -2081,12 +2082,12 @@ SparseMat object destructor.
.. ocv:function:: SparseMat::~SparseMat() .. ocv:function:: SparseMat::~SparseMat()
SparseMat::operator = SparseMat::operator=
--------------------- --------------------
Provides sparse matrix assignment operators. Provides sparse matrix assignment operators.
.. ocv:function:: SparseMat& SparseMat::operator=(const SparseMat& m) .. ocv:function:: SparseMat& SparseMat::operator = (const SparseMat& m)
.. ocv:function:: SparseMat& SparseMat::operator=(const Mat& m) .. ocv:function:: SparseMat& SparseMat::operator = (const Mat& m)
The last variant is equivalent to the corresponding constructor with try1d=false. The last variant is equivalent to the corresponding constructor with try1d=false.

@ -444,9 +444,9 @@ If ``threads == 0``, OpenCV will disable threading optimizations and run all it'
functions sequentially. Passing ``threads < 0`` will reset threads number to system default. functions sequentially. Passing ``threads < 0`` will reset threads number to system default.
This function must be called outside of parallel region. This function must be called outside of parallel region.
.. ocv:function:: void setNumThreads(int threads) .. ocv:function:: void setNumThreads(int nthreads)
:param threads: Number of threads used by OpenCV. :param nthreads: Number of threads used by OpenCV.
OpenCV will try to run it's functions with specified threads number, but OpenCV will try to run it's functions with specified threads number, but
some behaviour differs from framework: some behaviour differs from framework:

@ -3549,7 +3549,7 @@ enum { HASH_SIZE0 = 8 };
static inline void copyElem(const uchar* from, uchar* to, size_t elemSize) static inline void copyElem(const uchar* from, uchar* to, size_t elemSize)
{ {
size_t i; size_t i;
for( i = 0; (int)i <= (int)(elemSize - sizeof(int)); i += sizeof(int) ) for( i = 0; i + sizeof(int) <= elemSize; i += sizeof(int) )
*(int*)(to + i) = *(const int*)(from + i); *(int*)(to + i) = *(const int*)(from + i);
for( ; i < elemSize; i++ ) for( ; i < elemSize; i++ )
to[i] = from[i]; to[i] = from[i];
@ -3558,7 +3558,7 @@ static inline void copyElem(const uchar* from, uchar* to, size_t elemSize)
static inline bool isZeroElem(const uchar* data, size_t elemSize) static inline bool isZeroElem(const uchar* data, size_t elemSize)
{ {
size_t i; size_t i;
for( i = 0; i <= elemSize - sizeof(int); i += sizeof(int) ) for( i = 0; i + sizeof(int) <= elemSize; i += sizeof(int) )
if( *(int*)(data + i) != 0 ) if( *(int*)(data + i) != 0 )
return false; return false;
for( ; i < elemSize; i++ ) for( ; i < elemSize; i++ )

@ -531,7 +531,7 @@ StarAdjuster
SurfAdjuster SurfAdjuster
------------ ------------
.. ocv:class:: SurfAdjuster: public AdjusterAdapter .. ocv:class:: SurfAdjuster : public AdjusterAdapter
:ocv:class:`AdjusterAdapter` for ``SurfFeatureDetector``. :: :ocv:class:`AdjusterAdapter` for ``SurfFeatureDetector``. ::

@ -352,9 +352,9 @@ gpu::Stream::enqueueMemSet
-------------------------- --------------------------
Initializes or sets device memory to a value. Initializes or sets device memory to a value.
.. ocv:function:: void gpu::Stream::enqueueMemSet(const GpuMat& src, Scalar val) .. ocv:function:: void gpu::Stream::enqueueMemSet( GpuMat& src, Scalar val )
.. ocv:function:: void gpu::Stream::enqueueMemSet(const GpuMat& src, Scalar val, const GpuMat& mask) .. ocv:function:: void gpu::Stream::enqueueMemSet( GpuMat& src, Scalar val, const GpuMat& mask )
@ -362,7 +362,7 @@ gpu::Stream::enqueueConvert
--------------------------- ---------------------------
Converts matrix type, ex from float to uchar depending on type. Converts matrix type, ex from float to uchar depending on type.
.. ocv:function:: void gpu::Stream::enqueueConvert(const GpuMat& src, GpuMat& dst, int type, double a = 1, double b = 0) .. ocv:function:: void gpu::Stream::enqueueConvert( const GpuMat& src, GpuMat& dst, int dtype, double a=1, double b=0 )

@ -47,20 +47,19 @@ Any subsequent API call to this device will reinitialize the device.
gpu::FeatureSet gpu::FeatureSet
--------------- ---------------
Enumeration providing GPU computing features. :: Enumeration providing GPU computing features.
enum FeatureSet .. ocv:enum:: gpu::FeatureSet
{
FEATURE_SET_COMPUTE_10, .. ocv:emember:: FEATURE_SET_COMPUTE_10
FEATURE_SET_COMPUTE_11, .. ocv:emember:: FEATURE_SET_COMPUTE_11
FEATURE_SET_COMPUTE_12, .. ocv:emember:: FEATURE_SET_COMPUTE_12
FEATURE_SET_COMPUTE_13, .. ocv:emember:: FEATURE_SET_COMPUTE_13
FEATURE_SET_COMPUTE_20, .. ocv:emember:: FEATURE_SET_COMPUTE_20
FEATURE_SET_COMPUTE_21, .. ocv:emember:: FEATURE_SET_COMPUTE_21
GLOBAL_ATOMICS, .. ocv:emember:: GLOBAL_ATOMICS
SHARED_ATOMICS, .. ocv:emember:: SHARED_ATOMICS
NATIVE_DOUBLE .. ocv:emember:: NATIVE_DOUBLE
};
gpu::TargetArchs gpu::TargetArchs
@ -73,7 +72,7 @@ The following method checks whether the module was built with the support of the
.. ocv:function:: static bool gpu::TargetArchs::builtWith( FeatureSet feature_set ) .. ocv:function:: static bool gpu::TargetArchs::builtWith( FeatureSet feature_set )
:param feature_set: Features to be checked. See :ocv:class:`gpu::FeatureSet`. :param feature_set: Features to be checked. See :ocv:enum:`gpu::FeatureSet`.
There is a set of methods to check whether the module contains intermediate (PTX) or binary GPU code for the given architecture(s): There is a set of methods to check whether the module contains intermediate (PTX) or binary GPU code for the given architecture(s):
@ -197,7 +196,7 @@ Provides information on GPU feature support.
.. ocv:function:: bool gpu::DeviceInfo::supports( FeatureSet feature_set ) const .. ocv:function:: bool gpu::DeviceInfo::supports( FeatureSet feature_set ) const
:param feature_set: Features to be checked. See :ocv:class:`gpu::FeatureSet`. :param feature_set: Features to be checked. See :ocv:enum:`gpu::FeatureSet`.
This function returns ``true`` if the device has the specified GPU feature. Otherwise, it returns ``false`` . This function returns ``true`` if the device has the specified GPU feature. Otherwise, it returns ``false`` .

@ -985,41 +985,51 @@ Class for reading video from files.
gpu::VideoReader_GPU::Codec gpu::VideoReader_GPU::Codec
--------------------------- ---------------------------
Video codecs supported by :ocv:class:`gpu::VideoReader_GPU` . :: Video codecs supported by :ocv:class:`gpu::VideoReader_GPU` .
enum Codec .. ocv:enum:: gpu::VideoReader_GPU::Codec
{
MPEG1 = 0, .. ocv:emember:: MPEG1 = 0
MPEG2, .. ocv:emember:: MPEG2
MPEG4, .. ocv:emember:: MPEG4
VC1, .. ocv:emember:: VC1
H264, .. ocv:emember:: H264
JPEG, .. ocv:emember:: JPEG
H264_SVC, .. ocv:emember:: H264_SVC
H264_MVC, .. ocv:emember:: H264_MVC
Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), // Y,U,V (4:2:0) .. ocv:emember:: Uncompressed_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V'))
Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,V,U (4:2:0)
Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), // Y,UV (4:2:0) Y,U,V (4:2:0)
Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), // YUYV/YUY2 (4:2:2)
Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')), // UYVY (4:2:2) .. ocv:emember:: Uncompressed_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2'))
};
Y,V,U (4:2:0)
.. ocv:emember:: Uncompressed_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2'))
Y,UV (4:2:0)
.. ocv:emember:: Uncompressed_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V'))
YUYV/YUY2 (4:2:2)
.. ocv:emember:: Uncompressed_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y'))
UYVY (4:2:2)
gpu::VideoReader_GPU::ChromaFormat gpu::VideoReader_GPU::ChromaFormat
---------------------------------- ----------------------------------
Chroma formats supported by :ocv:class:`gpu::VideoReader_GPU` . :: Chroma formats supported by :ocv:class:`gpu::VideoReader_GPU` .
enum ChromaFormat .. ocv:enum:: gpu::VideoReader_GPU::ChromaFormat
{
Monochrome=0,
YUV420,
YUV422,
YUV444,
};
.. ocv:emember:: Monochrome = 0
.. ocv:emember:: YUV420
.. ocv:emember:: YUV422
.. ocv:emember:: YUV444
gpu::VideoReader_GPU::FormatInfo gpu::VideoReader_GPU::FormatInfo
@ -1037,7 +1047,6 @@ Struct providing information about video file format. ::
}; };
gpu::VideoReader_GPU::VideoReader_GPU gpu::VideoReader_GPU::VideoReader_GPU
------------------------------------- -------------------------------------
Constructors. Constructors.

@ -1826,7 +1826,7 @@ void icvGetCutPiece( CvVect64d areaLineCoef1,CvVect64d areaLineCoef2,
/* Collect all candidate point */ /* Collect all candidate point */
CvPoint2D64d candPoints[8]; CvPoint2D64d candPoints[8];
CvPoint2D64d midPoint; CvPoint2D64d midPoint = {0, 0};
int numPoints = 0; int numPoints = 0;
int res; int res;
int i; int i;

@ -1615,7 +1615,7 @@ CvStatus
icvPoint7( int *ml, int *mr, double *F, int *amount ) icvPoint7( int *ml, int *mr, double *F, int *amount )
{ {
double A[63], B[7]; double A[63], B[7];
double *solutions; double *solutions = 0;
double a2, a1, a0; double a2, a1, a0;
double squares[6]; double squares[6];
int i, j; int i, j;

@ -1125,7 +1125,7 @@ icvBuildScanlineLeft( CvMatrix3 * matrix,
CvMatrix3 *F; CvMatrix3 *F;
float i; float i;
int offset; int offset;
float epiline[3]; float epiline[3] = {0,};
double a, b; double a, b;
assert( l_start_end != 0 ); assert( l_start_end != 0 );
@ -1211,7 +1211,7 @@ icvBuildScanlineRight( CvMatrix3 * matrix,
CvMatrix3 *F; CvMatrix3 *F;
float i; float i;
int offset; int offset;
float epiline[3]; float epiline[3] = {0,};
double a, b; double a, b;
assert( r_start_end != 0 ); assert( r_start_end != 0 );
@ -1389,7 +1389,9 @@ icvGetCoefficientStereo( CvMatrix3 * matrix,
float l_angle[2], r_angle[2]; float l_angle[2], r_angle[2];
float l_radius, r_radius; float l_radius, r_radius;
float r_point[3], l_point[3]; float r_point[3], l_point[3];
float l_epiline[3], r_epiline[3], x, y; float l_epiline[3] = {0,};
float r_epiline[3] = {0,};
float x, y;
float swap; float swap;
float radius1, radius2, radius3, radius4; float radius1, radius2, radius3, radius4;
@ -1731,8 +1733,8 @@ icvBuildScanlineLeftStereo( CvSize imgSize,
float delta; float delta;
float angle; float angle;
float l_point[3]; float l_point[3];
float l_epiline[3]; float l_epiline[3] = {0,};
float r_epiline[3]; float r_epiline[3] = {0,};
CvStatus error = CV_OK; CvStatus error = CV_OK;
CvMatrix3 *F; CvMatrix3 *F;
@ -1819,8 +1821,8 @@ icvBuildScanlineRightStereo( CvSize imgSize,
float delta; float delta;
float angle; float angle;
float r_point[3]; float r_point[3];
float l_epiline[3]; float l_epiline[3] = {0,};
float r_epiline[3]; float r_epiline[3] = {0,};
CvStatus error = CV_OK; CvStatus error = CV_OK;
CvMatrix3 *F; CvMatrix3 *F;

@ -169,11 +169,11 @@ CvBoost::predict
---------------- ----------------
Predicts a response for an input sample. Predicts a response for an input sample.
.. ocv:function:: float CvBoost::predict( const Mat& sample, const Mat& missing=Mat(), const Range& slice=Range::all(), bool raw_mode=false, bool return_sum=false ) const .. ocv:function:: float CvBoost::predict( const cv::Mat& sample, const cv::Mat& missing=Mat(), const cv::Range& slice=Range::all(), bool rawMode=false, bool returnSum=false ) const
.. ocv:function:: float CvBoost::predict( const CvMat* sample, const CvMat* missing=0, CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ, bool raw_mode=false, bool return_sum=false ) const .. ocv:function:: float CvBoost::predict( const CvMat* sample, const CvMat* missing=0, CvMat* weak_responses=0, CvSlice slice=CV_WHOLE_SEQ, bool raw_mode=false, bool return_sum=false ) const
.. ocv:pyfunction:: cv2.Boost.predict(sample[, missing[, slice[, raw_mode[, return_sum]]]]) -> retval .. ocv:pyfunction:: cv2.Boost.predict(sample[, missing[, slice[, rawMode[, returnSum]]]]) -> retval
:param sample: Input sample. :param sample: Input sample.
@ -183,9 +183,9 @@ Predicts a response for an input sample.
:param slice: Continuous subset of the sequence of weak classifiers to be used for prediction. By default, all the weak classifiers are used. :param slice: Continuous subset of the sequence of weak classifiers to be used for prediction. By default, all the weak classifiers are used.
:param raw_mode: Normally, it should be set to ``false``. :param rawMode: Normally, it should be set to ``false``.
:param return_sum: If ``true`` then return sum of votes instead of the class label. :param returnSum: If ``true`` then return sum of votes instead of the class label.
The method runs the sample through the trees in the ensemble and returns the output class label based on the weighted voting. The method runs the sample through the trees in the ensemble and returns the output class label based on the weighted voting.

@ -232,6 +232,8 @@ Predicts the response for input sample(s).
.. ocv:pyfunction:: cv2.SVM.predict(sample[, returnDFVal]) -> retval .. ocv:pyfunction:: cv2.SVM.predict(sample[, returnDFVal]) -> retval
.. ocv:pyfunction:: cv2.SVM.predict_all(samples[, results]) -> results
:param sample: Input sample for prediction. :param sample: Input sample for prediction.
:param samples: Input samples for prediction. :param samples: Input samples for prediction.

@ -12,6 +12,7 @@
// //
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. // Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Third party copyrights are property of their respective owners. // Third party copyrights are property of their respective owners.
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
@ -48,9 +49,32 @@ namespace cv
namespace ocl namespace ocl
{ {
////////////////////////////////////OpenCL kernel strings//////////////////////////
//extern const char *convertC3C4;
enum
{
MAT_ADD = 1,
MAT_SUB,
MAT_MUL,
MAT_DIV,
MAT_NOT,
MAT_AND,
MAT_OR,
MAT_XOR
};
class CV_EXPORTS oclMatExpr
{
public:
oclMatExpr() : a(oclMat()), b(oclMat()), op(0) {}
oclMatExpr(const oclMat& _a, const oclMat& _b, int _op)
: a(_a), b(_b), op(_op) {}
operator oclMat() const;
void assign(oclMat& m) const;
protected:
oclMat a, b;
int op;
};
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
//////////////////////////////// oclMat //////////////////////////////// //////////////////////////////// oclMat ////////////////////////////////
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -237,6 +261,12 @@ namespace cv
return *this; return *this;
} }
inline oclMat& oclMat::operator = (const oclMatExpr& expr)
{
expr.assign(*this);
return *this;
}
/* Fixme! To be supported in OpenCL later. */ /* Fixme! To be supported in OpenCL later. */
#if 0 #if 0
template <class T> inline oclMat::operator DevMem2D_<T>() const template <class T> inline oclMat::operator DevMem2D_<T>() const

@ -125,6 +125,7 @@ namespace cv
Impl *impl; Impl *impl;
}; };
class CV_EXPORTS oclMatExpr;
//////////////////////////////// oclMat //////////////////////////////// //////////////////////////////// oclMat ////////////////////////////////
class CV_EXPORTS oclMat class CV_EXPORTS oclMat
{ {
@ -158,7 +159,7 @@ namespace cv
oclMat &operator = (const oclMat &m); oclMat &operator = (const oclMat &m);
//! assignment operator. Perfom blocking upload to device. //! assignment operator. Perfom blocking upload to device.
oclMat &operator = (const Mat &m); oclMat &operator = (const Mat &m);
oclMat &operator = (const oclMatExpr& expr);
//! pefroms blocking upload data to oclMat. //! pefroms blocking upload data to oclMat.
void upload(const cv::Mat &m); void upload(const cv::Mat &m);
@ -225,6 +226,11 @@ namespace cv
oclMat operator()( Range rowRange, Range colRange ) const; oclMat operator()( Range rowRange, Range colRange ) const;
oclMat operator()( const Rect &roi ) const; oclMat operator()( const Rect &roi ) const;
oclMat& operator+=( const oclMat& m );
oclMat& operator-=( const oclMat& m );
oclMat& operator*=( const oclMat& m );
oclMat& operator/=( const oclMat& m );
//! returns true if the oclMatrix data is continuous //! returns true if the oclMatrix data is continuous
// (i.e. when there are no gaps between successive rows). // (i.e. when there are no gaps between successive rows).
// similar to CV_IS_oclMat_CONT(cvoclMat->type) // similar to CV_IS_oclMat_CONT(cvoclMat->type)
@ -297,6 +303,7 @@ namespace cv
int wholecols; int wholecols;
}; };
///////////////////// mat split and merge ///////////////////////////////// ///////////////////// mat split and merge /////////////////////////////////
//! Compose a multi-channel array from several single-channel arrays //! Compose a multi-channel array from several single-channel arrays
// Support all types // Support all types
@ -460,18 +467,23 @@ namespace cv
// supports all types // supports all types
CV_EXPORTS void bitwise_xor(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat &mask = oclMat()); CV_EXPORTS void bitwise_xor(const oclMat &src1, const oclMat &src2, oclMat &dst, const oclMat &mask = oclMat());
CV_EXPORTS void bitwise_xor(const oclMat &src1, const Scalar &s, oclMat &dst, const oclMat &mask = oclMat()); CV_EXPORTS void bitwise_xor(const oclMat &src1, const Scalar &s, oclMat &dst, const oclMat &mask = oclMat());
//! computes convolution of two images
//! Logical operators
CV_EXPORTS oclMatExpr operator ~ (const oclMat &src);
CV_EXPORTS oclMatExpr operator | (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMatExpr operator & (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMatExpr operator ^ (const oclMat &src1, const oclMat &src2);
//! Mathematics operators
CV_EXPORTS oclMatExpr operator + (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMatExpr operator - (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMatExpr operator * (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMatExpr operator / (const oclMat &src1, const oclMat &src2);
//! computes convolution of two images
//! support only CV_32FC1 type //! support only CV_32FC1 type
CV_EXPORTS void convolve(const oclMat &image, const oclMat &temp1, oclMat &result); CV_EXPORTS void convolve(const oclMat &image, const oclMat &temp1, oclMat &result);
//! Logical operators
CV_EXPORTS oclMat operator ~ (const oclMat &src);
CV_EXPORTS oclMat operator | (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMat operator & (const oclMat &src1, const oclMat &src2);
CV_EXPORTS oclMat operator ^ (const oclMat &src1, const oclMat &src2);
CV_EXPORTS void cvtColor(const oclMat &src, oclMat &dst, int code , int dcn = 0); CV_EXPORTS void cvtColor(const oclMat &src, oclMat &dst, int code , int dcn = 0);
//////////////////////////////// Filter Engine //////////////////////////////// //////////////////////////////// Filter Engine ////////////////////////////////

@ -12,6 +12,7 @@
// //
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. // Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Third party copyrights are property of their respective owners. // Third party copyrights are property of their respective owners.
// //
// @Authors // @Authors
@ -2124,32 +2125,82 @@ void cv::ocl::bitwise_xor(const oclMat &src1, const Scalar &src2, oclMat &dst, c
bitwise_scalar( src1, src2, dst, mask, kernelName, &arithm_bitwise_xor_scalar); bitwise_scalar( src1, src2, dst, mask, kernelName, &arithm_bitwise_xor_scalar);
} }
cv::ocl::oclMat cv::ocl::operator ~ (const oclMat &src) oclMatExpr cv::ocl::operator ~ (const oclMat &src)
{ {
oclMat dst; return oclMatExpr(src, oclMat(), MAT_NOT);
bitwise_not(src, dst);
return dst;
} }
cv::ocl::oclMat cv::ocl::operator | (const oclMat &src1, const oclMat &src2) oclMatExpr cv::ocl::operator | (const oclMat &src1, const oclMat &src2)
{ {
oclMat dst; return oclMatExpr(src1, src2, MAT_OR);
bitwise_or(src1, src2, dst);
return dst;
} }
cv::ocl::oclMat cv::ocl::operator & (const oclMat &src1, const oclMat &src2) oclMatExpr cv::ocl::operator & (const oclMat &src1, const oclMat &src2)
{ {
oclMat dst; return oclMatExpr(src1, src2, MAT_AND);
bitwise_and(src1, src2, dst);
return dst;
} }
cv::ocl::oclMat cv::ocl::operator ^ (const oclMat &src1, const oclMat &src2) oclMatExpr cv::ocl::operator ^ (const oclMat &src1, const oclMat &src2)
{ {
oclMat dst; return oclMatExpr(src1, src2, MAT_XOR);
bitwise_xor(src1, src2, dst); }
return dst;
cv::ocl::oclMatExpr cv::ocl::operator + (const oclMat &src1, const oclMat &src2)
{
return oclMatExpr(src1, src2, cv::ocl::MAT_ADD);
}
cv::ocl::oclMatExpr cv::ocl::operator - (const oclMat &src1, const oclMat &src2)
{
return oclMatExpr(src1, src2, cv::ocl::MAT_SUB);
}
cv::ocl::oclMatExpr cv::ocl::operator * (const oclMat &src1, const oclMat &src2)
{
return oclMatExpr(src1, src2, cv::ocl::MAT_MUL);
}
cv::ocl::oclMatExpr cv::ocl::operator / (const oclMat &src1, const oclMat &src2)
{
return oclMatExpr(src1, src2, cv::ocl::MAT_DIV);
}
void oclMatExpr::assign(oclMat& m) const
{
switch (op)
{
case MAT_ADD:
add(a, b, m);
break;
case MAT_SUB:
subtract(a, b, m);
break;
case MAT_MUL:
multiply(a, b, m);
break;
case MAT_DIV:
divide(a, b, m);
break;
case MAT_NOT:
bitwise_not(a, m);
break;
case MAT_AND:
bitwise_and(a, b, m);
break;
case MAT_OR:
bitwise_or(a, b, m);
break;
case MAT_XOR:
bitwise_xor(a, b, m);
break;
}
}
oclMatExpr::operator oclMat() const
{
oclMat m;
assign(m);
return m;
} }
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////

@ -12,10 +12,12 @@
// //
// Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved. // Copyright (C) 2010-2012, Institute Of Software Chinese Academy Of Science, all rights reserved.
// Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved. // Copyright (C) 2010-2012, Advanced Micro Devices, Inc., all rights reserved.
// Copyright (C) 2010-2012, Multicoreware, Inc., all rights reserved.
// Third party copyrights are property of their respective owners. // Third party copyrights are property of their respective owners.
// //
// @Authors // @Authors
// Niko Li, newlife20080214@gmail.com // Niko Li, newlife20080214@gmail.com
// Yao Wang, bitwangyaoyao@gmail.com
// //
// Redistribution and use in source and binary forms, with or without modification, // Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met: // are permitted provided that the following conditions are met:
@ -1020,4 +1022,27 @@ void cv::ocl::oclMat::release()
refcount = 0; refcount = 0;
} }
oclMat& cv::ocl::oclMat::operator+=( const oclMat& m )
{
add(*this, m, *this);
return *this;
}
oclMat& cv::ocl::oclMat::operator-=( const oclMat& m )
{
subtract(*this, m, *this);
return *this;
}
oclMat& cv::ocl::oclMat::operator*=( const oclMat& m )
{
multiply(*this, m, *this);
return *this;
}
oclMat& cv::ocl::oclMat::operator/=( const oclMat& m )
{
divide(*this, m, *this);
return *this;
}
#endif /* !defined (HAVE_OPENCL) */ #endif /* !defined (HAVE_OPENCL) */

@ -221,15 +221,13 @@ Implementation of the camera parameters refinement algorithm which minimizes sum
detail::WaveCorrectKind detail::WaveCorrectKind
----------------------- -----------------------
.. ocv:class:: detail::WaveCorrectKind Wave correction kind.
Wave correction kind. :: .. ocv:enum:: detail::WaveCorrectKind
.. ocv:emember:: WAVE_CORRECT_HORIZ
.. ocv:emember:: WAVE_CORRECT_VERT
enum CV_EXPORTS WaveCorrectKind
{
WAVE_CORRECT_HORIZ,
WAVE_CORRECT_VERT
};
detail::waveCorrect detail::waveCorrect
------------------- -------------------
@ -239,4 +237,4 @@ Tries to make panorama more horizontal (or vertical).
:param rmats: Camera rotation matrices. :param rmats: Camera rotation matrices.
:param kind: Correction kind, see :ocv:class:`detail::WaveCorrectKind`. :param kind: Correction kind, see :ocv:enum:`detail::WaveCorrectKind`.

@ -648,9 +648,9 @@ createOptFlow_DualTVL1
.. ocv:function:: Ptr<DenseOpticalFlow> createOptFlow_DualTVL1() .. ocv:function:: Ptr<DenseOpticalFlow> createOptFlow_DualTVL1()
The class implements the "Dual TV L1" optical flow algorithm described in [Zach2007]_ and [Javier2012]_ . The class implements the "Dual TV L1" optical flow algorithm described in [Zach2007]_ and [Javier2012]_ .
Here are important members of the class that control the algorithm, which you can set after constructing the class instance: Here are important members of the class that control the algorithm, which you can set after constructing the class instance:
.. ocv:member:: double tau .. ocv:member:: double tau

@ -27,7 +27,7 @@ def hist_curve(im):
elif im.shape[2] == 3: elif im.shape[2] == 3:
color = [ (255,0,0),(0,255,0),(0,0,255) ] color = [ (255,0,0),(0,255,0),(0,0,255) ]
for ch, col in enumerate(color): for ch, col in enumerate(color):
hist_item = cv2.calcHist([im],[ch],None,[256],[0,255]) hist_item = cv2.calcHist([im],[ch],None,[256],[0,256])
cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX) cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX)
hist=np.int32(np.around(hist_item)) hist=np.int32(np.around(hist_item))
pts = np.int32(np.column_stack((bins,hist))) pts = np.int32(np.column_stack((bins,hist)))
@ -41,7 +41,7 @@ def hist_lines(im):
print "hist_lines applicable only for grayscale images" print "hist_lines applicable only for grayscale images"
#print "so converting image to grayscale for representation" #print "so converting image to grayscale for representation"
im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) im = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
hist_item = cv2.calcHist([im],[0],None,[256],[0,255]) hist_item = cv2.calcHist([im],[0],None,[256],[0,256])
cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX) cv2.normalize(hist_item,hist_item,0,255,cv2.NORM_MINMAX)
hist=np.int32(np.around(hist_item)) hist=np.int32(np.around(hist_item))
for x,y in enumerate(hist): for x,y in enumerate(hist):

Loading…
Cancel
Save