From 54ee92e3b0a2b832399d85879c443c5ef9c0343d Mon Sep 17 00:00:00 2001 From: Marina Kolpakova Date: Thu, 28 Jun 2012 17:28:27 +0000 Subject: [PATCH] merged trunk r8815:8827 --- CMakeLists.txt | 17 ++-- android/package/AndroidManifest.xml | 15 +++ android/package/CMakeLists.txt | 95 +++++++++++++++++- android/package/info_lib/CMakeLists.txt | 1 - android/package/info_lib/jni/Android.mk | 17 ---- android/package/info_lib/jni/Application.mk | 2 - android/package/info_lib/jni/include/info.h | 3 - .../package/info_lib/jni/include/info_jni.h | 31 ------ android/package/info_lib/jni/src/info.c | 18 ---- android/package/res/drawable/icon.png | Bin 0 -> 5760 bytes android/package/res/values/strings.xml | 6 ++ .../engine/jni/NativeService/PackageInfo.h | 6 +- cmake/OpenCVDetectAndroidSDK.cmake | 20 ++-- modules/core/include/opencv2/core/core.hpp | 2 + modules/core/include/opencv2/core/mat.hpp | 3 +- .../core/include/opencv2/core/operations.hpp | 16 +++ modules/core/test/test_operations.cpp | 27 +++++ modules/java/CMakeLists.txt | 4 +- modules/nonfree/CMakeLists.txt | 4 + samples/cpp/filestorage.cpp | 32 +++++- 20 files changed, 218 insertions(+), 101 deletions(-) create mode 100644 android/package/AndroidManifest.xml delete mode 100644 android/package/info_lib/CMakeLists.txt delete mode 100644 android/package/info_lib/jni/Android.mk delete mode 100644 android/package/info_lib/jni/Application.mk delete mode 100644 android/package/info_lib/jni/include/info.h delete mode 100644 android/package/info_lib/jni/include/info_jni.h delete mode 100644 android/package/info_lib/jni/src/info.c create mode 100644 android/package/res/drawable/icon.png create mode 100644 android/package/res/values/strings.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 94bad953d..aa7968937 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,13 +151,8 @@ OCV_OPTION(BUILD_TESTS "Build accuracy & regression tests" OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSCV only)" ON ) OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC ) OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF ANDROID AND NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(BUILD_ANDROID_SERVICE "TBD" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE ) - -if(DEFINED BUILD_opencv_nonfree AND NOT BUILD_opencv_nonfree) - OCV_OPTION(BUILD_ANDROID_PACKAGE "TBD" OFF IF ANDROID ) -else() - unset(BUILD_ANDROID_PACKAGE CACHE) -endif() +OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_USE_STLPORT AND ANDROID_SOURCE_TREE ) +OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) # 3rd party libs @@ -231,15 +226,15 @@ else() endif() if(ANDROID) - set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}") - set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}") + set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}") + set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}") set(OPENCV_LIB_INSTALL_PATH sdk/native/libs/${ANDROID_NDK_ABI_NAME}) set(OPENCV_3P_LIB_INSTALL_PATH sdk/native/3rdparty/libs/${ANDROID_NDK_ABI_NAME}) set(OPENCV_CONFIG_INSTALL_PATH sdk/native/jni) set(OPENCV_INCLUDE_INSTALL_PATH sdk/native/jni/include) else() - set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib") - set(3P_LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}") + set(LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/lib") + set(3P_LIBRARY_OUTPUT_PATH "${OpenCV_BINARY_DIR}/3rdparty/lib${LIB_SUFFIX}") set(OPENCV_LIB_INSTALL_PATH lib${LIB_SUFFIX}) set(OPENCV_3P_LIB_INSTALL_PATH share/OpenCV/3rdparty/${OPENCV_LIB_INSTALL_PATH}) set(OPENCV_INCLUDE_INSTALL_PATH include) diff --git a/android/package/AndroidManifest.xml b/android/package/AndroidManifest.xml new file mode 100644 index 000000000..3b6bc7d04 --- /dev/null +++ b/android/package/AndroidManifest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/android/package/CMakeLists.txt b/android/package/CMakeLists.txt index 16b8469ed..35025b3e8 100644 --- a/android/package/CMakeLists.txt +++ b/android/package/CMakeLists.txt @@ -1,2 +1,93 @@ -#tbd -add_subdirectory(info_lib) +if(NOT ANDROID_PACKAGE_RELEASE) + set(ANDROID_PACKAGE_RELEASE 1) +endif() + +if(NOT ANDROID_PACKAGE_PLATFORM) + if(ARMEABI_V7A) + if(NEON) + set(ANDROID_PACKAGE_PLATFORM armv7a_neon) + else() + set(ANDROID_PACKAGE_PLATFORM armv7a) + endif() + elseif(ARMEABI_V6) + set(ANDROID_PACKAGE_PLATFORM armv6) + elseif(ARMEABI) + set(ANDROID_PACKAGE_PLATFORM armv5) + elseif(X86) + set(ANDROID_PACKAGE_PLATFORM x86) + elseif(MIPS) + set(ANDROID_PACKAGE_PLATFORM mips) + else() + message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM") + endif() +endif() + +if(NOT ANDROID_PACKAGE_PLATFORM_NAME) + if(ARMEABI_V7A) + if(NEON) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a with NEON") + else() + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v7a") + endif() + elseif(ARMEABI_V6) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi-v6") + elseif(ARMEABI) + set(ANDROID_PACKAGE_PLATFORM_NAME "armeabi") + elseif(X86) + set(ANDROID_PACKAGE_PLATFORM_NAME "x86") + elseif(MIPS) + set(ANDROID_PACKAGE_PLATFORM_NAME "mips") + else() + message(ERROR "Can not automatically determine the value for ANDROID_PACKAGE_PLATFORM_NAME") + endif() +endif() + +if("${ANDROID_NATIVE_API_LEVEL}" MATCHES "[1-9][0-9]*$") + set(ANDROID_SDK_VERSION ${CMAKE_MATCH_0}) +endif() + +if(NOT ANDROID_SDK_VERSION GREATER 7) + set(ANDROID_SDK_VERSION 8) +endif() + +set(PACKAGE_DIR "${OpenCV_BINARY_DIR}/package") + +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${ANDROID_MANIFEST_FILE}" "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/values/strings.xml" "${PACKAGE_DIR}/res/values/strings.xml" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/res/drawable/icon.png" "${PACKAGE_DIR}/res/drawable/icon.png" COPYONLY) + +set(target_name "OpenCV_${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_VERSION_PATCH}_binary_pack_${ANDROID_PACKAGE_PLATFORM}") +get_target_property(opencv_java_location opencv_java LOCATION) + +set(android_proj_target_files ${ANDROID_PROJECT_FILES}) +ocv_list_add_prefix(android_proj_target_files "${PACKAGE_DIR}/") +android_get_compatible_target(android_proj_sdk_target ${ANDROID_SDK_VERSION}) +set(APK_NAME "${PACKAGE_DIR}/bin/${target_name}-release-unsigned.apk") + +file(GLOB camera_wrappers "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so") +set(CAMERA_LIB_COMMANDS "") + +foreach(wrapper ${camera_wrappers}) + list(APPEND CAMERA_LIB_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/") +endforeach() + +add_custom_command( + OUTPUT "${APK_NAME}" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/libs" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/bin" + COMMAND ${CMAKE_COMMAND} -E remove_directory "${PACKAGE_DIR}/gen" + COMMAND ${CMAKE_COMMAND} -E remove ${android_proj_target_files} + COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/src" + COMMAND ${CMAKE_COMMAND} -E make_directory "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" + ${CAMERA_LIB_COMMANDS} + COMMAND ${CMAKE_COMMAND} -E copy "${opencv_java_location}" "${PACKAGE_DIR}/libs/${ANDROID_NDK_ABI_NAME}/" + COMMAND ${ANDROID_EXECUTABLE} --silent update project --path "${PACKAGE_DIR}" --target "${android_proj_sdk_target}" --name "${target_name}" + COMMAND ${ANT_EXECUTABLE} -q -noinput -k release + COMMAND ${CMAKE_COMMAND} -E touch "${APK_NAME}" + WORKING_DIRECTORY "${PACKAGE_DIR}" + MAIN_DEPENDENCY "${opencv_java_location}" + DEPENDS "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}" "${PACKAGE_DIR}/res/values/strings.xml" "${PACKAGE_DIR}/res/drawable/icon.png" ${camera_wrappers} + ) + +add_custom_target(android_package ALL SOURCES "${APK_NAME}" ) +add_dependencies(android_package opencv_java) \ No newline at end of file diff --git a/android/package/info_lib/CMakeLists.txt b/android/package/info_lib/CMakeLists.txt deleted file mode 100644 index 7e9e9fe11..000000000 --- a/android/package/info_lib/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -#tbd diff --git a/android/package/info_lib/jni/Android.mk b/android/package/info_lib/jni/Android.mk deleted file mode 100644 index 89cc46279..000000000 --- a/android/package/info_lib/jni/Android.mk +++ /dev/null @@ -1,17 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := \ - src/info.c - -LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/include \ - $(TOP)/frameworks/base/core/jni - -LOCAL_PRELINK_MODULE := false - -LOCAL_MODULE := libopencvinfo - -include $(BUILD_SHARED_LIBRARY) diff --git a/android/package/info_lib/jni/Application.mk b/android/package/info_lib/jni/Application.mk deleted file mode 100644 index c1d3a3fe6..000000000 --- a/android/package/info_lib/jni/Application.mk +++ /dev/null @@ -1,2 +0,0 @@ -APP_ABI := armeabi-v7a x86 -APP_PLATFORM := android-8 \ No newline at end of file diff --git a/android/package/info_lib/jni/include/info.h b/android/package/info_lib/jni/include/info.h deleted file mode 100644 index b9ba35fba..000000000 --- a/android/package/info_lib/jni/include/info.h +++ /dev/null @@ -1,3 +0,0 @@ -// Function return list of shared libs seporated with ";" symbol -// in load order -const char* GetLibraryList(); \ No newline at end of file diff --git a/android/package/info_lib/jni/include/info_jni.h b/android/package/info_lib/jni/include/info_jni.h deleted file mode 100644 index 28df21758..000000000 --- a/android/package/info_lib/jni/include/info_jni.h +++ /dev/null @@ -1,31 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_opencv_android_OpenCVLoader */ - -#ifndef _Included_org_opencv_android_OpenCVLoader -#define _Included_org_opencv_android_OpenCVLoader -#ifdef __cplusplus -extern "C" { -#endif -#undef org_opencv_android_OpenCVLoader_Success -#define org_opencv_android_OpenCVLoader_Success 0L -#undef org_opencv_android_OpenCVLoader_NoService -#define org_opencv_android_OpenCVLoader_NoService 1L -#undef org_opencv_android_OpenCVLoader_RestartRequired -#define org_opencv_android_OpenCVLoader_RestartRequired 2L -#undef org_opencv_android_OpenCVLoader_MarketError -#define org_opencv_android_OpenCVLoader_MarketError 3L -#undef org_opencv_android_OpenCVLoader_InitFailed -#define org_opencv_android_OpenCVLoader_InitFailed 255L -/* - * Class: org_opencv_android_OpenCVLoader - * Method: GetLibraryList - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/android/package/info_lib/jni/src/info.c b/android/package/info_lib/jni/src/info.c deleted file mode 100644 index 6d445de8f..000000000 --- a/android/package/info_lib/jni/src/info.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "info.h" -#include - -#ifndef LIB_STRING - #define LIB_STRING "libtbb.so;libopencv_java.so" -#endif - -const char* GetLibraryList() -{ - return LIB_STRING; -} - -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList(JNIEnv* jenv, jclass clazz) -{ - jstring result = (*jenv)->NewStringUTF(jenv, LIB_STRING); - - return result; -} \ No newline at end of file diff --git a/android/package/res/drawable/icon.png b/android/package/res/drawable/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4e828bafd86aae740c6d4da0af6cc67653b535a5 GIT binary patch literal 5760 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 V9}r2j|9cq#=xN{7s@8Of{2yTISoHt^ literal 0 HcmV?d00001 diff --git a/android/package/res/values/strings.xml b/android/package/res/values/strings.xml new file mode 100644 index 000000000..c8f59be46 --- /dev/null +++ b/android/package/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + OCV @OPENCV_VERSION_MAJOR@.@OPENCV_VERSION_MINOR@ binary pack for @ANDROID_PACKAGE_PLATFORM_NAME@ + + \ No newline at end of file diff --git a/android/service/engine/jni/NativeService/PackageInfo.h b/android/service/engine/jni/NativeService/PackageInfo.h index ac82d37eb..d9d93b521 100644 --- a/android/service/engine/jni/NativeService/PackageInfo.h +++ b/android/service/engine/jni/NativeService/PackageInfo.h @@ -8,7 +8,7 @@ #define ARCH_X64_NAME "x64" #define ARCH_ARMv5_NAME "armv5" #define ARCH_ARMv6_NAME "armv6" -#define ARCH_ARMv7_NAME "armv7" +#define ARCH_ARMv7_NAME "armv7a" #define ARCH_ARMv8_NAME "armv8" #define FEATURES_HAS_VFPv3d16_NAME "vfpv3d16" @@ -26,7 +26,7 @@ class PackageInfo -{ +{ public: PackageInfo(const std::string& version, int platform, int cpu_id); PackageInfo(const std::string& fullname, const std::string& install_path, const std::string& package_version = "0.0"); @@ -38,7 +38,7 @@ public: bool operator==(const PackageInfo& package) const; static const std::map PlatformNameMap; bool IsValid() const; - + protected: static std::map InitPlatformNameMap(); std::string Version; diff --git a/cmake/OpenCVDetectAndroidSDK.cmake b/cmake/OpenCVDetectAndroidSDK.cmake index 95b5d6910..f1bc5499f 100644 --- a/cmake/OpenCVDetectAndroidSDK.cmake +++ b/cmake/OpenCVDetectAndroidSDK.cmake @@ -175,6 +175,7 @@ macro(android_get_compatible_target VAR) endif() endmacro() +unset(__android_project_chain CACHE) #add_android_project(target_name ${path} NATIVE_DEPS opencv_core LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 11) macro(add_android_project target path) # parse arguments @@ -288,17 +289,18 @@ macro(add_android_project target path) COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk WORKING_DIRECTORY "${android_proj_bin_dir}" MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" - DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME}) + DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME} ${__android_project_chain}) else() - add_custom_command( - OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk" - COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug - COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk - WORKING_DIRECTORY "${android_proj_bin_dir}" - MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" - DEPENDS "${OpenCV_BINARY_DIR}/bin/classes.jar" opencv_java # as we are part of OpenCV we can just force this dependency - DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME}) + add_custom_command( + OUTPUT "${android_proj_bin_dir}/bin/${target}-debug.apk" + COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug + COMMAND ${CMAKE_COMMAND} -E touch "${android_proj_bin_dir}/bin/${target}-debug.apk" # needed because ant does not update the timestamp of updated apk + WORKING_DIRECTORY "${android_proj_bin_dir}" + MAIN_DEPENDENCY "${android_proj_bin_dir}/${ANDROID_MANIFEST_FILE}" + DEPENDS "${OpenCV_BINARY_DIR}/bin/.classes.jar.dephelper" opencv_java # as we are part of OpenCV we can just force this dependency + DEPENDS ${android_proj_file_deps} ${JNI_LIB_NAME} ${__android_project_chain}) endif() + set(__android_project_chain ${target} CACHE INTERNAL "auxiliary variable used for Android progects chaining") unset(JNI_LIB_NAME) diff --git a/modules/core/include/opencv2/core/core.hpp b/modules/core/include/opencv2/core/core.hpp index f4b60fcf3..e5be8f70d 100644 --- a/modules/core/include/opencv2/core/core.hpp +++ b/modules/core/include/opencv2/core/core.hpp @@ -4320,6 +4320,7 @@ public: CV_WRAP_AS(setMat) void set(const string& name, const Mat& value); CV_WRAP_AS(setMatVector) void set(const string& name, const vector& value); CV_WRAP_AS(setAlgorithm) void set(const string& name, const Ptr& value); + template void set(const string& name, const Ptr<_Tp>& value); void set(const char* name, int value); void set(const char* name, double value); @@ -4328,6 +4329,7 @@ public: void set(const char* name, const Mat& value); void set(const char* name, const vector& value); void set(const char* name, const Ptr& value); + template void set(const char* name, const Ptr<_Tp>& value); CV_WRAP string paramHelp(const string& name) const; int paramType(const char* name) const; diff --git a/modules/core/include/opencv2/core/mat.hpp b/modules/core/include/opencv2/core/mat.hpp index 1c79f50c1..ccc02571e 100644 --- a/modules/core/include/opencv2/core/mat.hpp +++ b/modules/core/include/opencv2/core/mat.hpp @@ -759,7 +759,8 @@ inline SVD::SVD() {} inline SVD::SVD( InputArray m, int flags ) { operator ()(m, flags); } inline void SVD::solveZ( InputArray m, OutputArray _dst ) { - SVD svd(m); + Mat mtx = m.getMat(); + SVD svd(mtx, (mtx.rows >= mtx.cols ? 0 : SVD::FULL_UV)); _dst.create(svd.vt.cols, 1, svd.vt.type()); Mat dst = _dst.getMat(); svd.vt.row(svd.vt.rows-1).reshape(1,svd.vt.cols).copyTo(dst); diff --git a/modules/core/include/opencv2/core/operations.hpp b/modules/core/include/opencv2/core/operations.hpp index c7bc94ca1..1f8184890 100644 --- a/modules/core/include/opencv2/core/operations.hpp +++ b/modules/core/include/opencv2/core/operations.hpp @@ -3842,6 +3842,22 @@ template inline Ptr<_Tp> Algorithm::create(const string& name) return _create(name).ptr<_Tp>(); } +template +void Algorithm::set(const char* _name, const Ptr<_Tp>& value) +{ + Ptr algo_ptr = value. template ptr(); + if (algo_ptr.empty()) { + CV_Error( CV_StsUnsupportedFormat, "unknown/unsupported Ptr type of the second parameter of the method Algorithm::set"); + } + info()->set(this, _name, ParamType::type, &algo_ptr); +} +template +void Algorithm::set(const string& _name, const Ptr<_Tp>& value) +{ + this->set<_Tp>(_name.c_str(), value); +} + + template inline typename ParamType<_Tp>::member_type Algorithm::get(const string& _name) const { typename ParamType<_Tp>::member_type value; diff --git a/modules/core/test/test_operations.cpp b/modules/core/test/test_operations.cpp index 5297f95f2..fd9c42b29 100644 --- a/modules/core/test/test_operations.cpp +++ b/modules/core/test/test_operations.cpp @@ -75,6 +75,7 @@ protected: bool TestVec(); bool TestMatxMultiplication(); bool TestSubMatAccess(); + bool TestSVD(); bool operations1(); void checkDiff(const Mat& m1, const Mat& m2, const string& s) @@ -934,6 +935,29 @@ bool CV_OperationsTest::operations1() return true; } + +bool CV_OperationsTest::TestSVD() +{ + try + { + Mat A = (Mat_(3,4) << 1, 2, -1, 4, 2, 4, 3, 5, -1, -2, 6, 7); + Mat x; + SVD::solveZ(A,x); + if( norm(A*x, CV_C) > FLT_EPSILON ) + throw test_excep(); + + SVD svd(A, SVD::FULL_UV); + if( norm(A*svd.vt.row(3).t(), CV_C) > FLT_EPSILON ) + throw test_excep(); + } + catch(const test_excep&) + { + ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); + return false; + } + return true; +} + void CV_OperationsTest::run( int /* start_from */) { if (!TestMat()) @@ -959,6 +983,9 @@ void CV_OperationsTest::run( int /* start_from */) if (!TestSubMatAccess()) return; + + if (!TestSVD()) + return; if (!operations1()) return; diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 020abb282..278ee8a80 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -248,9 +248,9 @@ if(ANDROID) # build the library project # normally we should do this after a native part, but for a library project we can build the java part first add_custom_command( - OUTPUT "${OpenCV_BINARY_DIR}/bin/classes.jar" + OUTPUT "${OpenCV_BINARY_DIR}/bin/classes.jar" "${OpenCV_BINARY_DIR}/bin/.classes.jar.dephelper" COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug - COMMAND ${CMAKE_COMMAND} -E touch "${OpenCV_BINARY_DIR}/bin/classes.jar" # needed because ant does not update the timestamp of updated jar + COMMAND ${CMAKE_COMMAND} -E touch "${OpenCV_BINARY_DIR}/bin/.classes.jar.dephelper" # can not rely on classes.jar because different versions of SDK update timestamp at different times WORKING_DIRECTORY "${OpenCV_BINARY_DIR}" DEPENDS ${lib_proj_files} ${lib_target_files} ${java_files} COMMENT "Building OpenCV Android library project" diff --git a/modules/nonfree/CMakeLists.txt b/modules/nonfree/CMakeLists.txt index 873532c3f..8c7bd0efd 100644 --- a/modules/nonfree/CMakeLists.txt +++ b/modules/nonfree/CMakeLists.txt @@ -1,2 +1,6 @@ +if(BUILD_ANDROID_PACKAGE) + ocv_module_disable(nonfree) +endif() + set(the_description "Functionality with possible limitations on the use") ocv_define_module(nonfree opencv_imgproc opencv_features2d) diff --git a/samples/cpp/filestorage.cpp b/samples/cpp/filestorage.cpp index fa48fe63b..45bf9fc6f 100644 --- a/samples/cpp/filestorage.cpp +++ b/samples/cpp/filestorage.cpp @@ -150,7 +150,37 @@ int main(int ac, char** av) } - cout << "Try opening " << filename << " to see the serialized data." << endl; + cout << "Try opening " << filename << " to see the serialized data." << endl << endl; + + //read from string + { + cout << "Read data from string\n"; + string dataString = + "%YAML:1.0\n" + "mdata:\n" + " A: 97\n" + " X: 3.1415926535897931e+00\n" + " id: mydata1234\n"; + MyData m; + FileStorage fs(dataString, FileStorage::READ | FileStorage::MEMORY); + cout << "attempting to read mdata_b from string\n"; //Show default behavior for empty matrix + fs["mdata"] >> m; + cout << "read mdata\n"; + cout << m << endl; + } + + //write to string + { + cout << "Write data to string\n"; + FileStorage fs(filename, FileStorage::WRITE | FileStorage::MEMORY | FileStorage::FORMAT_YAML); + + cout << "writing MyData struct\n"; + MyData m(1); + fs << "mdata" << m; + cout << m << endl; + string createdString = fs.releaseAndGetString(); + cout << "Created string:\n" << createdString << "\n"; + } return 0; }