diff --git a/3rdparty/libwebp/CMakeLists.txt b/3rdparty/libwebp/CMakeLists.txt index a7271796a0..74519ec820 100644 --- a/3rdparty/libwebp/CMakeLists.txt +++ b/3rdparty/libwebp/CMakeLists.txt @@ -54,6 +54,6 @@ if(ENABLE_SOLUTION_FOLDERS) endif() if(NOT BUILD_SHARED_LIBS) - ocv_install_target(${WEBP_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main) + ocv_install_target(${WEBP_LIBRARY} EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev) endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ab4e7f8e3..d9a17b3820 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,8 +222,7 @@ OCV_OPTION(BUILD_WITH_DEBUG_INFO "Include debug info into debug libs (not MSC OCV_OPTION(BUILD_WITH_STATIC_CRT "Enables use of staticaly linked CRT for staticaly linked OpenCV" ON IF MSVC ) OCV_OPTION(BUILD_WITH_DYNAMIC_IPP "Enables dynamic linking of IPP (only for standalone IPP)" OFF ) OCV_OPTION(BUILD_FAT_JAVA_LIB "Create fat java wrapper containing the whole OpenCV library" ON IF NOT BUILD_SHARED_LIBS AND CMAKE_COMPILER_IS_GNUCXX ) -OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID AND ANDROID_SOURCE_TREE ) -OCV_OPTION(BUILD_ANDROID_PACKAGE "Build platform-specific package for Google Play" OFF IF ANDROID ) +OCV_OPTION(BUILD_ANDROID_SERVICE "Build OpenCV Manager for Google Play" OFF IF ANDROID ) OCV_OPTION(BUILD_CUDA_STUBS "Build CUDA modules stubs when no CUDA SDK" OFF IF (NOT IOS) ) # 3rd party libs @@ -638,14 +637,6 @@ if(ANDROID) add_subdirectory(platforms/android/service) endif() -if(BUILD_ANDROID_PACKAGE) - add_subdirectory(platforms/android/package) -endif() - -if (ANDROID) - add_subdirectory(platforms/android/libinfo) -endif() - # ---------------------------------------------------------------------------- # Finalization: generate configuration-based files # ---------------------------------------------------------------------------- @@ -817,7 +808,7 @@ if(ANDROID) status(" Android toolchain:" "${ANDROID_STANDALONE_TOOLCHAIN}") endif() status(" android tool:" ANDROID_EXECUTABLE THEN "${ANDROID_EXECUTABLE} (${ANDROID_TOOLS_Pkg_Desc})" ELSE NO) - status(" Google Play package:" BUILD_ANDROID_PACKAGE THEN YES ELSE NO) + status(" Google Play manager:" BUILD_ANDROID_SERVICE THEN YES ELSE NO) status(" Android examples:" BUILD_ANDROID_EXAMPLES AND CAN_BUILD_ANDROID_PROJECTS THEN YES ELSE NO) endif() @@ -933,15 +924,6 @@ if(DEFINED WITH_1394) status(" DC1394 2.x:" HAVE_DC1394_2 THEN "YES (ver ${ALIASOF_libdc1394-2_VERSION})" ELSE NO) endif(DEFINED WITH_1394) -if(ANDROID) - if(HAVE_opencv_androidcamera) - status(" AndroidNativeCamera:" BUILD_ANDROID_CAMERA_WRAPPER - THEN "YES, build for Android${ANDROID_VERSION}" ELSE "YES, use prebuilt libraries") - else() - status(" AndroidNativeCamera:" "NO (native camera requires Android API level 8 or higher)") - endif() -endif() - if(DEFINED WITH_AVFOUNDATION) status(" AVFoundation:" WITH_AVFOUNDATION THEN YES ELSE NO) endif(DEFINED WITH_AVFOUNDATION) diff --git a/cmake/OpenCVDetectAndroidSDK.cmake b/cmake/OpenCVDetectAndroidSDK.cmake index d97e9ec74f..3bfb10e2d6 100644 --- a/cmake/OpenCVDetectAndroidSDK.cmake +++ b/cmake/OpenCVDetectAndroidSDK.cmake @@ -180,7 +180,7 @@ 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 - set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST) + set(android_proj_arglist NATIVE_DEPS LIBRARY_DEPS SDK_TARGET IGNORE_JAVA IGNORE_MANIFEST COPY_LIBS) set(__varname "android_proj_") foreach(v ${android_proj_arglist}) set(${__varname}${v} "") @@ -334,14 +334,17 @@ macro(add_android_project target path) add_dependencies(${target} ${android_proj_native_deps}) endif() - if(ANDROID_EXAMPLES_WITH_LIBS) + if (android_proj_COPY_LIBS OR ANDROID_EXAMPLES_WITH_LIBS) + message(STATUS "Android project with libs: " ${target}) add_custom_target( ${target}_copy_libs COMMAND ${CMAKE_COMMAND} -DSRC_DIR=${OpenCV_BINARY_DIR}/lib -DDST_DIR=${android_proj_bin_dir}/libs -P ${OpenCV_SOURCE_DIR}/cmake/copyAndroidLibs.cmake WORKING_DIRECTORY ${OpenCV_BINARY_DIR}/lib - DEPENDS "${OpenCV_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java ) add_dependencies(${target} ${target}_copy_libs) + if (ANDROID_EXAMPLES_WITH_LIBS) + add_dependencies(${target}_copy_libs "${OpenCV_BINARY_DIR}/bin/classes.jar.dephelper" opencv_java) + endif() endif() if(__android_project_chain) diff --git a/cmake/OpenCVFindIPP.cmake b/cmake/OpenCVFindIPP.cmake index 76c73f3e01..71001d9c6c 100644 --- a/cmake/OpenCVFindIPP.cmake +++ b/cmake/OpenCVFindIPP.cmake @@ -148,7 +148,7 @@ macro(ipp_detect_version) list(APPEND IPP_LIBRARIES ipp${name}) # CMake doesn't support "install(TARGETS ${IPP_PREFIX}${name} " command with imported targets install(FILES ${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX} - DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT main) + DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev) string(TOUPPER ${name} uname) set(IPP${uname}_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${OPENCV_3P_LIB_INSTALL_PATH}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) set(IPP${uname}_LOCATION_PATH "${IPP_LIBRARY_DIR}/${IPP_LIB_PREFIX}${IPP_PREFIX}${name}${IPP_SUFFIX}${IPP_LIB_SUFFIX}" CACHE INTERNAL "" FORCE) diff --git a/cmake/OpenCVGenAndroidMK.cmake b/cmake/OpenCVGenAndroidMK.cmake index d6f902b0f0..627d860169 100644 --- a/cmake/OpenCVGenAndroidMK.cmake +++ b/cmake/OpenCVGenAndroidMK.cmake @@ -19,29 +19,6 @@ if(ANDROID) set(OPENCV_STATIC_LIBTYPE_CONFIGMAKE ${OPENCV_LIBTYPE_CONFIGMAKE}) endif() - # setup lists of camera libs - foreach(abi ARMEABI ARMEABI_V7A X86 MIPS) - ANDROID_GET_ABI_RAWNAME(${abi} ndkabi) - if(BUILD_ANDROID_CAMERA_WRAPPER) - if(ndkabi STREQUAL ANDROID_NDK_ABI_NAME) - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "native_camera_r${ANDROID_VERSION}") - else() - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "") - endif() - elseif(HAVE_opencv_androidcamera) - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "") - file(GLOB OPENCV_CAMERA_LIBS "${OpenCV_SOURCE_DIR}/3rdparty/lib/${ndkabi}/libnative_camera_r*.so") - if(OPENCV_CAMERA_LIBS) - list(SORT OPENCV_CAMERA_LIBS) - endif() - foreach(cam_lib ${OPENCV_CAMERA_LIBS}) - get_filename_component(cam_lib "${cam_lib}" NAME) - string(REGEX REPLACE "lib(native_camera_r[0-9]+\\.[0-9]+\\.[0-9]+)\\.so" "\\1" cam_lib "${cam_lib}") - set(OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE "${OPENCV_CAMERA_LIBS_${abi}_CONFIGCMAKE} ${cam_lib}") - endforeach() - endif() - endforeach() - # build the list of opencv libs and dependencies for all modules ocv_get_all_libs(OPENCV_MODULES_CONFIGMAKE OPENCV_EXTRA_COMPONENTS_CONFIGMAKE OPENCV_3RDPARTY_COMPONENTS_CONFIGMAKE) @@ -61,7 +38,7 @@ if(ANDROID) endforeach() if(BUILD_FAT_JAVA_LIB) - set(OPENCV_LIBS_CONFIGMAKE java) + set(OPENCV_LIBS_CONFIGMAKE java3) else() set(OPENCV_LIBS_CONFIGMAKE "${OPENCV_MODULES_CONFIGMAKE}") endif() diff --git a/cmake/templates/OpenCV.mk.in b/cmake/templates/OpenCV.mk.in index 33d36601a1..acbb763c94 100644 --- a/cmake/templates/OpenCV.mk.in +++ b/cmake/templates/OpenCV.mk.in @@ -54,23 +54,6 @@ else endif endif -ifeq ($(OPENCV_CAMERA_MODULES),on) - ifeq ($(TARGET_ARCH_ABI),armeabi) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_ARMEABI_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),armeabi-v7a) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_ARMEABI_V7A_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),x86) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_X86_CONFIGCMAKE@ - endif - ifeq ($(TARGET_ARCH_ABI),mips) - OPENCV_CAMERA_MODULES:=@OPENCV_CAMERA_LIBS_MIPS_CONFIGCMAKE@ - endif -else - OPENCV_CAMERA_MODULES:= -endif - ifeq ($(OPENCV_LIB_TYPE),SHARED) OPENCV_LIB_SUFFIX:=so else @@ -92,20 +75,12 @@ define add_opencv_3rdparty_component include $(PREBUILT_STATIC_LIBRARY) endef -define add_opencv_camera_module - include $(CLEAR_VARS) - LOCAL_MODULE:=$1 - LOCAL_SRC_FILES:=$(OPENCV_LIBS_DIR)/lib$1.so - include $(PREBUILT_SHARED_LIBRARY) -endef - ifeq ($(OPENCV_MK_$(OPENCV_TARGET_ARCH_ABI)_ALREADY_INCLUDED),) ifeq ($(OPENCV_INSTALL_MODULES),on) $(foreach module,$(OPENCV_LIBS),$(eval $(call add_opencv_module,$(module)))) endif $(foreach module,$(OPENCV_3RDPARTY_COMPONENTS),$(eval $(call add_opencv_3rdparty_component,$(module)))) - $(foreach module,$(OPENCV_CAMERA_MODULES),$(eval $(call add_opencv_camera_module,$(module)))) ifneq ($(OPENCV_BASEDIR),) OPENCV_LOCAL_C_INCLUDES += $(foreach mod, $(OPENCV_MODULES), $(OPENCV_BASEDIR)/modules/$(mod)/include) diff --git a/cmake/templates/OpenCVConfig.cmake.in b/cmake/templates/OpenCVConfig.cmake.in index a3cbbc08c7..e5904aba37 100644 --- a/cmake/templates/OpenCVConfig.cmake.in +++ b/cmake/templates/OpenCVConfig.cmake.in @@ -34,7 +34,6 @@ # - OpenCV_LIB_COMPONENTS : Present OpenCV modules list # - OpenCV_USE_MANGLED_PATHS : Mangled OpenCV path flag # - OpenCV_MODULES_SUFFIX : The suffix for OpenCVModules-XXX.cmake file -# - OpenCV_HAVE_ANDROID_CAMERA : Presence of Android native camera wrappers # # Deprecated variables: # - OpenCV_VERSION_TWEAK : Always "0" @@ -127,9 +126,6 @@ if(NOT WIN32 OR ANDROID) endif() endif() -# Presence of Android native camera wrappers -set(OpenCV_HAVE_ANDROID_CAMERA @HAVE_opencv_androidcamera@) - # ====================================================== # Include directories to add to the user project: # ====================================================== @@ -324,24 +320,6 @@ foreach(__opttype OPT DBG) endif() endforeach() -# ============================================================== -# Android camera helper macro -# ============================================================== -if(OpenCV_HAVE_ANDROID_CAMERA) - macro(COPY_NATIVE_CAMERA_LIBS target) - get_target_property(target_location ${target} LOCATION) - get_filename_component(target_location "${target_location}" PATH) - file(GLOB camera_wrappers "${OpenCV_LIB_DIR_OPT}/libnative_camera_r*.so") - foreach(wrapper ${camera_wrappers}) - add_custom_command( - TARGET ${target} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${target_location}" - ) - endforeach() - endmacro() -endif() - # ============================================================== # Compatibility stuff # ============================================================== diff --git a/doc/tutorials/introduction/android_binary_package/O4A_SDK.markdown b/doc/tutorials/introduction/android_binary_package/O4A_SDK.markdown index d123c697f6..be745847e8 100644 --- a/doc/tutorials/introduction/android_binary_package/O4A_SDK.markdown +++ b/doc/tutorials/introduction/android_binary_package/O4A_SDK.markdown @@ -185,9 +185,7 @@ corresponding section of @ref tutorial_android_dev_intro. **warning** -Please consider that some samples use Android Java Camera API, which is accessible - with an AVD. But most of samples use OpenCV Native Camera which **may not work** with an - emulator. +Please consider that some samples use Android Java Camera API, which is accessible with an AVD. @note Recent *Android SDK tools, revision 19+* can run ARM v7a OS images but they available not for all Android versions. diff --git a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.markdown b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.markdown index d8d0530997..838dbc8441 100644 --- a/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.markdown +++ b/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.markdown @@ -356,10 +356,7 @@ from camera and implements CvCameraViewListener2 interface to get frames from ca First of all we create our application view using xml layout. Our layout consists of the only one full screen component of class org.opencv.android.JavaCameraView. This class is implemented inside OpenCV library. It is inherited from CameraBridgeViewBase, that extends SurfaceView and uses -standard Android camera API. Alternatively you can use org.opencv.android.NativeCameraView class, -that implements the same interface, but uses VideoCapture class as camera access back-end. -opencv:show_fps="true" and opencv:camera_id="any" options enable FPS message and allow to use any -camera on device. Application tries to use back camera first. +standard Android camera API. After creating layout we need to implement Activity class. OpenCV initialization process has been already discussed above. In this sample we use asynchronous initialization. Implementation of diff --git a/modules/androidcamera/CMakeLists.txt b/modules/androidcamera/CMakeLists.txt deleted file mode 100644 index 3858ba9f6d..0000000000 --- a/modules/androidcamera/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -IF(NOT ANDROID OR ANDROID_NATIVE_API_LEVEL LESS 8) - ocv_module_disable(androidcamera) -ENDIF() - -set(the_description "Auxiliary module for Android native camera support") -set(OPENCV_MODULE_TYPE STATIC) - -ocv_define_module(androidcamera INTERNAL opencv_core log dl) -ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}/camera_wrapper" "${OpenCV_SOURCE_DIR}/platforms/android/service/engine/jni/include") - -# Android source tree for native camera -SET (ANDROID_SOURCE_TREE "ANDROID_SOURCE_TREE-NOTFOUND" CACHE PATH - "Path to Android source tree. Set this variable to path to your Android sources to compile libnative_camera_rx.x.x.so for your Android") -SET(BUILD_ANDROID_CAMERA_WRAPPER OFF) -if(ANDROID_SOURCE_TREE) - FILE(STRINGS "${ANDROID_SOURCE_TREE}/development/sdk/platform_source.properties" ANDROID_VERSION REGEX "Platform\\.Version=[0-9]+\\.[0-9]+(\\.[0-9]+)?" ) - string(REGEX REPLACE "Platform\\.Version=([0-9]+\\.[0-9]+(\\.[0-9]+)?)" "\\1" ANDROID_VERSION "${ANDROID_VERSION}") - if(ANDROID_VERSION MATCHES "^[0-9]+\\.[0-9]+$") - SET(ANDROID_VERSION "${ANDROID_VERSION}.0") - endif() - if(NOT "${ANDROID_VERSION}" STREQUAL "") - SET(BUILD_ANDROID_CAMERA_WRAPPER ON) - set(ANDROID_VERSION "${ANDROID_VERSION}" CACHE INTERNAL "Version of Android source tree") - endif() -endif() -set(BUILD_ANDROID_CAMERA_WRAPPER ${BUILD_ANDROID_CAMERA_WRAPPER} CACHE INTERNAL "Build new wrapper for Android") -MARK_AS_ADVANCED(ANDROID_SOURCE_TREE) - -# process wrapper libs -if(BUILD_ANDROID_CAMERA_WRAPPER) - add_subdirectory(camera_wrapper) -else() - file(GLOB camera_wrappers "${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/lib/${ANDROID_NDK_ABI_NAME}/libnative_camera_r*.so") - - foreach(wrapper ${camera_wrappers}) - ADD_CUSTOM_COMMAND( - TARGET ${the_module} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${wrapper}" "${LIBRARY_OUTPUT_PATH}" - ) - get_filename_component(wrapper_name "${wrapper}" NAME) - install(FILES "${LIBRARY_OUTPUT_PATH}/${wrapper_name}" - DESTINATION ${OPENCV_LIB_INSTALL_PATH} - COMPONENT libs) - endforeach() -endif() diff --git a/modules/androidcamera/camera_wrapper/CMakeLists.txt b/modules/androidcamera/camera_wrapper/CMakeLists.txt deleted file mode 100644 index c306db1de5..0000000000 --- a/modules/androidcamera/camera_wrapper/CMakeLists.txt +++ /dev/null @@ -1,66 +0,0 @@ -SET (the_target native_camera_r${ANDROID_VERSION}) - -project(${the_target}) - -link_directories("${ANDROID_SOURCE_TREE}/out/target/product/generic/system/lib") - -if (ANDROID_VERSION VERSION_LESS "4.1") - INCLUDE_DIRECTORIES(BEFORE - ${ANDROID_SOURCE_TREE} - ${ANDROID_SOURCE_TREE}/frameworks/base/include/ui - ${ANDROID_SOURCE_TREE}/frameworks/base/include/surfaceflinger - ${ANDROID_SOURCE_TREE}/frameworks/base/include/camera - ${ANDROID_SOURCE_TREE}/frameworks/base/include/media - ${ANDROID_SOURCE_TREE}/frameworks/base/include - ${ANDROID_SOURCE_TREE}/system/core/include - ${ANDROID_SOURCE_TREE}/hardware/libhardware/include - ${ANDROID_SOURCE_TREE}/frameworks/base/native/include - ${ANDROID_SOURCE_TREE}/frameworks/base/opengl/include - ) -else() - INCLUDE_DIRECTORIES(BEFORE - ${ANDROID_SOURCE_TREE} - ${ANDROID_SOURCE_TREE}/frameworks/native/include - ${ANDROID_SOURCE_TREE}/frameworks/av/include - ${ANDROID_SOURCE_TREE}/system/core/include - ${ANDROID_SOURCE_TREE}/hardware/libhardware/include - ) -endif() - -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE) - -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}") -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}") -SET(CMAKE_C_FLAGS_RELEASE "") -SET(CMAKE_CXX_FLAGS_RELEASE "") - -string(REPLACE "-O3" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -string(REPLACE "-frtti" "-fno-rtti" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") # because Android libraries are built without rtti - -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -fno-strict-aliasing -finline-limit=64 -fuse-cxa-atexit" ) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -fno-strict-aliasing -finline-limit=64 -fuse-cxa-atexit") -SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,noexecstack") - -ADD_LIBRARY(${the_target} SHARED camera_wrapper.h camera_wrapper.cpp) - -string(REGEX REPLACE "[.]" "_" LIBRARY_DEF ${ANDROID_VERSION}) -add_definitions(-DANDROID_r${LIBRARY_DEF}) - -ocv_target_link_libraries(${the_target} c m dl utils camera_client binder log) - -if(NOT ANDROID_VERSION VERSION_LESS "3.0.0") - target_link_libraries(${the_target} gui ) -endif() - -SET_TARGET_PROPERTIES(${the_target} PROPERTIES - OUTPUT_NAME "${the_target}" - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - ) - -if (NOT (CMAKE_BUILD_TYPE MATCHES "Debug")) - ADD_CUSTOM_COMMAND( TARGET ${the_target} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${LIBRARY_OUTPUT_PATH}/lib${the_target}.so" ) -endif() - - -install(TARGETS ${the_target} LIBRARY DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs) diff --git a/modules/androidcamera/camera_wrapper/android.3.0.1/Camera.patch b/modules/androidcamera/camera_wrapper/android.3.0.1/Camera.patch deleted file mode 100644 index 8a77126317..0000000000 --- a/modules/androidcamera/camera_wrapper/android.3.0.1/Camera.patch +++ /dev/null @@ -1,70 +0,0 @@ -*** src2.3.3/frameworks/base/include/camera/Camera.h 2011-04-04 20:18:36.718480237 +0400 ---- src_mock3.0.1/frameworks/base/include/camera/Camera.h 2012-01-15 20:51:36.000000000 +0400 -*************** -*** 20,25 **** ---- 20,27 ---- - #include - #include - -+ #include -+ - namespace android { - - class ISurface; -*************** -*** 76,81 **** ---- 78,90 ---- - CAMERA_MSG_POSTVIEW_FRAME = 0x040, - CAMERA_MSG_RAW_IMAGE = 0x080, - CAMERA_MSG_COMPRESSED_IMAGE = 0x100, -+ -+ #ifdef OMAP_ENHANCEMENT -+ -+ CAMERA_MSG_BURST_IMAGE = 0x200, -+ -+ #endif -+ - CAMERA_MSG_ALL_MSGS = 0x1FF - }; - -*************** -*** 144,150 **** ---- 153,164 ---- - public: - virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2) = 0; - virtual void postData(int32_t msgType, const sp& dataPtr) = 0; -+ #ifdef OMAP_ENHANCEMENT -+ virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp& dataPtr, -+ uint32_t offset=0, uint32_t stride=0) = 0; -+ #else - virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp& dataPtr) = 0; -+ #endif - }; - - class Camera : public BnCameraClient, public IBinder::DeathRecipient -*************** -*** 170,175 **** ---- 184,191 ---- - status_t setPreviewDisplay(const sp& surface); - status_t setPreviewDisplay(const sp& surface); - -+ // pass the SurfaceTexture object to the Camera -+ status_t setPreviewTexture(const sp& surfaceTexture); - // start preview mode, must call setPreviewDisplay first - status_t startPreview(); - -*************** -*** 215,221 **** ---- 231,242 ---- - // ICameraClient interface - virtual void notifyCallback(int32_t msgType, int32_t ext, int32_t ext2); - virtual void dataCallback(int32_t msgType, const sp& dataPtr); -+ #ifdef OMAP_ENHANCEMENT -+ virtual void dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp& dataPtr, -+ uint32_t offset=0, uint32_t stride=0); -+ #else - virtual void dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp& dataPtr); -+ #endif - - sp remote(); - diff --git a/modules/androidcamera/camera_wrapper/android.3.0.1/ICamera.patch b/modules/androidcamera/camera_wrapper/android.3.0.1/ICamera.patch deleted file mode 100644 index 996b3e1850..0000000000 --- a/modules/androidcamera/camera_wrapper/android.3.0.1/ICamera.patch +++ /dev/null @@ -1,14 +0,0 @@ -*** src2.3.3/frameworks/base/include/camera/ICamera.h 2011-04-04 20:18:36.718480237 +0400 ---- src_mock3.0.1/frameworks/base/include/camera/ICamera.h 2012-01-15 20:50:30.000000000 +0400 -*************** -*** 48,53 **** ---- 48,56 ---- - // pass the buffered ISurface to the camera service - virtual status_t setPreviewDisplay(const sp& surface) = 0; - -+ // pass the preview texture. This is for 3.0 and higher versions of Android -+ setPreviewTexture(const sp& surfaceTexture) = 0; -+ - // set the preview callback flag to affect how the received frames from - // preview are handled. - virtual void setPreviewCallbackFlag(int flag) = 0; diff --git a/modules/androidcamera/camera_wrapper/android.3.0.1/README b/modules/androidcamera/camera_wrapper/android.3.0.1/README deleted file mode 100644 index b6b26c3150..0000000000 --- a/modules/androidcamera/camera_wrapper/android.3.0.1/README +++ /dev/null @@ -1,9 +0,0 @@ -Building camera wrapper for Android 3.0.1: - -1) Get sources of Android 2.3.x (2.3.3 were used) -2) Apply patches provided with this instruction to frameworks/base/include/camera/ICamera.h and frameworks/base/include/camera/Camera.h -3) Get frameworks/base/include/gui/ISurfaceTexture.h and frameworks/base/include/gui/SurfaceTexture.h from Android 4.0.x (4.0.3 were used) sources and add them to your source tree. -4) Apply provided patch to the frameworks/base/include/gui/SurfaceTexture.h. -5) Pull /system/lib from your device running Andoid 3.x.x -6) Edit /development/sdk/platform_source.properties file. Set Android version to 3.0.1. -7) Build wrapper as normal using this modified source tree. \ No newline at end of file diff --git a/modules/androidcamera/camera_wrapper/android.3.0.1/SurfaceTexture.patch b/modules/androidcamera/camera_wrapper/android.3.0.1/SurfaceTexture.patch deleted file mode 100644 index 75572b0dfd..0000000000 --- a/modules/androidcamera/camera_wrapper/android.3.0.1/SurfaceTexture.patch +++ /dev/null @@ -1,37 +0,0 @@ -*** src4.0.3/src/frameworks/base/include/gui/SurfaceTexture.h 2012-01-18 16:32:41.424750385 +0400 ---- src_mock3.0.1/frameworks/base/include/gui/SurfaceTexture.h 2012-01-12 21:28:14.000000000 +0400 -*************** -*** 68,75 **** - // texture will be bound in updateTexImage. useFenceSync specifies whether - // fences should be used to synchronize access to buffers if that behavior - // is enabled at compile-time. -! SurfaceTexture(GLuint tex, bool allowSynchronousMode = true, -! GLenum texTarget = GL_TEXTURE_EXTERNAL_OES, bool useFenceSync = true); - - virtual ~SurfaceTexture(); - ---- 68,74 ---- - // texture will be bound in updateTexImage. useFenceSync specifies whether - // fences should be used to synchronize access to buffers if that behavior - // is enabled at compile-time. -! SurfaceTexture(GLuint tex); - - virtual ~SurfaceTexture(); - -*************** -*** 280,286 **** - mBufferState(BufferSlot::FREE), - mRequestBufferCalled(false), - mTransform(0), -! mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), - mTimestamp(0), - mFrameNumber(0), - mFence(EGL_NO_SYNC_KHR) { ---- 279,285 ---- - mBufferState(BufferSlot::FREE), - mRequestBufferCalled(false), - mTransform(0), -! mScalingMode(0), - mTimestamp(0), - mFrameNumber(0), - mFence(EGL_NO_SYNC_KHR) { diff --git a/modules/androidcamera/camera_wrapper/camera_wrapper.cpp b/modules/androidcamera/camera_wrapper/camera_wrapper.cpp deleted file mode 100644 index 351a6fe3d4..0000000000 --- a/modules/androidcamera/camera_wrapper/camera_wrapper.cpp +++ /dev/null @@ -1,1169 +0,0 @@ -#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) && \ - !defined(ANDROID_r4_0_0) && !defined(ANDROID_r4_0_3) && !defined(ANDROID_r4_1_1) && \ - !defined(ANDROID_r4_2_0) && !defined(ANDROID_r4_3_0) && !defined(ANDROID_r4_4_0) -# error Building camera wrapper for your version of Android is not supported by OpenCV.\ - You need to modify OpenCV sources in order to compile camera wrapper for your version of Android. -#endif - -#include -#include - -#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) -# include -#endif //defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) - -#include "camera_wrapper.h" -#include "../include/camera_properties.h" - -#if defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) -//Include SurfaceTexture.h file with the SurfaceTexture class -# include -# define MAGIC_OPENCV_TEXTURE_ID (0x10) -#elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) -# include -# include -#elif defined(ANDROID_r4_3_0) || defined(ANDROID_r4_4_0) -# include -# include -# include -#else -# include -#endif - -#include -#include - -//undef logging macro from /system/core/libcutils/loghack.h -#ifdef LOGD -# undef LOGD -#endif - -#ifdef LOGI -# undef LOGI -#endif - -#ifdef LOGW -# undef LOGW -#endif - -#ifdef LOGE -# undef LOGE -#endif - -// LOGGING -#include -#define CAMERA_LOG_TAG "OpenCV_NativeCamera" -#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, CAMERA_LOG_TAG, __VA_ARGS__)) -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, CAMERA_LOG_TAG, __VA_ARGS__)) -#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, CAMERA_LOG_TAG, __VA_ARGS__)) -#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, CAMERA_LOG_TAG, __VA_ARGS__)) - -#include - -using namespace android; - -// non-public camera related classes are not binary compatible -// objects of these classes have different sizeof on different platforms -// additional memory tail to all system objects to overcome sizeof issue -#define MAGIC_TAIL 4096 - - -void debugShowFPS(); - -#if defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0) -class ConsumerListenerStub: public BufferQueue::ConsumerListener -{ -public: - virtual void onFrameAvailable() - { - } - virtual void onBuffersReleased() - { - } -}; -#elif defined(ANDROID_r4_4_0) -class ConsumerListenerStub: public android::BnConsumerListener -{ -public: - virtual void onFrameAvailable() - { - } - virtual void onBuffersReleased() - { - } - virtual ~ConsumerListenerStub() - { - } -}; -#endif - - -std::string getProcessName() -{ - std::string result; - std::ifstream f; - - f.open("/proc/self/cmdline"); - if (f.is_open()) - { - std::string fullPath; - std::getline(f, fullPath, '\0'); - if (!fullPath.empty()) - { - int i = fullPath.size()-1; - while ((i >= 0) && (fullPath[i] != '/')) i--; - result = fullPath.substr(i+1, std::string::npos); - } - } - - f.close(); - - return result; -} - -void debugShowFPS() -{ - static int mFrameCount = 0; - static int mLastFrameCount = 0; - static nsecs_t mLastFpsTime = systemTime(); - static float mFps = 0; - - mFrameCount++; - - if (( mFrameCount % 30 ) != 0) - return; - - nsecs_t now = systemTime(); - nsecs_t diff = now - mLastFpsTime; - - if (diff==0) - return; - - mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff; - mLastFpsTime = now; - mLastFrameCount = mFrameCount; - LOGI("### Camera FPS ### [%d] Frames, %.2f FPS", mFrameCount, mFps); -} - -class CameraHandler: public CameraListener -{ -protected: - int cameraId; - sp camera; -#if defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) - sp surface; -#endif -#if defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0) || defined(ANDROID_r4_4_0) - sp queue; - sp listener; -#endif - CameraParameters* params; - CameraCallback cameraCallback; - void* userData; - - int emptyCameraCallbackReported; - - int width; - int height; - - static const char* flashModesNames[ANDROID_CAMERA_FLASH_MODES_NUM]; - static const char* focusModesNames[ANDROID_CAMERA_FOCUS_MODES_NUM]; - static const char* whiteBalanceModesNames[ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM]; - static const char* antibandingModesNames[ANDROID_CAMERA_ANTIBANDING_MODES_NUM]; - - void doCall(void* buffer, size_t bufferSize) - { - if (cameraCallback == 0) - { - if (!emptyCameraCallbackReported) - LOGE("CameraHandler::doCall(void*, size_t): Camera callback is empty!"); - - emptyCameraCallbackReported++; - } - else - { - bool res = (*cameraCallback)(buffer, bufferSize, userData); - - if(!res) - { - LOGE("CameraHandler::doCall(void*, size_t): cameraCallback returns false (camera connection will be closed)"); - closeCameraConnect(); - } - } - } - - void doCall(const sp& dataPtr) - { - if (dataPtr == NULL) - { - LOGE("CameraHandler::doCall(const sp&): dataPtr==NULL (no frame to handle)"); - return; - } - - size_t size = dataPtr->size(); - if (size <= 0) - { - LOGE("CameraHandler::doCall(const sp&): IMemory object is of zero size"); - return; - } - - void* buffer = (void *)dataPtr->pointer(); - if (!buffer) - { - LOGE("CameraHandler::doCall(const sp&): Buffer pointer is NULL"); - return; - } - - doCall(buffer, size); - } - - virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const sp& dataPtr) - { - static uint32_t count = 0; - count++; - - LOGE("Recording cb: %d %lld %%p Offset:%%d Stride:%%d\n", msgType, timestamp); - - if (dataPtr == NULL) - { - LOGE("postDataTimestamp: dataPtr IS ZERO -- returning"); - camera->releaseRecordingFrame(dataPtr); - LOGE("postDataTimestamp: camera->releaseRecordingFrame(dataPtr) is done"); - return; - } - - uint8_t *ptr = (uint8_t*) dataPtr->pointer(); - if (ptr) - LOGE("VID_CB: 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x", ptr[0], ptr[1], ptr[2], ptr[3], ptr[4], ptr[5], ptr[6], ptr[7], ptr[8], ptr[9]); - else - LOGE("postDataTimestamp: Ptr is zero"); - - camera->releaseRecordingFrame(dataPtr); - } - - // Split list of floats, returns number of floats found - static int split_float(const char *str, float* out, char delim, int max_elem_num, - char **endptr = NULL) - { - // Find the first float. - char *end = const_cast(str); - int elem_num = 0; - for(; elem_num < max_elem_num; elem_num++ ){ - char* curr_end; - out[elem_num] = (float)strtof(end, &curr_end); - // No other numbers found, finish the loop - if(end == curr_end){ - break; - } - if (*curr_end != delim) { - // When end of string, finish the loop - if (*curr_end == 0){ - elem_num++; - break; - } - else { - LOGE("Cannot find delimeter (%c) in str=%s", delim, str); - return -1; - } - } - // Skip the delimiter character - end = curr_end + 1; - } - if (endptr) - *endptr = end; - return elem_num; - } - - int is_supported(const char* supp_modes_key, const char* mode) - { - const char* supported_modes = params->get(supp_modes_key); - return (supported_modes && mode && (strstr(supported_modes, mode) > 0)); - } - - float getFocusDistance(int focus_distance_type) - { -#if !defined(ANDROID_r2_2_0) - if (focus_distance_type >= 0 && focus_distance_type < 3) - { - float focus_distances[3]; - const char* output = params->get(CameraParameters::KEY_FOCUS_DISTANCES); - int val_num = CameraHandler::split_float(output, focus_distances, ',', 3); - if(val_num == 3) - { - return focus_distances[focus_distance_type]; - } - else - { - LOGE("Invalid focus distances."); - } - } -#endif - return -1; - } - - static int getModeNum(const char** modes, const int modes_num, const char* mode_name) - { - for (int i = 0; i < modes_num; i++){ - if(!strcmp(modes[i],mode_name)) - return i; - } - return -1; - } - -public: - CameraHandler(CameraCallback callback = 0, void* _userData = 0): - cameraId(0), - cameraCallback(callback), - userData(_userData), - emptyCameraCallbackReported(0), - width(), - height() - { - LOGD("Instantiated new CameraHandler (%p, %p)", callback, _userData); - void* params_buffer = operator new(sizeof(CameraParameters) + MAGIC_TAIL); - params = new(params_buffer) CameraParameters(); - } - - virtual ~CameraHandler() - { - if (params) - params->~CameraParameters(); - operator delete(params); - LOGD("CameraHandler destructor is called"); - } - - virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2) - { - LOGE("CameraHandler::Notify: msgType=%d ext1=%d ext2=%d\n", msgType, ext1, ext2); -#if 0 - if ( msgType & CAMERA_MSG_FOCUS ) - LOGE("CameraHandler::Notify AutoFocus %s in %llu us\n", (ext1) ? "OK" : "FAIL", timevalDelay(&autofocus_start)); - - if ( msgType & CAMERA_MSG_SHUTTER ) - LOGE("CameraHandler::Notify Shutter done in %llu us\n", timeval_delay(&picture_start)); -#endif - } - - virtual void postData(int32_t msgType, const sp& dataPtr -#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) \ - || defined(ANDROID_r4_3_0) || defined(ANDROID_r4_4_0) - ,camera_frame_metadata_t* -#endif - ) - { - debugShowFPS(); - - if ( msgType & CAMERA_MSG_PREVIEW_FRAME ) - { - doCall(dataPtr); - return; - } - - //if (msgType != CAMERA_MSG_PREVIEW_FRAME) - //LOGE("CameraHandler::postData Recieved message %d is not equal to CAMERA_MSG_PREVIEW_FRAME (%d)", (int) msgType, CAMERA_MSG_PREVIEW_FRAME); - - if ( msgType & CAMERA_MSG_RAW_IMAGE ) - LOGE("CameraHandler::postData Unexpected data format: RAW\n"); - - if (msgType & CAMERA_MSG_POSTVIEW_FRAME) - LOGE("CameraHandler::postData Unexpected data format: Postview frame\n"); - - if (msgType & CAMERA_MSG_COMPRESSED_IMAGE ) - LOGE("CameraHandler::postData Unexpected data format: JPEG"); - } - - static CameraHandler* initCameraConnect(const CameraCallback& callback, int cameraId, void* userData, CameraParameters* prevCameraParameters); - void closeCameraConnect(); - double getProperty(int propIdx); - void setProperty(int propIdx, double value); - static void applyProperties(CameraHandler** ppcameraHandler); - - std::string cameraPropertySupportedPreviewSizesString; - std::string cameraPropertyPreviewFormatString; -}; - -const char* CameraHandler::flashModesNames[ANDROID_CAMERA_FLASH_MODES_NUM] = -{ - CameraParameters::FLASH_MODE_AUTO, - CameraParameters::FLASH_MODE_OFF, - CameraParameters::FLASH_MODE_ON, - CameraParameters::FLASH_MODE_RED_EYE, - CameraParameters::FLASH_MODE_TORCH -}; - -const char* CameraHandler::focusModesNames[ANDROID_CAMERA_FOCUS_MODES_NUM] = -{ - CameraParameters::FOCUS_MODE_AUTO, -#if !defined(ANDROID_r2_2_0) - CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO, -#else - CameraParameters::FOCUS_MODE_AUTO, -#endif - CameraParameters::FOCUS_MODE_EDOF, - CameraParameters::FOCUS_MODE_FIXED, - CameraParameters::FOCUS_MODE_INFINITY, - CameraParameters::FOCUS_MODE_MACRO, -#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) - CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE -#else - CameraParameters::FOCUS_MODE_AUTO -#endif -}; - -const char* CameraHandler::whiteBalanceModesNames[ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM] = -{ - CameraParameters::WHITE_BALANCE_AUTO, - CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT, - CameraParameters::WHITE_BALANCE_DAYLIGHT, - CameraParameters::WHITE_BALANCE_FLUORESCENT, - CameraParameters::WHITE_BALANCE_INCANDESCENT, - CameraParameters::WHITE_BALANCE_SHADE, - CameraParameters::WHITE_BALANCE_TWILIGHT -}; - -const char* CameraHandler::antibandingModesNames[ANDROID_CAMERA_ANTIBANDING_MODES_NUM] = -{ - CameraParameters::ANTIBANDING_50HZ, - CameraParameters::ANTIBANDING_60HZ, - CameraParameters::ANTIBANDING_AUTO -}; - - -CameraHandler* CameraHandler::initCameraConnect(const CameraCallback& callback, int cameraId, void* userData, CameraParameters* prevCameraParameters) -{ - - typedef sp (*Android22ConnectFuncType)(); - typedef sp (*Android23ConnectFuncType)(int); - typedef sp (*Android3DConnectFuncType)(int, int); - typedef sp (*Android43ConnectFuncType)(int, const String16&, int); - - const int ANY_CAMERA_INDEX = -1; - const int BACK_CAMERA_INDEX = 99; - const int FRONT_CAMERA_INDEX = 98; - - enum { - CAMERA_SUPPORT_MODE_2D = 0x01, /* Camera Sensor supports 2D mode. */ - CAMERA_SUPPORT_MODE_3D = 0x02, /* Camera Sensor supports 3D mode. */ - CAMERA_SUPPORT_MODE_NONZSL = 0x04, /* Camera Sensor in NON-ZSL mode. */ - CAMERA_SUPPORT_MODE_ZSL = 0x08 /* Camera Sensor supports ZSL mode. */ - }; - - // used for Android 4.3 - enum { - USE_CALLING_UID = -1 - }; - - const char Android22ConnectName[] = "_ZN7android6Camera7connectEv"; - const char Android23ConnectName[] = "_ZN7android6Camera7connectEi"; - const char Android3DConnectName[] = "_ZN7android6Camera7connectEii"; - const char Android43ConnectName[] = "_ZN7android6Camera7connectEiRKNS_8String16Ei"; - - int localCameraIndex = cameraId; - - if (cameraId == ANY_CAMERA_INDEX) - { - localCameraIndex = 0; - } -#if !defined(ANDROID_r2_2_0) - else if (cameraId == BACK_CAMERA_INDEX) - { - LOGD("Back camera selected"); - for (int i = 0; i < Camera::getNumberOfCameras(); i++) - { - CameraInfo info; - Camera::getCameraInfo(i, &info); - if (info.facing == CAMERA_FACING_BACK) - { - localCameraIndex = i; - break; - } - } - } - else if (cameraId == FRONT_CAMERA_INDEX) - { - LOGD("Front camera selected"); - for (int i = 0; i < Camera::getNumberOfCameras(); i++) - { - CameraInfo info; - Camera::getCameraInfo(i, &info); - if (info.facing == CAMERA_FACING_FRONT) - { - localCameraIndex = i; - break; - } - } - } - - if (localCameraIndex == BACK_CAMERA_INDEX) - { - LOGE("Back camera not found!"); - return NULL; - } - else if (localCameraIndex == FRONT_CAMERA_INDEX) - { - LOGE("Front camera not found!"); - return NULL; - } -#endif - - LOGD("CameraHandler::initCameraConnect(%p, %d, %p, %p)", callback, localCameraIndex, userData, prevCameraParameters); - - sp camera = 0; - - void* CameraHALHandle = dlopen("libcamera_client.so", RTLD_LAZY); - - if (!CameraHALHandle) - { - LOGE("Cannot link to \"libcamera_client.so\""); - return NULL; - } - - // reset errors - dlerror(); - - if (Android22ConnectFuncType Android22Connect = (Android22ConnectFuncType)dlsym(CameraHALHandle, Android22ConnectName)) - { - LOGD("Connecting to CameraService v 2.2"); - camera = Android22Connect(); - } - else if (Android23ConnectFuncType Android23Connect = (Android23ConnectFuncType)dlsym(CameraHALHandle, Android23ConnectName)) - { - LOGD("Connecting to CameraService v 2.3"); - camera = Android23Connect(localCameraIndex); - } - else if (Android3DConnectFuncType Android3DConnect = (Android3DConnectFuncType)dlsym(CameraHALHandle, Android3DConnectName)) - { - LOGD("Connecting to CameraService v 3D"); - camera = Android3DConnect(localCameraIndex, CAMERA_SUPPORT_MODE_2D); - } - else if (Android43ConnectFuncType Android43Connect = (Android43ConnectFuncType)dlsym(CameraHALHandle, Android43ConnectName)) - { - std::string currentProcName = getProcessName(); - LOGD("Current process name for camera init: %s", currentProcName.c_str()); - camera = Android43Connect(localCameraIndex, String16(currentProcName.c_str()), USE_CALLING_UID); - } - else - { - dlclose(CameraHALHandle); - LOGE("Cannot connect to CameraService. Connect method was not found!"); - return NULL; - } - - dlclose(CameraHALHandle); - - if ( 0 == camera.get() ) - { - LOGE("initCameraConnect: Unable to connect to CameraService\n"); - return 0; - } - - CameraHandler* handler = new CameraHandler(callback, userData); - camera->setListener(handler); - - handler->camera = camera; - handler->cameraId = localCameraIndex; - - if (prevCameraParameters != NULL) - { - LOGI("initCameraConnect: Setting paramers from previous camera handler"); - camera->setParameters(prevCameraParameters->flatten()); - handler->params->unflatten(prevCameraParameters->flatten()); - } - else - { - android::String8 params_str = camera->getParameters(); - LOGI("initCameraConnect: [%s]", params_str.string()); - - handler->params->unflatten(params_str); - - LOGD("Supported Cameras: %s", handler->params->get("camera-indexes")); - LOGD("Supported Picture Sizes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES)); - LOGD("Supported Picture Formats: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS)); - LOGD("Supported Preview Sizes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES)); - LOGD("Supported Preview Formats: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS)); - LOGD("Supported Preview Frame Rates: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES)); - LOGD("Supported Thumbnail Sizes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES)); - LOGD("Supported Whitebalance Modes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE)); - LOGD("Supported Effects: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_EFFECTS)); - LOGD("Supported Scene Modes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_SCENE_MODES)); - LOGD("Supported Focus Modes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES)); - LOGD("Supported Antibanding Options: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_ANTIBANDING)); - LOGD("Supported Flash Modes: %s", handler->params->get(CameraParameters::KEY_SUPPORTED_FLASH_MODES)); - -#if !defined(ANDROID_r2_2_0) - // Set focus mode to continuous-video if supported - const char* available_focus_modes = handler->params->get(CameraParameters::KEY_SUPPORTED_FOCUS_MODES); - if (available_focus_modes != 0) - { - if (strstr(available_focus_modes, "continuous-video") != NULL) - { - handler->params->set(CameraParameters::KEY_FOCUS_MODE, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO); - - status_t resParams = handler->camera->setParameters(handler->params->flatten()); - - if (resParams != 0) - { - LOGE("initCameraConnect: failed to set autofocus mode to \"continuous-video\""); - } - else - { - LOGD("initCameraConnect: autofocus is set to mode \"continuous-video\""); - } - } - } -#endif - - //check if yuv420sp format available. Set this format as preview format. - const char* available_formats = handler->params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS); - if (available_formats != 0) - { - const char* format_to_set = 0; - const char* pos = available_formats; - const char* ptr = pos; - while(true) - { - while(*ptr != 0 && *ptr != ',') ++ptr; - if (ptr != pos) - { - if (0 == strncmp(pos, "yuv420sp", ptr - pos)) - { - format_to_set = "yuv420sp"; - break; - } - if (0 == strncmp(pos, "yvu420sp", ptr - pos)) - format_to_set = "yvu420sp"; - } - if (*ptr == 0) - break; - pos = ++ptr; - } - - if (0 != format_to_set) - { - handler->params->setPreviewFormat(format_to_set); - - status_t resParams = handler->camera->setParameters(handler->params->flatten()); - - if (resParams != 0) - LOGE("initCameraConnect: failed to set preview format to %s", format_to_set); - else - LOGD("initCameraConnect: preview format is set to %s", format_to_set); - } - } - - handler->params->setPreviewSize(640, 480); - status_t resParams = handler->camera->setParameters(handler->params->flatten()); - if (resParams != 0) - LOGE("initCameraConnect: failed to set preview resolution to 640x480"); - else - LOGD("initCameraConnect: preview format is set to 640x480"); - } - - status_t bufferStatus; -#if defined(ANDROID_r2_2_0) - bufferStatus = camera->setPreviewDisplay(sp(0 /*new DummySurface*/)); - if (bufferStatus != 0) - LOGE("initCameraConnect: failed setPreviewDisplay(0) call (status %d); camera might not work correctly on some devices", bufferStatus); -#elif defined(ANDROID_r2_3_3) - /* Do nothing in case of 2.3 for now */ -#elif defined(ANDROID_r3_0_1) || defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) - void* surface_texture_obj = operator new(sizeof(SurfaceTexture) + MAGIC_TAIL); - handler->surface = new(surface_texture_obj) SurfaceTexture(MAGIC_OPENCV_TEXTURE_ID); - bufferStatus = camera->setPreviewTexture(handler->surface); - if (bufferStatus != 0) - LOGE("initCameraConnect: failed setPreviewTexture call (status %d); camera might not work correctly", bufferStatus); -#elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0) - void* buffer_queue_obj = operator new(sizeof(BufferQueue) + MAGIC_TAIL); - handler->queue = new(buffer_queue_obj) BufferQueue(); - void* consumer_listener_obj = operator new(sizeof(ConsumerListenerStub) + MAGIC_TAIL); - handler->listener = new(consumer_listener_obj) ConsumerListenerStub(); - handler->queue->consumerConnect(handler->listener); - bufferStatus = camera->setPreviewTexture(handler->queue); - if (bufferStatus != 0) - LOGE("initCameraConnect: failed setPreviewTexture call; camera might not work correctly"); -# elif defined(ANDROID_r4_4_0) - void* buffer_queue_obj = operator new(sizeof(BufferQueue) + MAGIC_TAIL); - handler->queue = new(buffer_queue_obj) BufferQueue(); - handler->queue->setConsumerUsageBits(GraphicBuffer::USAGE_HW_TEXTURE); - void* consumer_listener_obj = operator new(sizeof(ConsumerListenerStub) + MAGIC_TAIL); - handler->listener = new(consumer_listener_obj) ConsumerListenerStub(); - handler->queue->consumerConnect(handler->listener, true); - bufferStatus = handler->camera->setPreviewTarget(handler->queue); - if (bufferStatus != 0) - LOGE("applyProperties: failed setPreviewTexture call; camera might not work correctly"); -# endif - -#if (defined(ANDROID_r2_2_0) || defined(ANDROID_r2_3_3) || defined(ANDROID_r3_0_1)) -# if 1 - ////ATTENTION: switching between two versions: with and without copying memory inside Android OS - //// see the method CameraService::Client::copyFrameAndPostCopiedFrame and where it is used - camera->setPreviewCallbackFlags( FRAME_CALLBACK_FLAG_ENABLE_MASK | FRAME_CALLBACK_FLAG_COPY_OUT_MASK);//with copy -# else - camera->setPreviewCallbackFlags( FRAME_CALLBACK_FLAG_ENABLE_MASK );//without copy -# endif -#else - camera->setPreviewCallbackFlags( CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK | CAMERA_FRAME_CALLBACK_FLAG_COPY_OUT_MASK);//with copy -#endif //!(defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3)) - - LOGD("Starting preview"); - status_t previewStatus = camera->startPreview(); - - if (previewStatus != 0) - { - LOGE("initCameraConnect: startPreview() fails. Closing camera connection..."); - handler->closeCameraConnect(); - handler = 0; - } - else - { - LOGD("Preview started successfully"); - } - - return handler; -} - -void CameraHandler::closeCameraConnect() -{ - if (camera == NULL) - { - LOGI("... camera is already NULL"); - return; - } - - camera->stopPreview(); -#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) \ - || defined(ANDROID_r4_3_0) || defined(ANDROID_r4_4_0) - camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP); -#endif - camera->disconnect(); - camera.clear(); - camera=NULL; - // ATTENTION!!!!!!!!!!!!!!!!!!!!!!!!!! - // When we set - // camera=NULL - // above, the pointed instance of android::Camera object is destructed, - // since this member `camera' has type android::sp (android smart pointer template class), - // and this is the only pointer to it. - // - // BUT this instance of CameraHandler is set as a listener for that android::Camera object - // (see the function CameraHandler::initCameraConnect above), - // so this instance of CameraHandler is pointed from that android::Camera object as - // sp mListener - // and there is no other android smart pointers to this. - // - // It means, when that instance of the android::Camera object is destructed, - // it calls destructor for this CameraHandler instance too. - // - // So, this line `camera=NULL' causes to the call `delete this' - // (see destructor of the template class android::sp) - // - // So, we must not call `delete this' after the line, since it just has been called indeed -} - -double CameraHandler::getProperty(int propIdx) -{ - LOGD("CameraHandler::getProperty(%d)", propIdx); - - switch (propIdx) - { - case ANDROID_CAMERA_PROPERTY_FRAMEWIDTH: - { - int w,h; - params->getPreviewSize(&w, &h); - return w; - } - case ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT: - { - int w,h; - params->getPreviewSize(&w, &h); - return h; - } - case ANDROID_CAMERA_PROPERTY_SUPPORTED_PREVIEW_SIZES_STRING: - { - cameraPropertySupportedPreviewSizesString = params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES); - union {const char* str;double res;} u; - memset(&u.res, 0, sizeof(u.res)); - u.str = cameraPropertySupportedPreviewSizesString.c_str(); - return u.res; - } - case ANDROID_CAMERA_PROPERTY_PREVIEW_FORMAT_STRING: - { - const char* fmt = params->get(CameraParameters::KEY_PREVIEW_FORMAT); - if (fmt == CameraParameters::PIXEL_FORMAT_YUV422SP) - fmt = "yuv422sp"; - else if (fmt == CameraParameters::PIXEL_FORMAT_YUV420SP) - fmt = "yuv420sp"; - else if (fmt == CameraParameters::PIXEL_FORMAT_YUV422I) - fmt = "yuv422i"; - else if (fmt == CameraParameters::PIXEL_FORMAT_RGB565) - fmt = "rgb565"; - else if (fmt == CameraParameters::PIXEL_FORMAT_JPEG) - fmt = "jpeg"; - cameraPropertyPreviewFormatString = fmt; - - union {const char* str;double res;} u; - memset(&u.res, 0, sizeof(u.res)); - u.str = cameraPropertyPreviewFormatString.c_str(); - return u.res; - } - case ANDROID_CAMERA_PROPERTY_EXPOSURE: - { - int exposure = params->getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); - return exposure; - } - case ANDROID_CAMERA_PROPERTY_FPS: - { - return params->getPreviewFrameRate(); - } - case ANDROID_CAMERA_PROPERTY_FLASH_MODE: - { - int flash_mode = getModeNum(CameraHandler::flashModesNames, - ANDROID_CAMERA_FLASH_MODES_NUM, - params->get(CameraParameters::KEY_FLASH_MODE)); - return flash_mode; - } - case ANDROID_CAMERA_PROPERTY_FOCUS_MODE: - { - int focus_mode = getModeNum(CameraHandler::focusModesNames, - ANDROID_CAMERA_FOCUS_MODES_NUM, - params->get(CameraParameters::KEY_FOCUS_MODE)); - return focus_mode; - } - case ANDROID_CAMERA_PROPERTY_WHITE_BALANCE: - { - int white_balance = getModeNum(CameraHandler::whiteBalanceModesNames, - ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM, - params->get(CameraParameters::KEY_WHITE_BALANCE)); - return white_balance; - } - case ANDROID_CAMERA_PROPERTY_ANTIBANDING: - { - int antibanding = getModeNum(CameraHandler::antibandingModesNames, - ANDROID_CAMERA_ANTIBANDING_MODES_NUM, - params->get(CameraParameters::KEY_ANTIBANDING)); - return antibanding; - } - case ANDROID_CAMERA_PROPERTY_FOCAL_LENGTH: - { - float focal_length = params->getFloat(CameraParameters::KEY_FOCAL_LENGTH); - return focal_length; - } - case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_NEAR: - { - return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_NEAR_INDEX); - } - case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_OPTIMAL: - { - return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_OPTIMAL_INDEX); - } - case ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_FAR: - { - return getFocusDistance(ANDROID_CAMERA_FOCUS_DISTANCE_FAR_INDEX); - } -#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) - case ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK: - { - const char* status = params->get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK); - if (status == CameraParameters::TRUE) - return 1.; - else - return 0.; - } - case ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK: - { - const char* status = params->get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK); - if (status == CameraParameters::TRUE) - return 1.; - else - return 0.; - } -#endif - default: - LOGW("CameraHandler::getProperty - Unsupported property."); - }; - return -1; -} - -void CameraHandler::setProperty(int propIdx, double value) -{ - LOGD("CameraHandler::setProperty(%d, %f)", propIdx, value); - - android::String8 params_str; - params_str = camera->getParameters(); - LOGI("Params before set: [%s]", params_str.string()); - - switch (propIdx) - { - case ANDROID_CAMERA_PROPERTY_FRAMEWIDTH: - { - int w,h; - params->getPreviewSize(&w, &h); - width = (int)value; - } - break; - case ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT: - { - int w,h; - params->getPreviewSize(&w, &h); - height = (int)value; - } - break; - case ANDROID_CAMERA_PROPERTY_EXPOSURE: - { - int max_exposure = params->getInt("max-exposure-compensation"); - int min_exposure = params->getInt("min-exposure-compensation"); - if(max_exposure && min_exposure) - { - int exposure = (int)value; - if(exposure >= min_exposure && exposure <= max_exposure) - params->set("exposure-compensation", exposure); - else - LOGE("Exposure compensation not in valid range (%i,%i).", min_exposure, max_exposure); - } else - LOGE("Exposure compensation adjust is not supported."); - - camera->setParameters(params->flatten()); - } - break; - case ANDROID_CAMERA_PROPERTY_FLASH_MODE: - { - int new_val = (int)value; - if(new_val >= 0 && new_val < ANDROID_CAMERA_FLASH_MODES_NUM) - { - const char* mode_name = flashModesNames[new_val]; - if(is_supported(CameraParameters::KEY_SUPPORTED_FLASH_MODES, mode_name)) - params->set(CameraParameters::KEY_FLASH_MODE, mode_name); - else - LOGE("Flash mode %s is not supported.", mode_name); - } - else - LOGE("Flash mode value not in valid range."); - - camera->setParameters(params->flatten()); - } - break; - case ANDROID_CAMERA_PROPERTY_FOCUS_MODE: - { - int new_val = (int)value; - if(new_val >= 0 && new_val < ANDROID_CAMERA_FOCUS_MODES_NUM) - { - const char* mode_name = focusModesNames[new_val]; - if(is_supported(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, mode_name)) - params->set(CameraParameters::KEY_FOCUS_MODE, mode_name); - else - LOGE("Focus mode %s is not supported.", mode_name); - } - else - LOGE("Focus mode value not in valid range."); - - camera->setParameters(params->flatten()); - } - break; - case ANDROID_CAMERA_PROPERTY_WHITE_BALANCE: - { - int new_val = (int)value; - if(new_val >= 0 && new_val < ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM) - { - const char* mode_name = whiteBalanceModesNames[new_val]; - if(is_supported(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, mode_name)) - params->set(CameraParameters::KEY_WHITE_BALANCE, mode_name); - else - LOGE("White balance mode %s is not supported.", mode_name); - } - else - LOGE("White balance mode value not in valid range."); - - camera->setParameters(params->flatten()); - } - break; - case ANDROID_CAMERA_PROPERTY_ANTIBANDING: - { - int new_val = (int)value; - if(new_val >= 0 && new_val < ANDROID_CAMERA_ANTIBANDING_MODES_NUM) - { - const char* mode_name = antibandingModesNames[new_val]; - if(is_supported(CameraParameters::KEY_SUPPORTED_ANTIBANDING, mode_name)) - params->set(CameraParameters::KEY_ANTIBANDING, mode_name); - else - LOGE("Antibanding mode %s is not supported.", mode_name); - } - else - LOGE("Antibanding mode value not in valid range."); - - camera->setParameters(params->flatten()); - } - break; -#if !defined(ANDROID_r2_2_0) && !defined(ANDROID_r2_3_3) && !defined(ANDROID_r3_0_1) - case ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK: - { - if (is_supported(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, "true")) - { - if (value != 0) - params->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, CameraParameters::TRUE); - else - params->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, CameraParameters::FALSE); - LOGE("Expose lock is set"); - } - else - LOGE("Expose lock is not supported"); - - camera->setParameters(params->flatten()); - } - break; - case ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK: - { - if (is_supported(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, "true")) - { - if (value != 0) - params->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, CameraParameters::TRUE); - else - params->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, CameraParameters::FALSE); - LOGE("White balance lock is set"); - } - else - LOGE("White balance lock is not supported"); - - camera->setParameters(params->flatten()); - } - break; -#endif - default: - LOGW("CameraHandler::setProperty - Unsupported property."); - }; - - params_str = camera->getParameters(); - LOGI("Params after set: [%s]", params_str.string()); -} - -void CameraHandler::applyProperties(CameraHandler** ppcameraHandler) -{ - LOGD("CameraHandler::applyProperties()"); - - if (ppcameraHandler == 0) - { - LOGE("applyProperties: Passed NULL ppcameraHandler"); - return; - } - - if (*ppcameraHandler == 0) - { - LOGE("applyProperties: Passed NULL *ppcameraHandler"); - return; - } - - CameraHandler* handler=*ppcameraHandler; - // delayed resolution setup to exclude errors during other parameres setup on the fly - // without camera restart - if ((handler->width != 0) && (handler->height != 0)) - handler->params->setPreviewSize(handler->width, handler->height); - -#if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) || defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) \ - || defined(ANDROID_r4_3_0) || defined(ANDROID_r4_4_0) - - handler->camera->stopPreview(); - handler->camera->setPreviewCallbackFlags(CAMERA_FRAME_CALLBACK_FLAG_NOOP); - - status_t reconnectStatus = handler->camera->reconnect(); - if (reconnectStatus != 0) - { - LOGE("applyProperties: failed to reconnect camera (status %d)", reconnectStatus); - return; - } - - handler->camera->setParameters(handler->params->flatten()); - - status_t bufferStatus; -# if defined(ANDROID_r4_0_0) || defined(ANDROID_r4_0_3) - void* surface_texture_obj = operator new(sizeof(SurfaceTexture) + MAGIC_TAIL); - handler->surface = new(surface_texture_obj) SurfaceTexture(MAGIC_OPENCV_TEXTURE_ID); - bufferStatus = handler->camera->setPreviewTexture(handler->surface); - if (bufferStatus != 0) - LOGE("applyProperties: failed setPreviewTexture call (status %d); camera might not work correctly", bufferStatus); -# elif defined(ANDROID_r4_1_1) || defined(ANDROID_r4_2_0) || defined(ANDROID_r4_3_0) - void* buffer_queue_obj = operator new(sizeof(BufferQueue) + MAGIC_TAIL); - handler->queue = new(buffer_queue_obj) BufferQueue(); - handler->queue->consumerConnect(handler->listener); - bufferStatus = handler->camera->setPreviewTexture(handler->queue); - if (bufferStatus != 0) - LOGE("applyProperties: failed setPreviewTexture call; camera might not work correctly"); -# elif defined(ANDROID_r4_4_0) - void* buffer_queue_obj = operator new(sizeof(BufferQueue) + MAGIC_TAIL); - handler->queue = new(buffer_queue_obj) BufferQueue(); - handler->queue->setConsumerUsageBits(GraphicBuffer::USAGE_HW_TEXTURE); - handler->queue->consumerConnect(handler->listener, true); - bufferStatus = handler->camera->setPreviewTarget(handler->queue); - if (bufferStatus != 0) - LOGE("applyProperties: failed setPreviewTexture call; camera might not work correctly"); -# endif - - handler->camera->setPreviewCallbackFlags( CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK | CAMERA_FRAME_CALLBACK_FLAG_COPY_OUT_MASK);//with copy - - LOGD("Starting preview"); - status_t previewStatus = handler->camera->startPreview(); - - if (previewStatus != 0) - { - LOGE("initCameraConnect: startPreview() fails. Closing camera connection..."); - handler->closeCameraConnect(); - handler = NULL; - } - else - { - LOGD("Preview started successfully"); - } -#else - CameraHandler* previousCameraHandler=handler; - CameraCallback cameraCallback=previousCameraHandler->cameraCallback; - void* userData=previousCameraHandler->userData; - int cameraId=previousCameraHandler->cameraId; - - LOGD("CameraHandler::applyProperties(): before previousCameraHandler->closeCameraConnect"); - previousCameraHandler->closeCameraConnect(); - LOGD("CameraHandler::applyProperties(): after previousCameraHandler->closeCameraConnect"); - - LOGD("CameraHandler::applyProperties(): before initCameraConnect"); - handler=initCameraConnect(cameraCallback, cameraId, userData, handler->params); - LOGD("CameraHandler::applyProperties(): after initCameraConnect, handler=0x%x", (int)handler); - if (handler == NULL) { - LOGE("ERROR in applyProperties --- cannot reinit camera"); - handler=initCameraConnect(cameraCallback, cameraId, userData, NULL); - LOGD("CameraHandler::applyProperties(): repeat initCameraConnect after ERROR, handler=0x%x", (int)handler); - if (handler == NULL) { - LOGE("ERROR in applyProperties --- cannot reinit camera AGAIN --- cannot do anything else"); - } - } - (*ppcameraHandler)=handler; -#endif -} - - -extern "C" { - -void* initCameraConnectC(void* callback, int cameraId, void* userData) -{ - return CameraHandler::initCameraConnect((CameraCallback)callback, cameraId, userData, NULL); -} - -void closeCameraConnectC(void** camera) -{ - CameraHandler** cc = (CameraHandler**)camera; - (*cc)->closeCameraConnect(); - *cc = 0; -} - -double getCameraPropertyC(void* camera, int propIdx) -{ - return ((CameraHandler*)camera)->getProperty(propIdx); -} - -void setCameraPropertyC(void* camera, int propIdx, double value) -{ - ((CameraHandler*)camera)->setProperty(propIdx,value); -} - -void applyCameraPropertiesC(void** camera) -{ - CameraHandler::applyProperties((CameraHandler**)camera); -} - -} diff --git a/modules/androidcamera/camera_wrapper/camera_wrapper.h b/modules/androidcamera/camera_wrapper/camera_wrapper.h deleted file mode 100644 index 430dea2dd5..0000000000 --- a/modules/androidcamera/camera_wrapper/camera_wrapper.h +++ /dev/null @@ -1,16 +0,0 @@ -typedef bool (*CameraCallback)(void* buffer, size_t bufferSize, void* userData); - -typedef void* (*InitCameraConnectC)(void* cameraCallback, int cameraId, void* userData); -typedef void (*CloseCameraConnectC)(void**); -typedef double (*GetCameraPropertyC)(void* camera, int propIdx); -typedef void (*SetCameraPropertyC)(void* camera, int propIdx, double value); -typedef void (*ApplyCameraPropertiesC)(void** camera); - -extern "C" -{ -void* initCameraConnectC(void* cameraCallback, int cameraId, void* userData); -void closeCameraConnectC(void**); -double getCameraPropertyC(void* camera, int propIdx); -void setCameraPropertyC(void* camera, int propIdx, double value); -void applyCameraPropertiesC(void** camera); -} diff --git a/modules/androidcamera/include/camera_activity.hpp b/modules/androidcamera/include/camera_activity.hpp deleted file mode 100644 index 7e79aafd53..0000000000 --- a/modules/androidcamera/include/camera_activity.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef _CAMERAACTIVITY_H_ -#define _CAMERAACTIVITY_H_ - -#include - -/** @defgroup androidcamera Android Camera Support -*/ - -//! @addtogroup androidcamera -//! @{ - -class CameraActivity -{ -public: - enum ErrorCode { - NO_ERROR=0, - ERROR_WRONG_FRAME_SIZE, - ERROR_WRONG_POINTER_CAMERA_WRAPPER, - ERROR_CAMERA_CONNECTED, - ERROR_CANNOT_OPEN_CAMERA_WRAPPER_LIB, - ERROR_CANNOT_GET_FUNCTION_FROM_CAMERA_WRAPPER_LIB, - ERROR_CANNOT_INITIALIZE_CONNECTION, - ERROR_ISNT_CONNECTED, - ERROR_JAVA_VM_CANNOT_GET_CLASS, - ERROR_JAVA_VM_CANNOT_GET_FIELD, - ERROR_CANNOT_SET_PREVIEW_DISPLAY, - - ERROR_UNKNOWN=255 - }; - - CameraActivity(); - virtual ~CameraActivity(); - virtual bool onFrameBuffer(void* buffer, int bufferSize); - - ErrorCode connect(int cameraId = 0); - void disconnect(); - bool isConnected() const; - - double getProperty(int propIdx); - void setProperty(int propIdx, double value); - void applyProperties(); - - int getFrameWidth(); - int getFrameHeight(); - - static void setPathLibFolder(const char* path); -private: - void* camera; - int frameWidth; - int frameHeight; -}; - -//! @} - -#endif diff --git a/modules/androidcamera/include/camera_properties.h b/modules/androidcamera/include/camera_properties.h deleted file mode 100644 index 5078401951..0000000000 --- a/modules/androidcamera/include/camera_properties.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef CAMERA_PROPERTIES_H -#define CAMERA_PROPERTIES_H - -//! @addtogroup androidcamera -//! @{ - -enum { - ANDROID_CAMERA_PROPERTY_FRAMEWIDTH = 0, - ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT = 1, - ANDROID_CAMERA_PROPERTY_SUPPORTED_PREVIEW_SIZES_STRING = 2, - ANDROID_CAMERA_PROPERTY_PREVIEW_FORMAT_STRING = 3, - ANDROID_CAMERA_PROPERTY_FPS = 4, - ANDROID_CAMERA_PROPERTY_EXPOSURE = 5, - ANDROID_CAMERA_PROPERTY_FLASH_MODE = 101, - ANDROID_CAMERA_PROPERTY_FOCUS_MODE = 102, - ANDROID_CAMERA_PROPERTY_WHITE_BALANCE = 103, - ANDROID_CAMERA_PROPERTY_ANTIBANDING = 104, - ANDROID_CAMERA_PROPERTY_FOCAL_LENGTH = 105, - ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_NEAR = 106, - ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_OPTIMAL = 107, - ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_FAR = 108, - ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK = 109, - ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK = 110 -}; - - -enum { - ANDROID_CAMERA_FLASH_MODE_AUTO = 0, - ANDROID_CAMERA_FLASH_MODE_OFF, - ANDROID_CAMERA_FLASH_MODE_ON, - ANDROID_CAMERA_FLASH_MODE_RED_EYE, - ANDROID_CAMERA_FLASH_MODE_TORCH, - ANDROID_CAMERA_FLASH_MODES_NUM -}; - -enum { - ANDROID_CAMERA_FOCUS_MODE_AUTO = 0, - ANDROID_CAMERA_FOCUS_MODE_CONTINUOUS_VIDEO, - ANDROID_CAMERA_FOCUS_MODE_EDOF, - ANDROID_CAMERA_FOCUS_MODE_FIXED, - ANDROID_CAMERA_FOCUS_MODE_INFINITY, - ANDROID_CAMERA_FOCUS_MODE_MACRO, - ANDROID_CAMERA_FOCUS_MODE_CONTINUOUS_PICTURE, - ANDROID_CAMERA_FOCUS_MODES_NUM -}; - -enum { - ANDROID_CAMERA_WHITE_BALANCE_AUTO = 0, - ANDROID_CAMERA_WHITE_BALANCE_CLOUDY_DAYLIGHT, - ANDROID_CAMERA_WHITE_BALANCE_DAYLIGHT, - ANDROID_CAMERA_WHITE_BALANCE_FLUORESCENT, - ANDROID_CAMERA_WHITE_BALANCE_INCANDESCENT, - ANDROID_CAMERA_WHITE_BALANCE_SHADE, - ANDROID_CAMERA_WHITE_BALANCE_TWILIGHT, - ANDROID_CAMERA_WHITE_BALANCE_WARM_FLUORESCENT, - ANDROID_CAMERA_WHITE_BALANCE_MODES_NUM -}; - -enum { - ANDROID_CAMERA_ANTIBANDING_50HZ = 0, - ANDROID_CAMERA_ANTIBANDING_60HZ, - ANDROID_CAMERA_ANTIBANDING_AUTO, - ANDROID_CAMERA_ANTIBANDING_OFF, - ANDROID_CAMERA_ANTIBANDING_MODES_NUM -}; - -enum { - ANDROID_CAMERA_FOCUS_DISTANCE_NEAR_INDEX = 0, - ANDROID_CAMERA_FOCUS_DISTANCE_OPTIMAL_INDEX, - ANDROID_CAMERA_FOCUS_DISTANCE_FAR_INDEX -}; - -//! @} - -#endif // CAMERA_PROPERTIES_H diff --git a/modules/androidcamera/src/camera_activity.cpp b/modules/androidcamera/src/camera_activity.cpp deleted file mode 100644 index 956c0d3439..0000000000 --- a/modules/androidcamera/src/camera_activity.cpp +++ /dev/null @@ -1,451 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "camera_activity.hpp" -#include "camera_wrapper.h" -#include "EngineCommon.h" - -#include "opencv2/core.hpp" - -#undef LOG_TAG -#undef LOGE -#undef LOGD -#undef LOGI - -#define LOG_TAG "OpenCV::camera" -#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) -#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) - -/////// -// Debug -#include -#include -#include - -struct str_greater -{ - bool operator() (const cv::String& a, const cv::String& b) { return a > b; } -}; - -class CameraWrapperConnector -{ -public: - static CameraActivity::ErrorCode connect(int cameraId, CameraActivity* pCameraActivity, void** camera); - static CameraActivity::ErrorCode disconnect(void** camera); - static CameraActivity::ErrorCode setProperty(void* camera, int propIdx, double value); - static CameraActivity::ErrorCode getProperty(void* camera, int propIdx, double* value); - static CameraActivity::ErrorCode applyProperties(void** ppcamera); - - static void setPathLibFolder(const cv::String& path); - -private: - static cv::String pathLibFolder; - static bool isConnectedToLib; - - static cv::String getPathLibFolder(); - static cv::String getDefaultPathLibFolder(); - static CameraActivity::ErrorCode connectToLib(); - static CameraActivity::ErrorCode getSymbolFromLib(void * libHandle, const char* symbolName, void** ppSymbol); - static void fillListWrapperLibs(const cv::String& folderPath, std::vector& listLibs); - - static InitCameraConnectC pInitCameraC; - static CloseCameraConnectC pCloseCameraC; - static GetCameraPropertyC pGetPropertyC; - static SetCameraPropertyC pSetPropertyC; - static ApplyCameraPropertiesC pApplyPropertiesC; - - friend bool nextFrame(void* buffer, size_t bufferSize, void* userData); -}; - -cv::String CameraWrapperConnector::pathLibFolder; - -bool CameraWrapperConnector::isConnectedToLib = false; -InitCameraConnectC CameraWrapperConnector::pInitCameraC = 0; -CloseCameraConnectC CameraWrapperConnector::pCloseCameraC = 0; -GetCameraPropertyC CameraWrapperConnector::pGetPropertyC = 0; -SetCameraPropertyC CameraWrapperConnector::pSetPropertyC = 0; -ApplyCameraPropertiesC CameraWrapperConnector::pApplyPropertiesC = 0; - -#define INIT_CAMERA_SYMBOL_NAME "initCameraConnectC" -#define CLOSE_CAMERA_SYMBOL_NAME "closeCameraConnectC" -#define SET_CAMERA_PROPERTY_SYMBOL_NAME "setCameraPropertyC" -#define GET_CAMERA_PROPERTY_SYMBOL_NAME "getCameraPropertyC" -#define APPLY_CAMERA_PROPERTIES_SYMBOL_NAME "applyCameraPropertiesC" -#define PREFIX_CAMERA_WRAPPER_LIB "libnative_camera" - - -bool nextFrame(void* buffer, size_t bufferSize, void* userData) -{ - if (userData == NULL) - return true; - - return ((CameraActivity*)userData)->onFrameBuffer(buffer, bufferSize); -} - -CameraActivity::ErrorCode CameraWrapperConnector::connect(int cameraId, CameraActivity* pCameraActivity, void** camera) -{ - if (pCameraActivity == NULL) - { - LOGE("CameraWrapperConnector::connect error: wrong pointer to CameraActivity object"); - return CameraActivity::ERROR_WRONG_POINTER_CAMERA_WRAPPER; - } - - CameraActivity::ErrorCode errcode=connectToLib(); - if (errcode) return errcode; - - void* cmr = (*pInitCameraC)((void*)nextFrame, cameraId, (void*)pCameraActivity); - if (!cmr) - { - LOGE("CameraWrapperConnector::connectWrapper ERROR: the initializing function returned false"); - return CameraActivity::ERROR_CANNOT_INITIALIZE_CONNECTION; - } - - *camera = cmr; - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::disconnect(void** camera) -{ - if (camera == NULL || *camera == NULL) - { - LOGE("CameraWrapperConnector::disconnect error: wrong pointer to camera object"); - return CameraActivity::ERROR_WRONG_POINTER_CAMERA_WRAPPER; - } - - CameraActivity::ErrorCode errcode=connectToLib(); - if (errcode) return errcode; - - (*pCloseCameraC)(camera); - - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::setProperty(void* camera, int propIdx, double value) -{ - if (camera == NULL) - { - LOGE("CameraWrapperConnector::setProperty error: wrong pointer to camera object"); - return CameraActivity::ERROR_WRONG_POINTER_CAMERA_WRAPPER; - } - - (*pSetPropertyC)(camera, propIdx, value); - - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::getProperty(void* camera, int propIdx, double* value) -{ - if (camera == NULL) - { - LOGE("CameraWrapperConnector::getProperty error: wrong pointer to camera object"); - return CameraActivity::ERROR_WRONG_POINTER_CAMERA_WRAPPER; - } - LOGE("calling (*pGetPropertyC)(%p, %d)", camera, propIdx); - *value = (*pGetPropertyC)(camera, propIdx); - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::applyProperties(void** ppcamera) -{ - if ((ppcamera == NULL) || (*ppcamera == NULL)) - { - LOGE("CameraWrapperConnector::applyProperties error: wrong pointer to camera object"); - return CameraActivity::ERROR_WRONG_POINTER_CAMERA_WRAPPER; - } - - (*pApplyPropertiesC)(ppcamera); - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::connectToLib() -{ - if (isConnectedToLib) { - return CameraActivity::NO_ERROR; - } - - dlerror(); - cv::String folderPath = getPathLibFolder(); - if (folderPath.empty()) - { - LOGD("Trying to find native camera in default OpenCV packages"); - folderPath = getDefaultPathLibFolder(); - } - - LOGD("CameraWrapperConnector::connectToLib: folderPath=%s", folderPath.c_str()); - - std::vector listLibs; - fillListWrapperLibs(folderPath, listLibs); - std::sort(listLibs.begin(), listLibs.end(), str_greater()); - - void * libHandle=0; - cv::String cur_path; - for(size_t i = 0; i < listLibs.size(); i++) { - cur_path=folderPath + listLibs[i]; - LOGD("try to load library '%s'", listLibs[i].c_str()); - libHandle=dlopen(cur_path.c_str(), RTLD_LAZY); - if (libHandle) { - LOGD("Loaded library '%s'", cur_path.c_str()); - break; - } else { - LOGD("CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library %s, dlerror=\"%s\"", - cur_path.c_str(), dlerror()); - } - } - - if (!libHandle) { - LOGE("CameraWrapperConnector::connectToLib ERROR: cannot dlopen camera wrapper library"); - return CameraActivity::ERROR_CANNOT_OPEN_CAMERA_WRAPPER_LIB; - } - - InitCameraConnectC pInit_C; - CloseCameraConnectC pClose_C; - GetCameraPropertyC pGetProp_C; - SetCameraPropertyC pSetProp_C; - ApplyCameraPropertiesC pApplyProp_C; - - CameraActivity::ErrorCode res; - - res = getSymbolFromLib(libHandle, (const char*)INIT_CAMERA_SYMBOL_NAME, (void**)(&pInit_C)); - if (res) return res; - - res = getSymbolFromLib(libHandle, CLOSE_CAMERA_SYMBOL_NAME, (void**)(&pClose_C)); - if (res) return res; - - res = getSymbolFromLib(libHandle, GET_CAMERA_PROPERTY_SYMBOL_NAME, (void**)(&pGetProp_C)); - if (res) return res; - - res = getSymbolFromLib(libHandle, SET_CAMERA_PROPERTY_SYMBOL_NAME, (void**)(&pSetProp_C)); - if (res) return res; - - res = getSymbolFromLib(libHandle, APPLY_CAMERA_PROPERTIES_SYMBOL_NAME, (void**)(&pApplyProp_C)); - if (res) return res; - - pInitCameraC = pInit_C; - pCloseCameraC = pClose_C; - pGetPropertyC = pGetProp_C; - pSetPropertyC = pSetProp_C; - pApplyPropertiesC = pApplyProp_C; - isConnectedToLib=true; - - return CameraActivity::NO_ERROR; -} - -CameraActivity::ErrorCode CameraWrapperConnector::getSymbolFromLib(void* libHandle, const char* symbolName, void** ppSymbol) -{ - dlerror(); - *(void **) (ppSymbol)=dlsym(libHandle, symbolName); - - const char* error_dlsym_init=dlerror(); - if (error_dlsym_init) { - LOGE("CameraWrapperConnector::getSymbolFromLib ERROR: cannot get symbol of the function '%s' from the camera wrapper library, dlerror=\"%s\"", - symbolName, error_dlsym_init); - return CameraActivity::ERROR_CANNOT_GET_FUNCTION_FROM_CAMERA_WRAPPER_LIB; - } - return CameraActivity::NO_ERROR; -} - -void CameraWrapperConnector::fillListWrapperLibs(const cv::String& folderPath, std::vector& listLibs) -{ - DIR *dp; - struct dirent *ep; - - dp = opendir (folderPath.c_str()); - if (dp != NULL) - { - while ((ep = readdir (dp))) { - const char* cur_name=ep->d_name; - if (strstr(cur_name, PREFIX_CAMERA_WRAPPER_LIB)) { - listLibs.push_back(cur_name); - LOGE("||%s", cur_name); - } - } - (void) closedir (dp); - } -} - -cv::String CameraWrapperConnector::getDefaultPathLibFolder() -{ - #define BIN_PACKAGE_NAME(x) "org.opencv.lib_v" CVAUX_STR(CV_VERSION_MAJOR) CVAUX_STR(CV_VERSION_MINOR) "_" x - const char* const packageList[] = {BIN_PACKAGE_NAME("armv7a"), OPENCV_ENGINE_PACKAGE}; - for (size_t i = 0; i < sizeof(packageList)/sizeof(packageList[0]); i++) - { - char path[128]; - sprintf(path, "/data/data/%s/lib/", packageList[i]); - LOGD("Trying package \"%s\" (\"%s\")", packageList[i], path); - - DIR* dir = opendir(path); - if (!dir) - { - LOGD("Package not found"); - continue; - } - else - { - closedir(dir); - return path; - } - } - - return cv::String(); -} - -cv::String CameraWrapperConnector::getPathLibFolder() -{ - if (!pathLibFolder.empty()) - return pathLibFolder; - - Dl_info dl_info; - if(0 != dladdr((void *)nextFrame, &dl_info)) - { - LOGD("Library name: %s", dl_info.dli_fname); - LOGD("Library base address: %p", dl_info.dli_fbase); - - const char* libName=dl_info.dli_fname; - while( ((*libName)=='/') || ((*libName)=='.') ) - libName++; - - FILE* file = fopen("/proc/self/smaps", "rt"); - - if(file) - { - char lineBuf[2048]; - while (fgets(lineBuf, sizeof lineBuf, file) != NULL) - { - //verify that line ends with library name - int lineLength = strlen(lineBuf); - int libNameLength = strlen(libName); - - //trim end - for(int i = lineLength - 1; i >= 0 && isspace(lineBuf[i]); --i) - { - lineBuf[i] = 0; - --lineLength; - } - - if (0 != strncmp(lineBuf + lineLength - libNameLength, libName, libNameLength)) - { - //the line does not contain the library name - continue; - } - - //extract path from smaps line - char* pathBegin = strchr(lineBuf, '/'); - if (0 == pathBegin) - { - LOGE("Strange error: could not find path beginning in lin \"%s\"", lineBuf); - continue; - } - - char* pathEnd = strrchr(pathBegin, '/'); - pathEnd[1] = 0; - - LOGD("Libraries folder found: %s", pathBegin); - - fclose(file); - return pathBegin; - } - fclose(file); - LOGE("Could not find library path"); - } - else - { - LOGE("Could not read /proc/self/smaps"); - } - } - else - { - LOGE("Could not get library name and base address"); - } - - return cv::String(); -} - -void CameraWrapperConnector::setPathLibFolder(const cv::String& path) -{ - pathLibFolder=path; -} - - -///////////////////////////////////////////////////////////////////////////////////////////////// - -CameraActivity::CameraActivity() : camera(0), frameWidth(-1), frameHeight(-1) -{ -} - -CameraActivity::~CameraActivity() -{ - if (camera != 0) - disconnect(); -} - -bool CameraActivity::onFrameBuffer(void* /*buffer*/, int /*bufferSize*/) -{ - LOGD("CameraActivity::onFrameBuffer - empty callback"); - return true; -} - -void CameraActivity::disconnect() -{ - CameraWrapperConnector::disconnect(&camera); -} - -bool CameraActivity::isConnected() const -{ - return camera != 0; -} - -CameraActivity::ErrorCode CameraActivity::connect(int cameraId) -{ - ErrorCode rescode = CameraWrapperConnector::connect(cameraId, this, &camera); - if (rescode) return rescode; - - return NO_ERROR; -} - -double CameraActivity::getProperty(int propIdx) -{ - double propVal; - ErrorCode rescode = CameraWrapperConnector::getProperty(camera, propIdx, &propVal); - if (rescode) return -1; - return propVal; -} - -void CameraActivity::setProperty(int propIdx, double value) -{ - CameraWrapperConnector::setProperty(camera, propIdx, value); -} - -void CameraActivity::applyProperties() -{ - frameWidth = -1; - frameHeight = -1; - CameraWrapperConnector::applyProperties(&camera); - frameWidth = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH); - frameHeight = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT); -} - -int CameraActivity::getFrameWidth() -{ - if (frameWidth <= 0) - frameWidth = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH); - return frameWidth; -} - -int CameraActivity::getFrameHeight() -{ - if (frameHeight <= 0) - frameHeight = getProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT); - return frameHeight; -} - -void CameraActivity::setPathLibFolder(const char* path) -{ - CameraWrapperConnector::setPathLibFolder(path); -} diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index ce24daf79f..0528fa486e 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -174,8 +174,8 @@ endforeach() file(REMOVE_RECURSE "${probe_dir}") if(NOT ANDROID) - ocv_list_filterout(handwritten_java_sources "/(engine3|android)\\\\+") - ocv_list_filterout(handwritten_aidl_sources "/(engine3|android)\\\\+") + ocv_list_filterout(handwritten_java_sources "/(engine|android)\\\\+") + ocv_list_filterout(handwritten_aidl_sources "/(engine|android)\\\\+") else() file(GLOB_RECURSE handwrittren_lib_project_files_rel RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/android_lib/" "${CMAKE_CURRENT_SOURCE_DIR}/android_lib/*") list(REMOVE_ITEM handwrittren_lib_project_files_rel "${ANDROID_MANIFEST_FILE}") @@ -277,7 +277,7 @@ endif(ANDROID AND ANDROID_EXECUTABLE) set(step3_depends ${step2_depends} ${step3_input_files} ${copied_files}) if(ANDROID) - set(LIB_NAME_SUFIX "") + set(LIB_NAME_SUFIX "${OPENCV_VERSION_MAJOR}") else() set(LIB_NAME_SUFIX "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}") endif() @@ -357,6 +357,16 @@ else() ocv_target_link_libraries(${the_module} ${OPENCV_MODULE_${the_module}_DEPS} ${OPENCV_LINKER_LIBS}) endif() +# Additional target properties +set_target_properties(${the_module} PROPERTIES + OUTPUT_NAME "${the_module}${LIB_NAME_SUFIX}" + ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} + RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} + INSTALL_NAME_DIR ${OPENCV_LIB_INSTALL_PATH} + LINK_INTERFACE_LIBRARIES "" + ) + if(ANDROID) ocv_target_link_libraries(${the_module} jnigraphics) # for Mat <=> Bitmap converters @@ -369,16 +379,6 @@ if(ANDROID) endif() endif() -# Additional target properties -set_target_properties(${the_module} PROPERTIES - OUTPUT_NAME "${the_module}${LIB_NAME_SUFIX}" - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - INSTALL_NAME_DIR ${OPENCV_LIB_INSTALL_PATH} - LINK_INTERFACE_LIBRARIES "" - ) - if(WIN32) set_target_properties(${the_module} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) endif() diff --git a/modules/java/android_test/AndroidManifest.xml b/modules/java/android_test/AndroidManifest.xml index 81f2bc134c..74508ad991 100644 --- a/modules/java/android_test/AndroidManifest.xml +++ b/modules/java/android_test/AndroidManifest.xml @@ -25,4 +25,4 @@ - \ No newline at end of file + diff --git a/modules/java/android_test/CMakeLists.txt b/modules/java/android_test/CMakeLists.txt index 08db704b8d..e195732289 100644 --- a/modules/java/android_test/CMakeLists.txt +++ b/modules/java/android_test/CMakeLists.txt @@ -43,10 +43,13 @@ add_custom_command( list(APPEND opencv_test_java_file_deps ${android_proj_target_files}) +get_target_property(java_location opencv_java LOCATION) +get_filename_component(java_name "${java_location}" NAME) + # build java part add_custom_command( OUTPUT "${opencv_test_java_bin_dir}/bin/OpenCVTest-debug.apk" - COMMAND ${CMAKE_COMMAND} -E copy "${OpenCV_BINARY_DIR}/lib/${ANDROID_NDK_ABI_NAME}/libopencv_java.so" "${opencv_test_java_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/libopencv_java.so" + COMMAND ${CMAKE_COMMAND} -E copy "${java_location}" "${opencv_test_java_bin_dir}/libs/${ANDROID_NDK_ABI_NAME}/${java_name}" COMMAND ${ANT_EXECUTABLE} -q -noinput -k debug COMMAND ${CMAKE_COMMAND} -E touch "${opencv_test_java_bin_dir}/bin/OpenCVTest-debug.apk" # needed because ant does not update the timestamp of updated apk WORKING_DIRECTORY "${opencv_test_java_bin_dir}" diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 22e42f0db5..bfb585bf8f 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -507,55 +507,6 @@ JNIEXPORT jdoubleArray JNICALL Java_org_opencv_core_Core_n_1minMaxLocManual "moveWindow" : {'j_code' : '', 'jn_code' : '', 'cpp_code' : '' }, "resizeWindow" : {'j_code' : '', 'jn_code' : '', 'cpp_code' : '' }, }, # Highgui - - 'VideoCapture' : - { - "getSupportedPreviewSizes" : - { - 'j_code' : -""" - public java.util.List getSupportedPreviewSizes() - { - String[] sizes_str = getSupportedPreviewSizes_0(nativeObj).split(","); - java.util.List sizes = new java.util.ArrayList(sizes_str.length); - - for (String str : sizes_str) { - String[] wh = str.split("x"); - sizes.add(new org.opencv.core.Size(Double.parseDouble(wh[0]), Double.parseDouble(wh[1]))); - } - - return sizes; - } - -""", - 'jn_code' : -"""\n private static native String getSupportedPreviewSizes_0(long nativeObj);\n""", - 'cpp_code' : -""" -JNIEXPORT jstring JNICALL Java_org_opencv_videoio_VideoCapture_getSupportedPreviewSizes_10 - (JNIEnv *env, jclass, jlong self); - -JNIEXPORT jstring JNICALL Java_org_opencv_videoio_VideoCapture_getSupportedPreviewSizes_10 - (JNIEnv *env, jclass, jlong self) -{ - static const char method_name[] = "videoio::VideoCapture_getSupportedPreviewSizes_10()"; - try { - LOGD("%s", method_name); - VideoCapture* me = (VideoCapture*) self; //TODO: check for NULL - union {double prop; const char* name;} u; - u.prop = me->get(CAP_PROP_ANDROID_PREVIEW_SIZES_STRING); - return env->NewStringUTF(u.name); - } catch(const std::exception &e) { - throwJavaException(env, &e, method_name); - } catch (...) { - throwJavaException(env, 0, method_name); - } - return env->NewStringUTF(""); -} - -""", - }, # getSupportedPreviewSizes - }, # VideoCapture } # { class : { func : { arg_name : {"ctype" : ctype, "attrib" : [attrib]} } } } diff --git a/modules/java/generator/src/java/android+AsyncServiceHelper.java b/modules/java/generator/src/java/android+AsyncServiceHelper.java index 9882d60b58..e18d5a5001 100644 --- a/modules/java/generator/src/java/android+AsyncServiceHelper.java +++ b/modules/java/generator/src/java/android+AsyncServiceHelper.java @@ -4,7 +4,7 @@ import java.io.File; import java.util.StringTokenizer; import org.opencv.core.Core; -import org.opencv.engine3.OpenCVEngineInterface; +import org.opencv.engine.OpenCVEngineInterface; import android.content.ComponentName; import android.content.Context; @@ -21,8 +21,8 @@ class AsyncServiceHelper final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback); - Intent intent = new Intent("org.opencv.engine3.BIND"); - intent.setPackage("org.opencv.engine3"); + Intent intent = new Intent("org.opencv.engine.BIND"); + intent.setPackage("org.opencv.engine"); if (AppContext.bindService(intent, helper.mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; @@ -77,7 +77,7 @@ class AsyncServiceHelper private LoaderCallbackInterface mUserAppCallback = Callback; public String getPackageName() { - return "OpenCV3 Manager"; + return "OpenCV Manager"; } public void install() { Log.d(TAG, "Trying to install OpenCV Manager via Google Play"); @@ -123,7 +123,7 @@ class AsyncServiceHelper private LoaderCallbackInterface mUserAppCallback = Callback; public String getPackageName() { - return "OpenCV3 Manager"; + return "OpenCV Manager"; } public void install() { @@ -151,7 +151,7 @@ class AsyncServiceHelper /** * URL of OpenCV Manager page on Google Play Market. */ - protected static final String OPEN_CV_SERVICE_URL = "market://details?id=org.opencv.engine3"; + protected static final String OPEN_CV_SERVICE_URL = "market://details?id=org.opencv.engine"; protected ServiceConnection mServiceConnection = new ServiceConnection() { diff --git a/modules/java/generator/src/java/android+CameraBridgeViewBase.java b/modules/java/generator/src/java/android+CameraBridgeViewBase.java index 67a7489cfd..da939017ce 100644 --- a/modules/java/generator/src/java/android+CameraBridgeViewBase.java +++ b/modules/java/generator/src/java/android+CameraBridgeViewBase.java @@ -46,7 +46,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac protected int mMaxHeight; protected int mMaxWidth; protected float mScale = 0; - protected int mPreviewFormat = Videoio.CV_CAP_ANDROID_COLOR_FRAME_RGBA; + protected int mPreviewFormat = RGBA; protected int mCameraIndex = CAMERA_ID_ANY; protected boolean mEnabled; protected FpsMeter mFpsMeter = null; @@ -54,6 +54,8 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac public static final int CAMERA_ID_ANY = -1; public static final int CAMERA_ID_BACK = 99; public static final int CAMERA_ID_FRONT = 98; + public static final int RGBA = 1; + public static final int GRAY = 2; public CameraBridgeViewBase(Context context, int cameraId) { super(context); @@ -151,10 +153,10 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat result = null; switch (mPreviewFormat) { - case Videoio.CV_CAP_ANDROID_COLOR_FRAME_RGBA: + case RGBA: result = mOldStyleListener.onCameraFrame(inputFrame.rgba()); break; - case Videoio.CV_CAP_ANDROID_GREY_FRAME: + case GRAY: result = mOldStyleListener.onCameraFrame(inputFrame.gray()); break; default: @@ -168,7 +170,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac mPreviewFormat = format; } - private int mPreviewFormat = Videoio.CV_CAP_ANDROID_COLOR_FRAME_RGBA; + private int mPreviewFormat = RGBA; private CvCameraViewListener mOldStyleListener; }; @@ -296,6 +298,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac * Called when mSyncObject lock is held */ private void checkCurrentState() { + Log.d(TAG, "call checkCurrentState"); int targetState; if (mEnabled && mSurfaceExist && getVisibility() == VISIBLE) { @@ -313,6 +316,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac } private void processEnterState(int state) { + Log.d(TAG, "call processEnterState: " + state); switch(state) { case STARTED: onEnterStartedState(); @@ -330,6 +334,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac } private void processExitState(int state) { + Log.d(TAG, "call processExitState: " + state); switch(state) { case STARTED: onExitStartedState(); @@ -351,6 +356,7 @@ public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac // NOTE: The order of bitmap constructor and camera connection is important for android 4.1.x // Bitmap must be constructed before surface private void onEnterStartedState() { + Log.d(TAG, "call onEnterStartedState"); /* Connect camera */ if (!connectCamera(getWidth(), getHeight())) { AlertDialog ad = new AlertDialog.Builder(getContext()).create(); diff --git a/modules/java/generator/src/java/android+NativeCameraView.java b/modules/java/generator/src/java/android+NativeCameraView.java deleted file mode 100644 index 47d6a27c23..0000000000 --- a/modules/java/generator/src/java/android+NativeCameraView.java +++ /dev/null @@ -1,182 +0,0 @@ -package org.opencv.android; - -import org.opencv.core.Mat; -import org.opencv.core.Size; -import org.opencv.videoio.Videoio; -import org.opencv.videoio.VideoCapture; - -import android.content.Context; -import android.util.AttributeSet; -import android.util.Log; -import android.view.ViewGroup.LayoutParams; - -/** - * This class is an implementation of a bridge between SurfaceView and native OpenCV camera. - * Due to the big amount of work done, by the base class this child is only responsible - * for creating camera, destroying camera and delivering frames while camera is enabled - */ -public class NativeCameraView extends CameraBridgeViewBase { - - public static final String TAG = "NativeCameraView"; - private boolean mStopThread; - private Thread mThread; - - protected VideoCapture mCamera; - protected NativeCameraFrame mFrame; - - public NativeCameraView(Context context, int cameraId) { - super(context, cameraId); - } - - public NativeCameraView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - protected boolean connectCamera(int width, int height) { - - /* 1. We need to instantiate camera - * 2. We need to start thread which will be getting frames - */ - /* First step - initialize camera connection */ - if (!initializeCamera(width, height)) - return false; - - /* now we can start update thread */ - mThread = new Thread(new CameraWorker()); - mThread.start(); - - return true; - } - - @Override - protected void disconnectCamera() { - /* 1. We need to stop thread which updating the frames - * 2. Stop camera and release it - */ - if (mThread != null) { - try { - mStopThread = true; - mThread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } finally { - mThread = null; - mStopThread = false; - } - } - - /* Now release camera */ - releaseCamera(); - } - - public static class OpenCvSizeAccessor implements ListItemAccessor { - - public int getWidth(Object obj) { - Size size = (Size)obj; - return (int)size.width; - } - - public int getHeight(Object obj) { - Size size = (Size)obj; - return (int)size.height; - } - - } - - private boolean initializeCamera(int width, int height) { - synchronized (this) { - - if (mCameraIndex == -1) - mCamera = new VideoCapture(Videoio.CV_CAP_ANDROID); - else - mCamera = new VideoCapture(Videoio.CV_CAP_ANDROID + mCameraIndex); - - if (mCamera == null) - return false; - - if (mCamera.isOpened() == false) - return false; - - mFrame = new NativeCameraFrame(mCamera); - - java.util.List sizes = mCamera.getSupportedPreviewSizes(); - - /* Select the size that fits surface considering maximum size allowed */ - Size frameSize = calculateCameraFrameSize(sizes, new OpenCvSizeAccessor(), width, height); - - mFrameWidth = (int)frameSize.width; - mFrameHeight = (int)frameSize.height; - - if ((getLayoutParams().width == LayoutParams.MATCH_PARENT) && (getLayoutParams().height == LayoutParams.MATCH_PARENT)) - mScale = Math.min(((float)height)/mFrameHeight, ((float)width)/mFrameWidth); - else - mScale = 0; - - if (mFpsMeter != null) { - mFpsMeter.setResolution(mFrameWidth, mFrameHeight); - } - - AllocateCache(); - - mCamera.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, frameSize.width); - mCamera.set(Videoio.CV_CAP_PROP_FRAME_HEIGHT, frameSize.height); - } - - Log.i(TAG, "Selected camera frame size = (" + mFrameWidth + ", " + mFrameHeight + ")"); - - return true; - } - - private void releaseCamera() { - synchronized (this) { - if (mFrame != null) mFrame.release(); - if (mCamera != null) mCamera.release(); - } - } - - private static class NativeCameraFrame implements CvCameraViewFrame { - - @Override - public Mat rgba() { - mCapture.retrieve(mRgba, Videoio.CV_CAP_ANDROID_COLOR_FRAME_RGBA); - return mRgba; - } - - @Override - public Mat gray() { - mCapture.retrieve(mGray, Videoio.CV_CAP_ANDROID_GREY_FRAME); - return mGray; - } - - public NativeCameraFrame(VideoCapture capture) { - mCapture = capture; - mGray = new Mat(); - mRgba = new Mat(); - } - - public void release() { - if (mGray != null) mGray.release(); - if (mRgba != null) mRgba.release(); - } - - private VideoCapture mCapture; - private Mat mRgba; - private Mat mGray; - }; - - private class CameraWorker implements Runnable { - - public void run() { - do { - if (!mCamera.grab()) { - Log.e(TAG, "Camera frame grab failed"); - break; - } - - deliverAndDrawFrame(mFrame); - } while (!mStopThread); - } - } - -} diff --git a/modules/java/generator/src/java/engine3+OpenCVEngineInterface.aidl b/modules/java/generator/src/java/engine+OpenCVEngineInterface.aidl similarity index 97% rename from modules/java/generator/src/java/engine3+OpenCVEngineInterface.aidl rename to modules/java/generator/src/java/engine+OpenCVEngineInterface.aidl index b84eaaafb0..21fe5f716b 100644 --- a/modules/java/generator/src/java/engine3+OpenCVEngineInterface.aidl +++ b/modules/java/generator/src/java/engine+OpenCVEngineInterface.aidl @@ -1,4 +1,4 @@ -package org.opencv.engine3; +package org.opencv.engine; /** * Class provides a Java interface for OpenCV Engine Service. It's synchronous with native OpenCVEngine class. diff --git a/modules/videoio/CMakeLists.txt b/modules/videoio/CMakeLists.txt index fa1ec4923d..594263388b 100644 --- a/modules/videoio/CMakeLists.txt +++ b/modules/videoio/CMakeLists.txt @@ -1,5 +1,5 @@ set(the_description "Media I/O") -ocv_add_module(videoio opencv_imgproc opencv_imgcodecs OPTIONAL opencv_androidcamera WRAP java python) +ocv_add_module(videoio opencv_imgproc opencv_imgcodecs WRAP java python) # ---------------------------------------------------------------------------- # CMake file for videoio. See root CMakeLists.txt @@ -118,11 +118,6 @@ if(HAVE_OPENNI2) list(APPEND VIDEOIO_LIBRARIES ${OPENNI2_LIBRARY}) endif(HAVE_OPENNI2) -if(HAVE_opencv_androidcamera) - list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_android.cpp) - add_definitions(-DHAVE_ANDROID_NATIVE_CAMERA)#TODO: remove this line -endif(HAVE_opencv_androidcamera) - if(HAVE_XIMEA) list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ximea.cpp) if(XIMEA_PATH) diff --git a/modules/videoio/include/opencv2/videoio.hpp b/modules/videoio/include/opencv2/videoio.hpp index c1a48a3c0f..2547e4c511 100644 --- a/modules/videoio/include/opencv2/videoio.hpp +++ b/modules/videoio/include/opencv2/videoio.hpp @@ -81,7 +81,7 @@ enum { CAP_ANY = 0, // autodetect CAP_PVAPI = 800, // PvAPI, Prosilica GigE SDK CAP_OPENNI = 900, // OpenNI (for Kinect) CAP_OPENNI_ASUS = 910, // OpenNI (for Asus Xtion) - CAP_ANDROID = 1000, // Android + CAP_ANDROID = 1000, // Android - not used CAP_XIAPI = 1100, // XIMEA Camera API CAP_AVFOUNDATION = 1200, // AVFoundation framework for iOS (OS X Lion will have the same API) CAP_GIGANETIX = 1300, // Smartek Giganetix GigEVisionSDK @@ -273,72 +273,6 @@ enum { CAP_PROP_XI_DOWNSAMPLING = 400, // Change image resolution by binning or CAP_PROP_XI_TIMEOUT = 420 // Image capture timeout in milliseconds }; - -// Properties for Android cameras -enum { CAP_PROP_ANDROID_AUTOGRAB = 1024, - CAP_PROP_ANDROID_PREVIEW_SIZES_STRING = 1025, // readonly, tricky property, returns const char* indeed - CAP_PROP_ANDROID_PREVIEW_FORMAT = 1026, // readonly, tricky property, returns const char* indeed - CAP_PROP_ANDROID_FLASH_MODE = 8001, - CAP_PROP_ANDROID_FOCUS_MODE = 8002, - CAP_PROP_ANDROID_WHITE_BALANCE = 8003, - CAP_PROP_ANDROID_ANTIBANDING = 8004, - CAP_PROP_ANDROID_FOCAL_LENGTH = 8005, - CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR = 8006, - CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL = 8007, - CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR = 8008 - }; - - -// Android camera output formats -enum { CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR - CAP_ANDROID_COLOR_FRAME = CAP_ANDROID_COLOR_FRAME_BGR, - CAP_ANDROID_GREY_FRAME = 1, //Y - CAP_ANDROID_GRAY_FRAME = CAP_ANDROID_GREY_FRAME, - CAP_ANDROID_COLOR_FRAME_RGB = 2, - CAP_ANDROID_COLOR_FRAME_BGRA = 3, - CAP_ANDROID_COLOR_FRAME_RGBA = 4 - }; - - -// Android camera flash modes -enum { CAP_ANDROID_FLASH_MODE_AUTO = 0, - CAP_ANDROID_FLASH_MODE_OFF = 1, - CAP_ANDROID_FLASH_MODE_ON = 2, - CAP_ANDROID_FLASH_MODE_RED_EYE = 3, - CAP_ANDROID_FLASH_MODE_TORCH = 4 - }; - - -// Android camera focus modes -enum { CAP_ANDROID_FOCUS_MODE_AUTO = 0, - CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO = 1, - CAP_ANDROID_FOCUS_MODE_EDOF = 2, - CAP_ANDROID_FOCUS_MODE_FIXED = 3, - CAP_ANDROID_FOCUS_MODE_INFINITY = 4, - CAP_ANDROID_FOCUS_MODE_MACRO = 5 - }; - - -// Android camera white balance modes -enum { CAP_ANDROID_WHITE_BALANCE_AUTO = 0, - CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT = 1, - CAP_ANDROID_WHITE_BALANCE_DAYLIGHT = 2, - CAP_ANDROID_WHITE_BALANCE_FLUORESCENT = 3, - CAP_ANDROID_WHITE_BALANCE_INCANDESCENT = 4, - CAP_ANDROID_WHITE_BALANCE_SHADE = 5, - CAP_ANDROID_WHITE_BALANCE_TWILIGHT = 6, - CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT = 7 - }; - - -// Android camera antibanding modes -enum { CAP_ANDROID_ANTIBANDING_50HZ = 0, - CAP_ANDROID_ANTIBANDING_60HZ = 1, - CAP_ANDROID_ANTIBANDING_AUTO = 2, - CAP_ANDROID_ANTIBANDING_OFF = 3 - }; - - // Properties of cameras available through AVFOUNDATION interface enum { CAP_PROP_IOS_DEVICE_FOCUS = 9001, CAP_PROP_IOS_DEVICE_EXPOSURE = 9002, diff --git a/modules/videoio/include/opencv2/videoio/videoio_c.h b/modules/videoio/include/opencv2/videoio/videoio_c.h index f5166bf018..b8973850cf 100644 --- a/modules/videoio/include/opencv2/videoio/videoio_c.h +++ b/modules/videoio/include/opencv2/videoio/videoio_c.h @@ -98,9 +98,9 @@ enum CV_CAP_OPENNI =900, // OpenNI (for Kinect) CV_CAP_OPENNI_ASUS =910, // OpenNI (for Asus Xtion) - CV_CAP_ANDROID =1000, // Android - CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera - CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera + CV_CAP_ANDROID =1000, // Android - not used + CV_CAP_ANDROID_BACK =CV_CAP_ANDROID+99, // Android back camera - not used + CV_CAP_ANDROID_FRONT =CV_CAP_ANDROID+98, // Android front camera - not used CV_CAP_XIAPI =1100, // XIMEA Camera API @@ -330,62 +330,6 @@ enum CV_CAP_OPENNI_QVGA_60HZ = 4 }; -//supported by Android camera output formats -enum -{ - CV_CAP_ANDROID_COLOR_FRAME_BGR = 0, //BGR - CV_CAP_ANDROID_COLOR_FRAME = CV_CAP_ANDROID_COLOR_FRAME_BGR, - CV_CAP_ANDROID_GREY_FRAME = 1, //Y - CV_CAP_ANDROID_GRAY_FRAME = CV_CAP_ANDROID_GREY_FRAME, - CV_CAP_ANDROID_COLOR_FRAME_RGB = 2, - CV_CAP_ANDROID_COLOR_FRAME_BGRA = 3, - CV_CAP_ANDROID_COLOR_FRAME_RGBA = 4 -}; - -// supported Android camera flash modes -enum -{ - CV_CAP_ANDROID_FLASH_MODE_AUTO = 0, - CV_CAP_ANDROID_FLASH_MODE_OFF, - CV_CAP_ANDROID_FLASH_MODE_ON, - CV_CAP_ANDROID_FLASH_MODE_RED_EYE, - CV_CAP_ANDROID_FLASH_MODE_TORCH -}; - -// supported Android camera focus modes -enum -{ - CV_CAP_ANDROID_FOCUS_MODE_AUTO = 0, - CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_PICTURE, - CV_CAP_ANDROID_FOCUS_MODE_CONTINUOUS_VIDEO, - CV_CAP_ANDROID_FOCUS_MODE_EDOF, - CV_CAP_ANDROID_FOCUS_MODE_FIXED, - CV_CAP_ANDROID_FOCUS_MODE_INFINITY, - CV_CAP_ANDROID_FOCUS_MODE_MACRO -}; - -// supported Android camera white balance modes -enum -{ - CV_CAP_ANDROID_WHITE_BALANCE_AUTO = 0, - CV_CAP_ANDROID_WHITE_BALANCE_CLOUDY_DAYLIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_DAYLIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_FLUORESCENT, - CV_CAP_ANDROID_WHITE_BALANCE_INCANDESCENT, - CV_CAP_ANDROID_WHITE_BALANCE_SHADE, - CV_CAP_ANDROID_WHITE_BALANCE_TWILIGHT, - CV_CAP_ANDROID_WHITE_BALANCE_WARM_FLUORESCENT -}; - -// supported Android camera antibanding modes -enum -{ - CV_CAP_ANDROID_ANTIBANDING_50HZ = 0, - CV_CAP_ANDROID_ANTIBANDING_60HZ, - CV_CAP_ANDROID_ANTIBANDING_AUTO, - CV_CAP_ANDROID_ANTIBANDING_OFF -}; - enum { CV_CAP_INTELPERC_DEPTH_MAP = 0, // Each pixel is a 16-bit integer. The value indicates the distance from an object to the camera's XY plane or the Cartesian depth. diff --git a/modules/videoio/misc/java/test/VideoCaptureTest.java b/modules/videoio/misc/java/test/VideoCaptureTest.java index f4cccdf5ce..a6db7cbdfa 100644 --- a/modules/videoio/misc/java/test/VideoCaptureTest.java +++ b/modules/videoio/misc/java/test/VideoCaptureTest.java @@ -24,145 +24,21 @@ public class VideoCaptureTest extends OpenCVTestCase { isOpened = false; } - public void testGet() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - double frameWidth = capture.get(Videoio.CV_CAP_PROP_FRAME_WIDTH); - assertTrue(0 != frameWidth); - } finally { - if (capture != null) capture.release(); - } - } - - public void testGetSupportedPreviewSizes() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - List sizes = capture.getSupportedPreviewSizes(); - assertNotNull(sizes); - assertFalse(sizes.isEmpty()); - } finally { - if (capture != null) capture.release(); - } - } - public void testGrab() { capture = new VideoCapture(); isSucceed = capture.grab(); assertFalse(isSucceed); } - public void testGrabFromRealCamera() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - isSucceed = capture.grab(); - assertTrue(isSucceed); - } finally { - if (capture != null) capture.release(); - } - } - public void testIsOpened() { capture = new VideoCapture(); assertFalse(capture.isOpened()); } - public void testIsOpenedRealCamera() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - isOpened = capture.isOpened(); - assertTrue(isOpened); - } finally { - if (capture != null) capture.release(); - } - } - - public void testOpen() { - try { - capture = new VideoCapture(); - capture.open(Videoio.CV_CAP_ANDROID); - isOpened = capture.isOpened(); - assertTrue(isOpened); - } finally { - if (capture != null) capture.release(); - } - } - - public void testRead() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - isSucceed = capture.read(dst); - assertTrue(isSucceed); - assertFalse(dst.empty()); - assertEquals(3, dst.channels()); - } finally { - if (capture != null) capture.release(); - } - } - - public void testRelease() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - capture.release(); - assertFalse(capture.isOpened()); - capture = null; - } finally { - if (capture != null) capture.release(); - } - } - - public void testRetrieveMat() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - capture.grab(); - isSucceed = capture.retrieve(dst); - assertTrue(isSucceed); - assertFalse(dst.empty()); - assertEquals(3, dst.channels()); - } finally { - if (capture != null) capture.release(); - } - } - - public void testRetrieveMatInt() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - capture.grab(); - isSucceed = capture.retrieve(dst, Videoio.CV_CAP_ANDROID_GREY_FRAME); - assertTrue(isSucceed); - assertFalse(dst.empty()); - assertEquals(1, dst.channels()); - } finally { - if (capture != null) capture.release(); - } - } - - public void testSet() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - capture.set(Videoio.CV_CAP_PROP_FRAME_WIDTH, 640); - capture.set(Videoio.CV_CAP_PROP_FRAME_HEIGHT, 480); - double frameWidth = capture.get(Videoio.CV_CAP_PROP_FRAME_WIDTH); - capture.read(dst); - assertEquals(640.0, frameWidth); - assertEquals(640, dst.cols()); - } finally { - if (capture != null) capture.release(); - } - } - public void testVideoCapture() { capture = new VideoCapture(); assertNotNull(capture); assertFalse(capture.isOpened()); } - public void testVideoCaptureInt() { - try { - capture = new VideoCapture(Videoio.CV_CAP_ANDROID); - assertNotNull(capture); - assertTrue(capture.isOpened()); - } finally { - if (capture != null) capture.release(); - } - } } diff --git a/modules/videoio/src/cap.cpp b/modules/videoio/src/cap.cpp index 84113f4cc1..f2b5a4a305 100644 --- a/modules/videoio/src/cap.cpp +++ b/modules/videoio/src/cap.cpp @@ -158,9 +158,6 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index) #ifdef HAVE_OPENNI2 CV_CAP_OPENNI2, #endif -#ifdef HAVE_ANDROID_NATIVE_CAMERA - CV_CAP_ANDROID, -#endif #ifdef HAVE_XIMEA CV_CAP_XIAPI, #endif @@ -208,7 +205,6 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index) defined(HAVE_OPENNI2) || \ defined(HAVE_XIMEA) || \ defined(HAVE_AVFOUNDATION) || \ - defined(HAVE_ANDROID_NATIVE_CAMERA) || \ defined(HAVE_GIGE_API) || \ defined(HAVE_INTELPERC) || \ (0) @@ -329,14 +325,6 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index) break; #endif -#ifdef HAVE_ANDROID_NATIVE_CAMERA - case CV_CAP_ANDROID: - capture = cvCreateCameraCapture_Android (index); - if (capture) - return capture; - break; -#endif - #ifdef HAVE_XIMEA case CV_CAP_XIAPI: capture = cvCreateCameraCapture_XIMEA (index); diff --git a/modules/videoio/src/cap_android.cpp b/modules/videoio/src/cap_android.cpp deleted file mode 100644 index e736b8e1b4..0000000000 --- a/modules/videoio/src/cap_android.cpp +++ /dev/null @@ -1,554 +0,0 @@ -/*M/////////////////////////////////////////////////////////////////////////////////////// -// -// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. -// -// By downloading, copying, installing or using the software you agree to this license. -// If you do not agree to this license, do not download, install, -// copy or use the software. -// -// -// Intel License Agreement -// For Open Source Computer Vision Library -// -// Copyright (C) 2000, Intel Corporation, all rights reserved. -// Third party copyrights are property of their respective owners. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// * Redistribution's of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// * Redistribution's in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// * The name of Intel Corporation may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// This software is provided by the copyright holders and contributors "as is" and -// any express or implied warranties, including, but not limited to, the implied -// warranties of merchantability and fitness for a particular purpose are disclaimed. -// In no event shall the Intel Corporation or contributors be liable for any direct, -// indirect, incidental, special, exemplary, or consequential damages -// (including, but not limited to, procurement of substitute goods or services; -// loss of use, data, or profits; or business interruption) however caused -// and on any theory of liability, whether in contract, strict liability, -// or tort (including negligence or otherwise) arising in any way out of -// the use of this software, even if advised of the possibility of such damage. -// -//M*/ - -#include "precomp.hpp" - -#ifdef HAVE_ANDROID_NATIVE_CAMERA - -#include -#include -#include -#include - -#undef LOG_TAG -#undef LOGD -#undef LOGE -#undef LOGI -#define LOG_TAG "OpenCV::camera" -#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) -#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) -#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) - -class VideoIOAndroidCameraActivity; - -class CvCapture_Android : public CvCapture -{ -public: - CvCapture_Android(int); - virtual ~CvCapture_Android(); - - virtual double getProperty(int propIdx) const; - virtual bool setProperty(int probIdx, double propVal); - virtual bool grabFrame(); - virtual IplImage* retrieveFrame(int outputType); - virtual int getCaptureDomain() { return CV_CAP_ANDROID; } - - bool isOpened() const; - -protected: - struct OutputMap - { - public: - cv::Mat mat; - IplImage* getIplImagePtr(); - private: - IplImage iplHeader; - }; - - CameraActivity* m_activity; - - //raw from camera - int m_width; - int m_height; - cv::Mat m_frameYUV420; - cv::Mat m_frameYUV420next; - - enum YUVformat - { - noformat = 0, - yuv420sp, - yvu420sp, - yuvUnknown - }; - - YUVformat m_frameFormat; - - void setFrame(const void* buffer, int bufferSize); - -private: - bool m_isOpened; - bool m_CameraParamsChanged; - - //frames counter for statistics - int m_framesGrabbed; - - //cached converted frames - OutputMap m_frameGray; - OutputMap m_frameColor; - bool m_hasGray; - bool m_hasColor; - - enum CvCapture_Android_DataState { - CVCAPTURE_ANDROID_STATE_NO_FRAME=0, - CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED, - CVCAPTURE_ANDROID_STATE_HAS_FRAME_GRABBED - }; - volatile CvCapture_Android_DataState m_dataState; - - //synchronization - pthread_mutex_t m_nextFrameMutex; - pthread_cond_t m_nextFrameCond; - volatile bool m_waitingNextFrame; - volatile bool m_shouldAutoGrab; - - void prepareCacheForYUV(int width, int height); - bool convertYUV2Grey(int width, int height, const unsigned char* yuv, cv::Mat& resmat); - bool convertYUV2BGR(int width, int height, const unsigned char* yuv, cv::Mat& resmat, bool inRGBorder, bool withAlpha); - - friend class VideoIOAndroidCameraActivity; -}; - - -class VideoIOAndroidCameraActivity : public CameraActivity -{ -public: - VideoIOAndroidCameraActivity(CvCapture_Android* capture) - { - m_capture = capture; - m_framesReceived = 0; - } - - virtual bool onFrameBuffer(void* buffer, int bufferSize) - { - if(isConnected() && buffer != 0 && bufferSize > 0) - { - m_framesReceived++; - if (m_capture->m_waitingNextFrame || m_capture->m_shouldAutoGrab) - { - pthread_mutex_lock(&m_capture->m_nextFrameMutex); - - m_capture->setFrame(buffer, bufferSize); - - pthread_cond_broadcast(&m_capture->m_nextFrameCond); - pthread_mutex_unlock(&m_capture->m_nextFrameMutex); - } - return true; - } - return false; - } - - void LogFramesRate() - { - LOGI("FRAMES received: %d grabbed: %d", m_framesReceived, m_capture->m_framesGrabbed); - } - -private: - CvCapture_Android* m_capture; - int m_framesReceived; -}; - -IplImage* CvCapture_Android::OutputMap::getIplImagePtr() -{ - if( mat.empty() ) - return 0; - - iplHeader = IplImage(mat); - return &iplHeader; -} - -CvCapture_Android::CvCapture_Android(int cameraId) -{ - //defaults - m_width = 0; - m_height = 0; - m_activity = 0; - m_isOpened = false; - // m_frameYUV420 = 0; - // m_frameYUV420next = 0; - m_hasGray = false; - m_hasColor = false; - m_dataState = CVCAPTURE_ANDROID_STATE_NO_FRAME; - m_waitingNextFrame = false; - m_shouldAutoGrab = false; - m_framesGrabbed = 0; - m_CameraParamsChanged = false; - m_frameFormat = noformat; - - //try connect to camera - LOGD("CvCapture_Android::CvCapture_Android(%i)", cameraId); - m_activity = new VideoIOAndroidCameraActivity(this); - - if (m_activity == 0) return; - - pthread_mutex_init(&m_nextFrameMutex, NULL); - pthread_cond_init (&m_nextFrameCond, NULL); - - CameraActivity::ErrorCode errcode = m_activity->connect(cameraId); - - if(errcode == CameraActivity::NO_ERROR) - m_isOpened = true; - else - { - LOGE("Native_camera returned opening error: %d", errcode); - delete m_activity; - m_activity = 0; - } -} - -bool CvCapture_Android::isOpened() const -{ - return m_isOpened; -} - -CvCapture_Android::~CvCapture_Android() -{ - if (m_activity) - { - ((VideoIOAndroidCameraActivity*)m_activity)->LogFramesRate(); - - pthread_mutex_lock(&m_nextFrameMutex); - - // unsigned char *tmp1=m_frameYUV420; - // unsigned char *tmp2=m_frameYUV420next; - // m_frameYUV420 = 0; - // m_frameYUV420next = 0; - // delete tmp1; - // delete tmp2; - - m_dataState=CVCAPTURE_ANDROID_STATE_NO_FRAME; - pthread_cond_broadcast(&m_nextFrameCond); - - pthread_mutex_unlock(&m_nextFrameMutex); - - //m_activity->disconnect() will be automatically called inside destructor; - delete m_activity; - m_activity = 0; - - pthread_mutex_destroy(&m_nextFrameMutex); - pthread_cond_destroy(&m_nextFrameCond); - } -} - -double CvCapture_Android::getProperty( int propIdx ) const -{ - switch ( propIdx ) - { - case CV_CAP_PROP_FRAME_WIDTH: - return (double)m_activity->getFrameWidth(); - case CV_CAP_PROP_FRAME_HEIGHT: - return (double)m_activity->getFrameHeight(); - case CV_CAP_PROP_SUPPORTED_PREVIEW_SIZES_STRING: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_SUPPORTED_PREVIEW_SIZES_STRING); - case CV_CAP_PROP_PREVIEW_FORMAT: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_PREVIEW_FORMAT_STRING); - case CV_CAP_PROP_FPS: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FPS); - case CV_CAP_PROP_EXPOSURE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_EXPOSURE); - case CV_CAP_PROP_ANDROID_FLASH_MODE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FLASH_MODE); - case CV_CAP_PROP_ANDROID_FOCUS_MODE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_MODE); - case CV_CAP_PROP_ANDROID_WHITE_BALANCE: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_WHITE_BALANCE); - case CV_CAP_PROP_ANDROID_ANTIBANDING: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_ANTIBANDING); - case CV_CAP_PROP_ANDROID_FOCAL_LENGTH: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCAL_LENGTH); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_NEAR: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_NEAR); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_OPTIMAL: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_OPTIMAL); - case CV_CAP_PROP_ANDROID_FOCUS_DISTANCE_FAR: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_FOCUS_DISTANCE_FAR); - case CV_CAP_PROP_ANDROID_EXPOSE_LOCK: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK); - case CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK: - return (double)m_activity->getProperty(ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK); - default: - CV_Error( CV_StsOutOfRange, "Failed attempt to GET unsupported camera property." ); - break; - } - return -1.0; -} - -bool CvCapture_Android::setProperty( int propIdx, double propValue ) -{ - bool res = false; - if( isOpened() ) - { - switch ( propIdx ) - { - case CV_CAP_PROP_FRAME_WIDTH: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FRAMEWIDTH, propValue); - break; - case CV_CAP_PROP_FRAME_HEIGHT: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FRAMEHEIGHT, propValue); - break; - case CV_CAP_PROP_AUTOGRAB: - m_shouldAutoGrab=(propValue != 0); - break; - case CV_CAP_PROP_EXPOSURE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_EXPOSURE, propValue); - break; - case CV_CAP_PROP_ANDROID_FLASH_MODE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FLASH_MODE, propValue); - break; - case CV_CAP_PROP_ANDROID_FOCUS_MODE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_FOCUS_MODE, propValue); - break; - case CV_CAP_PROP_ANDROID_WHITE_BALANCE: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_WHITE_BALANCE, propValue); - break; - case CV_CAP_PROP_ANDROID_ANTIBANDING: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_ANTIBANDING, propValue); - break; - case CV_CAP_PROP_ANDROID_EXPOSE_LOCK: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_EXPOSE_LOCK, propValue); - break; - case CV_CAP_PROP_ANDROID_WHITEBALANCE_LOCK: - m_activity->setProperty(ANDROID_CAMERA_PROPERTY_WHITEBALANCE_LOCK, propValue); - break; - default: - CV_Error( CV_StsOutOfRange, "Failed attempt to SET unsupported camera property." ); - return false; - } - - // Only changes in frame size require camera restart - if ((propIdx == CV_CAP_PROP_FRAME_WIDTH) || (propIdx == CV_CAP_PROP_FRAME_HEIGHT)) - { // property for videoio class CvCapture_Android only - m_CameraParamsChanged = true; - } - - res = true; - } - - return res; -} - -bool CvCapture_Android::grabFrame() -{ - if( !isOpened() ) { - LOGE("CvCapture_Android::grabFrame(): camera is not opened"); - return false; - } - - bool res=false; - pthread_mutex_lock(&m_nextFrameMutex); - if (m_CameraParamsChanged) - { - m_activity->applyProperties(); - m_CameraParamsChanged = false; - m_dataState = CVCAPTURE_ANDROID_STATE_NO_FRAME;//we will wait new frame - } - - if (m_dataState != CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED) - { - m_waitingNextFrame = true; - pthread_cond_wait(&m_nextFrameCond, &m_nextFrameMutex); - } - - if (m_dataState == CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED) - { - //LOGD("CvCapture_Android::grabFrame: get new frame"); - //swap current and new frames - cv::swap(m_frameYUV420, m_frameYUV420next); - - //discard cached frames - m_hasGray = false; - m_hasColor = false; - - m_dataState=CVCAPTURE_ANDROID_STATE_HAS_FRAME_GRABBED; - m_framesGrabbed++; - - res=true; - } else { - LOGE("CvCapture_Android::grabFrame: NO new frame"); - } - - - int res_unlock=pthread_mutex_unlock(&m_nextFrameMutex); - if (res_unlock) { - LOGE("Error in CvCapture_Android::grabFrame: pthread_mutex_unlock returned %d --- probably, this object has been destroyed", res_unlock); - return false; - } - - return res; -} - -IplImage* CvCapture_Android::retrieveFrame( int outputType ) -{ - IplImage* image = NULL; - - cv::Mat m_frameYUV420_ref = m_frameYUV420; - unsigned char *current_frameYUV420=m_frameYUV420_ref.ptr(); - //Attention! all the operations in this function below should occupy less time than the period between two frames from camera - if (NULL != current_frameYUV420) - { - if (m_frameFormat == noformat) - { - union {double prop; const char* name;} u; - u.prop = getProperty(CV_CAP_PROP_PREVIEW_FORMAT); - if (0 == strcmp(u.name, "yuv420sp")) - m_frameFormat = yuv420sp; - else if (0 == strcmp(u.name, "yvu420sp")) - m_frameFormat = yvu420sp; - else - m_frameFormat = yuvUnknown; - } - - switch(outputType) - { - case CV_CAP_ANDROID_GREY_FRAME: - if (!m_hasGray) - if (!(m_hasGray = convertYUV2Grey(m_width, m_height, current_frameYUV420, m_frameGray.mat))) - return NULL; - image = m_frameGray.getIplImagePtr(); - break; - case CV_CAP_ANDROID_COLOR_FRAME_BGR: case CV_CAP_ANDROID_COLOR_FRAME_RGB: - if (!m_hasColor) - if (!(m_hasColor = convertYUV2BGR(m_width, m_height, current_frameYUV420, m_frameColor.mat, outputType == CV_CAP_ANDROID_COLOR_FRAME_RGB, false))) - return NULL; - image = m_frameColor.getIplImagePtr(); - break; - case CV_CAP_ANDROID_COLOR_FRAME_BGRA: case CV_CAP_ANDROID_COLOR_FRAME_RGBA: - if (!m_hasColor) - if (!(m_hasColor = convertYUV2BGR(m_width, m_height, current_frameYUV420, m_frameColor.mat, outputType == CV_CAP_ANDROID_COLOR_FRAME_RGBA, true))) - return NULL; - image = m_frameColor.getIplImagePtr(); - break; - default: - LOGE("Unsupported frame output format: %d", outputType); - CV_Error( CV_StsOutOfRange, "Output frame format is not supported." ); - image = NULL; - break; - } - } - return image; -} - -//Attention: this method should be called inside pthread_mutex_lock(m_nextFrameMutex) only -void CvCapture_Android::setFrame(const void* buffer, int bufferSize) -{ - int width = m_activity->getFrameWidth(); - int height = m_activity->getFrameHeight(); - int expectedSize = (width * height * 3) >> 1; - - if ( expectedSize != bufferSize) - { - LOGE("ERROR reading YUV buffer: width=%d, height=%d, size=%d, receivedSize=%d", width, height, expectedSize, bufferSize); - return; - } - - //allocate memory if needed - prepareCacheForYUV(width, height); - - //copy data - cv::Mat m_frameYUV420next_ref = m_frameYUV420next; - memcpy(m_frameYUV420next_ref.ptr(), buffer, bufferSize); - // LOGD("CvCapture_Android::setFrame -- memcpy is done"); - // ((VideoIOAndroidCameraActivity*)m_activity)->LogFramesRate(); - - m_dataState = CVCAPTURE_ANDROID_STATE_HAS_NEW_FRAME_UNGRABBED; - m_waitingNextFrame = false;//set flag that no more frames required at this moment -} - -//Attention: this method should be called inside pthread_mutex_lock(m_nextFrameMutex) only -void CvCapture_Android::prepareCacheForYUV(int width, int height) -{ - if (width != m_width || height != m_height) - { - LOGD("CvCapture_Android::prepareCacheForYUV: Changing size of buffers: from width=%d height=%d to width=%d height=%d", m_width, m_height, width, height); - m_width = width; - m_height = height; - /* - unsigned char *tmp = m_frameYUV420next; - m_frameYUV420next = new unsigned char [width * height * 3 / 2]; - if (tmp != NULL) - { - delete[] tmp; - } - - tmp = m_frameYUV420; - m_frameYUV420 = new unsigned char [width * height * 3 / 2]; - if (tmp != NULL) - { - delete[] tmp; - }*/ - m_frameYUV420.create(height * 3 / 2, width, CV_8UC1); - m_frameYUV420next.create(height * 3 / 2, width, CV_8UC1); - } -} - -bool CvCapture_Android::convertYUV2Grey(int width, int height, const unsigned char* yuv, cv::Mat& resmat) -{ - if (yuv == 0) return false; - if (m_frameFormat != yuv420sp && m_frameFormat != yvu420sp) return false; -#define ALWAYS_COPY_GRAY 0 -#if ALWAYS_COPY_GRAY - resmat.create(height, width, CV_8UC1); - unsigned char* matBuff = resmat.ptr (0); - memcpy(matBuff, yuv, width * height); -#else - resmat = cv::Mat(height, width, CV_8UC1, (void*)yuv); -#endif - return !resmat.empty(); -} - -bool CvCapture_Android::convertYUV2BGR(int width, int height, const unsigned char* yuv, cv::Mat& resmat, bool inRGBorder, bool withAlpha) -{ - if (yuv == 0) return false; - if (m_frameFormat != yuv420sp && m_frameFormat != yvu420sp) return false; - - CV_Assert(width % 2 == 0 && height % 2 == 0); - - cv::Mat src(height*3/2, width, CV_8UC1, (void*)yuv); - - if (m_frameFormat == yuv420sp) - cv::cvtColor(src, resmat, inRGBorder ? CV_YUV420sp2RGB : CV_YUV420sp2BGR, withAlpha ? 4 : 3); - else if (m_frameFormat == yvu420sp) - cv::cvtColor(src, resmat, inRGBorder ? CV_YUV2RGB_NV21 : CV_YUV2BGR_NV12, withAlpha ? 4 : 3); - - return !resmat.empty(); -} - -CvCapture* cvCreateCameraCapture_Android( int cameraId ) -{ - CvCapture_Android* capture = new CvCapture_Android(cameraId); - - if( capture->isOpened() ) - return capture; - - delete capture; - return 0; -} - -#endif diff --git a/modules/videoio/test/test_precomp.hpp b/modules/videoio/test/test_precomp.hpp index cbe3364864..a6a5b4410e 100644 --- a/modules/videoio/test/test_precomp.hpp +++ b/modules/videoio/test/test_precomp.hpp @@ -39,7 +39,6 @@ defined(HAVE_INTELPERC) || \ defined(HAVE_GPHOTO2) || \ (0) - //defined(HAVE_ANDROID_NATIVE_CAMERA) || - enable after #1193 # define BUILD_WITH_CAMERA_SUPPORT 1 #else # define BUILD_WITH_CAMERA_SUPPORT 0 diff --git a/platforms/android/java.rst b/platforms/android/java.rst deleted file mode 100644 index 37b393bd89..0000000000 --- a/platforms/android/java.rst +++ /dev/null @@ -1,6 +0,0 @@ -******** -Java API -******** - - -Java API reference (JavaDoc): external `link `_. diff --git a/platforms/android/libinfo/CMakeLists.txt b/platforms/android/libinfo/CMakeLists.txt deleted file mode 100644 index eea43621d4..0000000000 --- a/platforms/android/libinfo/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -project(libopencv_info) -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() - -string(REPLACE "-fvisibility=hidden" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -string(REPLACE "-fvisibility-inlines-hidden" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") - -add_definitions(-DANDROID_PACKAGE_RELEASE=${ANDROID_PACKAGE_RELEASE} -DANDROID_PACKAGE_PLATFORM="${ANDROID_PACKAGE_PLATFORM}") - -include_directories(jni/BinderComponent jni/include "${OpenCV_SOURCE_DIR}/modules/core/include") - -add_library(opencv_info SHARED info.c) - -set_target_properties(${the_module} PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} - RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} - INSTALL_NAME_DIR lib - ) - -get_filename_component(lib_name "libopencv_info.so" NAME) -install(FILES "${LIBRARY_OUTPUT_PATH}/${lib_name}" DESTINATION ${OPENCV_LIB_INSTALL_PATH} COMPONENT libs) diff --git a/platforms/android/libinfo/info.c b/platforms/android/libinfo/info.c deleted file mode 100644 index 3cf470c50d..0000000000 --- a/platforms/android/libinfo/info.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "opencv2/core/version.hpp" -#include - -const char* GetPackageName(void); -const char* GetRevision(void); -const char* GetLibraryList(void); -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList(JNIEnv *, jclass); - -#define PACKAGE_NAME "org.opencv.lib_v" CVAUX_STR(CV_VERSION_MAJOR) CVAUX_STR(CV_VERSION_MINOR) "_" ANDROID_PACKAGE_PLATFORM -#define PACKAGE_REVISION CVAUX_STR(CV_VERSION_REVISION) "." CVAUX_STR(ANDROID_PACKAGE_RELEASE) - -const char* GetPackageName(void) -{ - return PACKAGE_NAME; -} - -const char* GetRevision(void) -{ - return PACKAGE_REVISION; -} - -const char* GetLibraryList(void) -{ - return ""; -} - -JNIEXPORT jstring JNICALL Java_org_opencv_android_StaticHelper_getLibraryList(JNIEnv * env, jclass clazz) -{ - (void)clazz; - return (*env)->NewStringUTF(env, GetLibraryList()); -} diff --git a/platforms/android/package/AndroidManifest.xml b/platforms/android/package/AndroidManifest.xml deleted file mode 100644 index 97fbd9ecc8..0000000000 --- a/platforms/android/package/AndroidManifest.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - diff --git a/platforms/android/package/CMakeLists.txt b/platforms/android/package/CMakeLists.txt deleted file mode 100644 index b48a55a6a1..0000000000 --- a/platforms/android/package/CMakeLists.txt +++ /dev/null @@ -1,94 +0,0 @@ -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}_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 "${PACKAGE_DIR}/${ANDROID_MANIFEST_FILE}" - DEPENDS "${OpenCV_BINARY_DIR}/bin/classes.jar.dephelper" "${PACKAGE_DIR}/res/values/strings.xml" "${PACKAGE_DIR}/res/drawable/icon.png" ${camera_wrappers} opencv_java - ) - -install(FILES "${APK_NAME}" DESTINATION "apk/" COMPONENT libs) -add_custom_target(android_package ALL SOURCES "${APK_NAME}" ) -add_dependencies(android_package opencv_java) diff --git a/platforms/android/package/res/drawable/icon.png b/platforms/android/package/res/drawable/icon.png deleted file mode 100644 index 630454927b..0000000000 Binary files a/platforms/android/package/res/drawable/icon.png and /dev/null differ diff --git a/platforms/android/package/res/values/strings.xml b/platforms/android/package/res/values/strings.xml deleted file mode 100644 index 2d58013d83..0000000000 --- a/platforms/android/package/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - OCV @OPENCV_VERSION_MAJOR@.@OPENCV_VERSION_MINOR@ pack @ANDROID_PACKAGE_PLATFORM_NAME@ - - \ No newline at end of file diff --git a/platforms/android/refman.rst b/platforms/android/refman.rst deleted file mode 100644 index b830bbe09a..0000000000 --- a/platforms/android/refman.rst +++ /dev/null @@ -1,9 +0,0 @@ -############################ -OpenCV4Android Reference -############################ - -.. toctree:: - :maxdepth: 2 - - service/doc/index.rst - java.rst diff --git a/platforms/android/service/CMakeLists.txt b/platforms/android/service/CMakeLists.txt index c99b71392f..b031003177 100644 --- a/platforms/android/service/CMakeLists.txt +++ b/platforms/android/service/CMakeLists.txt @@ -1,6 +1,5 @@ if(BUILD_ANDROID_SERVICE) add_subdirectory(engine) - #add_subdirectory(engine_test) endif() install(FILES "readme.txt" DESTINATION "apk/" COMPONENT libs) diff --git a/platforms/android/service/all.py b/platforms/android/service/all.py deleted file mode 100755 index 18ab4570bd..0000000000 --- a/platforms/android/service/all.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/python - -import os -import sys -import shutil - -LOCAL_LOG_PATH = os.path.join(os.getcwd(), "logs") - -if (__name__ == "__main__"): - if (not os.path.exists(LOCAL_LOG_PATH)): - os.makedirs(LOCAL_LOG_PATH) - - print("Building native part of OpenCV Manager...") - HomeDir = os.getcwd() - os.chdir(os.path.join(HomeDir, "engine")) - shutil.rmtree(os.path.join(HomeDir, "engine", "libs"), ignore_errors=True) - shutil.rmtree(os.path.join(HomeDir, "engine", "obj"), ignore_errors=True) - BuildCommand = "ndk-build V=1 > \"%s\" 2>&1" % os.path.join(LOCAL_LOG_PATH, "build.log") - #print(BuildCommand) - res = os.system(BuildCommand) - if (0 == res): - print("Build\t[OK]") - else: - print("Build\t[FAILED]") - sys.exit(-1) - - os.chdir(HomeDir) - ConfFile = open("device.conf", "rt") - - for s in ConfFile.readlines(): - keys = s.split(";") - if (len(keys) < 2): - print("Error: invalid config line: \"%s\"" % s) - continue - Arch = keys[0] - Name = keys[1] - print("testing \"%s\" arch" % Arch) - print("Pushing to device \"%s\"" % Name) - PushCommand = "%s \"%s\" \"%s\" 2>&1" % (os.path.join(HomeDir, "push_native.py"), Arch, Name) - os.system(PushCommand) - print("Testing on device \"%s\"" % Name) - TestCommand = "%s \"%s\" \"%s\" 2>&1" % (os.path.join(HomeDir, "test_native.py"), Arch, Name) - os.system(TestCommand) diff --git a/platforms/android/service/device.conf b/platforms/android/service/device.conf deleted file mode 100644 index f8c6b5a865..0000000000 --- a/platforms/android/service/device.conf +++ /dev/null @@ -1,3 +0,0 @@ -armeabi;15c000000581404; -x86;0123456789ABCDEF; -mips;Novo7 Basic; diff --git a/platforms/android/service/doc/AndroidAppUsageModel.dia b/platforms/android/service/doc/AndroidAppUsageModel.dia deleted file mode 100644 index 0313d5c642..0000000000 Binary files a/platforms/android/service/doc/AndroidAppUsageModel.dia and /dev/null differ diff --git a/platforms/android/service/doc/BaseLoaderCallback.rst b/platforms/android/service/doc/BaseLoaderCallback.rst deleted file mode 100644 index f8c30a8008..0000000000 --- a/platforms/android/service/doc/BaseLoaderCallback.rst +++ /dev/null @@ -1,63 +0,0 @@ -********************************************* -Base Loader Callback Interface Implementation -********************************************* - -.. highlight:: java -.. class:: BaseLoaderCallback - - Basic implementation of ``LoaderCallbackInterface``. Logic of this implementation is - well-described by the following scheme: - -.. image:: img/AndroidAppUsageModel.png - -Using in Java Activity ----------------------- - -There is a very base code snippet implementing the async initialization with ``BaseLoaderCallback``. -See the "15-puzzle" OpenCV sample for details. - -.. code-block:: java - :linenos: - - public class MyActivity extends Activity implements HelperCallbackInterface - { - private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: - { - Log.i(TAG, "OpenCV loaded successfully"); - // Create and set View - mView = new puzzle15View(mAppContext); - setContentView(mView); - } break; - default: - { - super.onManagerConnected(status); - } break; - } - } - }; - - /** Call on every application resume **/ - @Override - protected void onResume() - { - Log.i(TAG, "Called onResume"); - super.onResume(); - - Log.i(TAG, "Trying to load OpenCV library"); - if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mOpenCVCallBack)) - { - Log.e(TAG, "Cannot connect to OpenCV Manager"); - } - } - -Using in Service ----------------- - -Default ``BaseLoaderCallback`` implementation treats application context as ``Activity`` and calls -``Activity.finish()`` method to exit in case of initialization failure. -To override this behavior you need to override ``finish()`` method of ``BaseLoaderCallback`` class -and implement your own finalization method. diff --git a/platforms/android/service/doc/InstallCallbackInterface.rst b/platforms/android/service/doc/InstallCallbackInterface.rst deleted file mode 100644 index f4411f93f4..0000000000 --- a/platforms/android/service/doc/InstallCallbackInterface.rst +++ /dev/null @@ -1,38 +0,0 @@ -************************** -Install Callback Interface -************************** -.. highlight:: java -.. class:: InstallCallbackInterface - - Callback interface for package installation or update. - -String getPackageName() ------------------------ - -.. method:: String getPackageName() - - Get name of a package to be installed. - - :rtype: string; - :return: returns package name, i.e. "OpenCV Manager Service" or "OpenCV library". - -void install() --------------- - -.. method:: void install() - - Installation of package has been approved. - -void cancel() -------------- - -.. method:: void cancel() - - Installation of package has been cancelled. - -void wait_install() -------------------- - -.. method:: void wait_install() - - Wait for package installation. diff --git a/platforms/android/service/doc/Intro.rst b/platforms/android/service/doc/Intro.rst deleted file mode 100644 index 4b00b8e4a8..0000000000 --- a/platforms/android/service/doc/Intro.rst +++ /dev/null @@ -1,44 +0,0 @@ - -.. _Android_OpenCV_Manager_Intro: - -************ -Introduction -************ - -.. highlight:: java - -OpenCV Manager is an Android service targeted to manage OpenCV library binaries on end users devices. -It allows sharing the OpenCV dynamic libraries between applications on the same device. The Manager -provides the following benefits\: - -#. Less memory usage. All apps use the same binaries from service and do not keep native libs inside themselves; -#. Hardware specific optimizations for all supported platforms; -#. Trusted OpenCV library source. All packages with OpenCV are published on Google Play market; -#. Regular updates and bug fixes; - -Usage model for end user ------------------------- - -.. image:: img/AndroidAppUsageModel.png - -First OpenCV app\: - -#. Any OpenCV-dependent app is installed from Google Play marketplace or manually; -#. At the first launch, it suggests installation of OpenCV Manager; -#. Then OpenCV Manager is downloaded and installed, using the Google Play application. -#. When Manager has been started, the application suggests installation of OpenCV library for the - target device architecture if it is necessary; -#. After the installation is finished, the app may be launched. - -Subsequent launches of OpenCV apps\: - -#. Any OpenCV-dependent app is installed from Google Play market or manually; -#. At the first launch, the app starts as usually; -#. If the selected OpenCV version is not installed, OpenCV Manager suggests installing OpenCV - library for the target device through Google Play marketplace; -#. After the installation is finished, the app may be launched. - -Architecture of OpenCV Manager ------------------------------- - -.. image:: img/Structure.png diff --git a/platforms/android/service/doc/JavaHelper.rst b/platforms/android/service/doc/JavaHelper.rst deleted file mode 100644 index 05576a1b2b..0000000000 --- a/platforms/android/service/doc/JavaHelper.rst +++ /dev/null @@ -1,69 +0,0 @@ -****************** -Java OpenCV Loader -****************** - -.. highlight:: java -.. Class:: OpenCVLoader - -Helper class provides common initialization methods for OpenCV library. - -boolean initDebug() -------------------- - -.. method:: static boolean initDebug() - - Loads and initializes OpenCV library from within current application package. Roughly it is - analog of ``system.loadLibrary("opencv_java")``. - - :rtype: boolean; - :return: returns true if initialization of OpenCV was successful. - -.. note:: This method is deprecated for production code. It is designed for experimental and local - development purposes only. If you want to publish your app use approach with async - initialization. - -boolean initAsync() -------------------- - -.. method:: static boolean initAsync(String Version, Context AppContext, LoaderCallbackInterface Callback) - - Loads and initializes OpenCV library using OpenCV Manager. - - :param Version: OpenCV Library version. - :param AppContext: application context for connecting to the service. - :param Callback: object, that implements ``LoaderCallbackInterface`` for handling connection - status (see ``BaseLoaderCallback``). - - :rtype: boolean; - :return: returns true if initialization of OpenCV starts successfully. - -OpenCV version constants -------------------------- - -.. data:: OPENCV_VERSION_2_4_2 - - OpenCV Library version 2.4.2 - -.. data:: OPENCV_VERSION_2_4_3 - - OpenCV Library version 2.4.3 - -.. data:: OPENCV_VERSION_2_4_4 - - OpenCV Library version 2.4.4 - -.. data:: OPENCV_VERSION_2_4_5 - - OpenCV Library version 2.4.5 - -.. data:: OPENCV_VERSION_2_4_6 - - OpenCV Library version 2.4.6 - -.. data:: OPENCV_VERSION_2_4_7 - - OpenCV Library version 2.4.7 - -.. data:: OPENCV_VERSION_2_4_8 - - OpenCV Library version 2.4.8 diff --git a/platforms/android/service/doc/LibInstallAproved.dia b/platforms/android/service/doc/LibInstallAproved.dia deleted file mode 100644 index 621c0c0f1e..0000000000 Binary files a/platforms/android/service/doc/LibInstallAproved.dia and /dev/null differ diff --git a/platforms/android/service/doc/LibInstallCanceled.dia b/platforms/android/service/doc/LibInstallCanceled.dia deleted file mode 100644 index 338cb922cf..0000000000 Binary files a/platforms/android/service/doc/LibInstallCanceled.dia and /dev/null differ diff --git a/platforms/android/service/doc/LibInstalled.dia b/platforms/android/service/doc/LibInstalled.dia deleted file mode 100644 index f85c495342..0000000000 Binary files a/platforms/android/service/doc/LibInstalled.dia and /dev/null differ diff --git a/platforms/android/service/doc/LoaderCallbackInterface.rst b/platforms/android/service/doc/LoaderCallbackInterface.rst deleted file mode 100644 index 63838a1272..0000000000 --- a/platforms/android/service/doc/LoaderCallbackInterface.rst +++ /dev/null @@ -1,49 +0,0 @@ -************************* -Loader Callback Interface -************************* - -.. highlight:: java -.. class:: LoaderCallbackInterface - - Interface for a callback object in case of asynchronous initialization of OpenCV. - -void onManagerConnected() -------------------------- - -.. method:: void onManagerConnected(int status) - - Callback method that is called after OpenCV library initialization. - - :param status: status of initialization (see "Initialization Status Constants" section below). - -void onPackageInstall() ------------------------ - -.. method:: void onPackageInstall(InstallCallbackInterface Callback) - - Callback method that is called in case when package installation is needed. - - :param callback: answer object with ``install`` and ``cancel`` methods and package description. - -Initialization status constants -------------------------------- - -.. data:: SUCCESS - - OpenCV initialization finished successfully - -.. data:: MARKET_ERROR - - Google Play (Android Market) application cannot be invoked - -.. data:: INSTALL_CANCELED - - OpenCV library installation was cancelled by user - -.. data:: INCOMPATIBLE_MANAGER_VERSION - - Version of OpenCV Manager is incompatible with this app. Manager update is needed. - -.. data:: INIT_FAILED - - OpenCV library initialization failed diff --git a/platforms/android/service/doc/NoService.dia b/platforms/android/service/doc/NoService.dia deleted file mode 100644 index 2c0328baa0..0000000000 Binary files a/platforms/android/service/doc/NoService.dia and /dev/null differ diff --git a/platforms/android/service/doc/Structure.dia b/platforms/android/service/doc/Structure.dia deleted file mode 100644 index bd5064185e..0000000000 Binary files a/platforms/android/service/doc/Structure.dia and /dev/null differ diff --git a/platforms/android/service/doc/UseCases.rst b/platforms/android/service/doc/UseCases.rst deleted file mode 100644 index 50ac050e9c..0000000000 --- a/platforms/android/service/doc/UseCases.rst +++ /dev/null @@ -1,32 +0,0 @@ -Manager Workflow -**************** - -.. _manager_selection: - -.. include:: ../readme.txt - -First application start ------------------------ - -There is no OpenCV Manager or OpenCV libraries: - -.. image:: img/NoService.png - -Additional library package installation ---------------------------------------- - -There is an OpenCV Manager service, but it does not contain appropriate OpenCV library. -If OpenCV library installation has been approved\: - -.. image:: img/LibInstallAproved.png - -If OpenCV library installation has been cancelled\: - -.. image:: img/LibInstallCanceled.png - -Regular application start -------------------------- - -OpenCV Manager and OpenCV library has been already installed. - -.. image:: img/LibInstalled.png diff --git a/platforms/android/service/doc/build_uml.py b/platforms/android/service/doc/build_uml.py deleted file mode 100755 index 94b61d6aed..0000000000 --- a/platforms/android/service/doc/build_uml.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/python - -import os - -TARGET_PATH = "img" - -pipe = os.popen("which dia") -DiaPath = pipe.readline() -DiaPath = DiaPath.strip("\n"); -pipe.close() - -if ("" == DiaPath): - print("Error: Dia tool was not found") - exit(-1) - -print("Dia tool: \"%s\"" % DiaPath) - -if (not os.path.exists(TARGET_PATH)): - os.mkdir("img") - -for filename in os.listdir("."): - if ("dia" == filename[-3:]): - os.system("%s --export %s %s" % (DiaPath, os.path.join(TARGET_PATH, filename[0:len(filename)-4] + ".png"), filename)) diff --git a/platforms/android/service/doc/img/AndroidAppUsageModel.png b/platforms/android/service/doc/img/AndroidAppUsageModel.png deleted file mode 100644 index b5ec637c7f..0000000000 Binary files a/platforms/android/service/doc/img/AndroidAppUsageModel.png and /dev/null differ diff --git a/platforms/android/service/doc/img/LibInstallAproved.png b/platforms/android/service/doc/img/LibInstallAproved.png deleted file mode 100644 index 5858c9b3e7..0000000000 Binary files a/platforms/android/service/doc/img/LibInstallAproved.png and /dev/null differ diff --git a/platforms/android/service/doc/img/LibInstallCanceled.png b/platforms/android/service/doc/img/LibInstallCanceled.png deleted file mode 100644 index e62d1a8c65..0000000000 Binary files a/platforms/android/service/doc/img/LibInstallCanceled.png and /dev/null differ diff --git a/platforms/android/service/doc/img/LibInstalled.png b/platforms/android/service/doc/img/LibInstalled.png deleted file mode 100644 index dc4d94004a..0000000000 Binary files a/platforms/android/service/doc/img/LibInstalled.png and /dev/null differ diff --git a/platforms/android/service/doc/img/NoService.png b/platforms/android/service/doc/img/NoService.png deleted file mode 100644 index f18be6521b..0000000000 Binary files a/platforms/android/service/doc/img/NoService.png and /dev/null differ diff --git a/platforms/android/service/doc/img/Structure.png b/platforms/android/service/doc/img/Structure.png deleted file mode 100644 index 8b53312a08..0000000000 Binary files a/platforms/android/service/doc/img/Structure.png and /dev/null differ diff --git a/platforms/android/service/doc/index.rst b/platforms/android/service/doc/index.rst deleted file mode 100644 index 57a250a833..0000000000 --- a/platforms/android/service/doc/index.rst +++ /dev/null @@ -1,18 +0,0 @@ - -.. _Android_OpenCV_Manager: - -*********************** -Android OpenCV Manager -*********************** - -Contents: - -.. toctree:: - :maxdepth: 2 - - Intro - UseCases - JavaHelper - BaseLoaderCallback - LoaderCallbackInterface - InstallCallbackInterface diff --git a/platforms/android/service/engine/AndroidManifest.xml b/platforms/android/service/engine/AndroidManifest.xml index 40adb98d74..3ade559147 100644 --- a/platforms/android/service/engine/AndroidManifest.xml +++ b/platforms/android/service/engine/AndroidManifest.xml @@ -1,24 +1,24 @@ + package="org.opencv.engine" + android:versionCode="3000" + android:versionName="3.00"> - + + android:label="@string/app_name" android:allowBackup="true"> - + diff --git a/platforms/android/service/engine/CMakeLists.txt b/platforms/android/service/engine/CMakeLists.txt index b09e1fa057..a31790a903 100644 --- a/platforms/android/service/engine/CMakeLists.txt +++ b/platforms/android/service/engine/CMakeLists.txt @@ -1,99 +1,3 @@ -set(engine OpenCVEngine) -set(JNI_LIB_NAME ${engine} ${engine}_jni) - -unset(__android_project_chain CACHE) -add_android_project(opencv_engine "${CMAKE_CURRENT_SOURCE_DIR}" SDK_TARGET 9 ${ANDROID_SDK_TARGET} IGNORE_JAVA ON IGNORE_MANIFEST ON ) - -set(ANDROID_PLATFORM_VERSION_CODE "0") - -if(ARMEABI_V7A) - if (ANDROID_NATIVE_API_LEVEL LESS 9) - set(ANDROID_PLATFORM_VERSION_CODE "2") - else() - set(ANDROID_PLATFORM_VERSION_CODE "3") - endif() -elseif(ARM64_V8A) - set(ANDROID_PLATFORM_VERSION_CODE "4") -elseif(ARMEABI_V6) - set(ANDROID_PLATFORM_VERSION_CODE "1") -elseif(ARMEABI) - set(ANDROID_PLATFORM_VERSION_CODE "1") -elseif(X86) - set(ANDROID_PLATFORM_VERSION_CODE "5") -elseif(MIPS) - set(ANDROID_PLATFORM_VERSION_CODE "6") -else() - message(WARNING "Can not automatically determine the value for ANDROID_PLATFORM_VERSION_CODE") -endif() - configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${ANDROID_MANIFEST_FILE}" "${OpenCV_BINARY_DIR}/platforms/android/service/engine/.build/${ANDROID_MANIFEST_FILE}" @ONLY) - -link_directories( - "${ANDROID_SOURCE_TREE}/out/target/product/generic/system/lib" - "${ANDROID_SOURCE_TREE}/out/target/product/${ANDROID_PRODUCT}/system/lib" - "${ANDROID_SOURCE_TREE}/bin/${ANDROID_ARCH_NAME}") - -file(GLOB engine_files "jni/BinderComponent/*.cpp" "jni/BinderComponent/*.h" "jni/include/*.h") -set(engine_libs "z" "binder" "log" "utils") - -if (TEGRA_DETECTOR) - if (ANDROID_NATIVE_API_LEVEL GREATER 8) - add_definitions(-DUSE_TEGRA_HW_DETECTOR) - list(APPEND engine_libs ${TEGRA_DETECTOR} GLESv2 EGL) - else() - message(FATAL_ERROR "Tegra detector required native api level 9 or above") - endif() -endif() - -# -D__SUPPORT_ARMEABI_FEATURES key is also available -add_definitions(-DPLATFORM_ANDROID -D__SUPPORT_ARMEABI_V7A_FEATURES -D__SUPPORT_TEGRA3 -D__SUPPORT_MIPS) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions") -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-allow-shlib-undefined") -string(REPLACE "-fvisibility=hidden" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -string(REPLACE "-fvisibility-inlines-hidden" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - -include_directories("jni/BinderComponent" "jni/include") -include_directories(SYSTEM "${ANDROID_SOURCE_TREE}/frameworks/base/include" "${ANDROID_SOURCE_TREE}/system/core/include") -add_library(${engine} SHARED ${engine_files}) -target_link_libraries(${engine} ${engine_libs}) - -set_target_properties(${engine} PROPERTIES - OUTPUT_NAME ${engine} - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.build/libs/${ANDROID_NDK_ABI_NAME}" - ) - -get_target_property(engine_lib_location ${engine} LOCATION) -add_custom_command(TARGET ${engine} POST_BUILD COMMAND ${CMAKE_STRIP} --strip-unneeded "${engine_lib_location}") - -file(GLOB engine_jni_files "jni/JNIWrapper/*.cpp" "jni/JNIWrapper/*.h" "jni/include/*.h") -list(APPEND engine_jni_files jni/NativeService/CommonPackageManager.cpp jni/NativeService/PackageInfo.cpp) - -include_directories( - jni/include jni/JNIWrapper - jni/NativeService - jni/BinderComponent - "${ANDROID_SOURCE_TREE}/frameworks/base/include" - "${ANDROID_SOURCE_TREE}/system/core/include" - "${ANDROID_SOURCE_TREE}/frameworks/base/core/jni" - ) - -add_library(${engine}_jni SHARED ${engine_jni_files}) -target_link_libraries(${engine}_jni z binder log utils android_runtime ${engine}) - -set_target_properties(${engine}_jni PROPERTIES - OUTPUT_NAME ${engine}_jni - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.build/libs/${ANDROID_NDK_ABI_NAME}" - ) - -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}") - -# 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) +unset(__android_project_chain CACHE) +add_android_project(opencv_engine "${CMAKE_CURRENT_SOURCE_DIR}" SDK_TARGET 9 ${ANDROID_SDK_TARGET} IGNORE_JAVA ON IGNORE_MANIFEST ON COPY_LIBS ON) diff --git a/platforms/android/service/engine/build.xml b/platforms/android/service/engine/build.xml index 47a283d8f4..98ddc3eac1 100644 --- a/platforms/android/service/engine/build.xml +++ b/platforms/android/service/engine/build.xml @@ -1,5 +1,5 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platforms/android/service/engine_test/project.properties b/platforms/android/service/engine_test/project.properties deleted file mode 100644 index 85aac54016..0000000000 --- a/platforms/android/service/engine_test/project.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-8 diff --git a/platforms/android/service/engine_test/res/drawable-hdpi/ic_launcher.png b/platforms/android/service/engine_test/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 8074c4c571..0000000000 Binary files a/platforms/android/service/engine_test/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/platforms/android/service/engine_test/res/drawable-ldpi/ic_launcher.png b/platforms/android/service/engine_test/res/drawable-ldpi/ic_launcher.png deleted file mode 100644 index 1095584ec2..0000000000 Binary files a/platforms/android/service/engine_test/res/drawable-ldpi/ic_launcher.png and /dev/null differ diff --git a/platforms/android/service/engine_test/res/drawable-mdpi/ic_launcher.png b/platforms/android/service/engine_test/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index a07c69fa5a..0000000000 Binary files a/platforms/android/service/engine_test/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/platforms/android/service/engine_test/res/layout/main.xml b/platforms/android/service/engine_test/res/layout/main.xml deleted file mode 100644 index bc12cd8231..0000000000 --- a/platforms/android/service/engine_test/res/layout/main.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/platforms/android/service/engine_test/res/values/strings.xml b/platforms/android/service/engine_test/res/values/strings.xml deleted file mode 100644 index 471c52e096..0000000000 --- a/platforms/android/service/engine_test/res/values/strings.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - Hello World! - JavaServiceTest - - \ No newline at end of file diff --git a/platforms/android/service/engine_test/src/org/opencv/engine3/test/EngineInterfaceTest.java b/platforms/android/service/engine_test/src/org/opencv/engine3/test/EngineInterfaceTest.java deleted file mode 100644 index b45af98a37..0000000000 --- a/platforms/android/service/engine_test/src/org/opencv/engine3/test/EngineInterfaceTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.opencv.engine3.test; - -import org.opencv.engine3.OpenCVEngineInterface; -import org.opencv.engine3.OpenCVEngineService; - -import android.content.Intent; -import android.os.IBinder; -import android.os.RemoteException; -import android.test.ServiceTestCase; - -public class EngineInterfaceTest extends ServiceTestCase -{ - public EngineInterfaceTest() - { - super(OpenCVEngineService.class); - // TODO Auto-generated constructor stub - } - - public void testVersion() throws RemoteException - { - IBinder ServiceBinder = bindService(new Intent("org.opencv.engine3.BIND")); - assertNotNull(ServiceBinder); - OpenCVEngineInterface ServiceObj = OpenCVEngineInterface.Stub.asInterface(ServiceBinder); - assertNotNull(ServiceObj); - int ServiceVersion = ServiceObj.getEngineVersion(); - assertEquals(1, ServiceVersion); - } - - public void testInstallVersion() throws RemoteException - { - IBinder ServiceBinder = bindService(new Intent("org.opencv.engine3")); - assertNotNull(ServiceBinder); - OpenCVEngineInterface ServiceObj = OpenCVEngineInterface.Stub.asInterface(ServiceBinder); - assertNotNull(ServiceObj); - assertTrue(ServiceObj.installVersion("2.4")); - } - - public void testGetPathForExistVersion() throws RemoteException - { - IBinder ServiceBinder = bindService(new Intent("org.opencv.engine3")); - assertNotNull(ServiceBinder); - OpenCVEngineInterface ServiceObj = OpenCVEngineInterface.Stub.asInterface(ServiceBinder); - assertNotNull(ServiceObj); - assertEquals("/data/data/org.opencv.lib_v240_tegra3/lib", ServiceObj.getLibPathByVersion("2.4")); - } - - public void testGetPathForUnExistVersion() throws RemoteException - { - IBinder ServiceBinder = bindService(new Intent("org.opencv.engine3")); - assertNotNull(ServiceBinder); - OpenCVEngineInterface ServiceObj = OpenCVEngineInterface.Stub.asInterface(ServiceBinder); - assertNotNull(ServiceObj); - assertEquals("", ServiceObj.getLibPathByVersion("2.5")); - } - - public void testInstallAndGetVersion() throws RemoteException - { - IBinder ServiceBinder = bindService(new Intent("org.opencv.engine3")); - assertNotNull(ServiceBinder); - OpenCVEngineInterface ServiceObj = OpenCVEngineInterface.Stub.asInterface(ServiceBinder); - assertNotNull(ServiceObj); - assertTrue(ServiceObj.installVersion("2.4")); - assertEquals("/data/data/org.opencv.lib_v240_tegra3/lib", ServiceObj.getLibPathByVersion("2.4")); - } -} diff --git a/platforms/android/service/push_native.py b/platforms/android/service/push_native.py deleted file mode 100755 index cc14a2fa10..0000000000 --- a/platforms/android/service/push_native.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python - -import os -import sys - -TARGET_DEVICE_PATH = "/data/data/EngineTest" -DEVICE_NAME = "" -DEVICE_STR = "" -DEVICE_ARCH = "armeabi" - -if (__name__ == "__main__"): - if (len(sys.argv) >= 3): - DEVICE_ARCH = sys.argv[1] - DEVICE_NAME = sys.argv[2] - - if (DEVICE_NAME != ""): - DEVICE_STR = "-s \"" + DEVICE_NAME + "\"" - - print("Waiting for device \"%s\" with arch \"%s\" ..." % (DEVICE_NAME, DEVICE_ARCH)) - os.system("adb %s wait-for-device" % DEVICE_STR) - os.system("adb %s shell mkdir -p %s" % (DEVICE_STR, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/libOpenCVEngine.so %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/OpenCVEngineNativeClient %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/OpenCVEngineNativeService %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/OpenCVEngineTest %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/OpenCVEngineTestApp %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) - os.system("adb %s push ./engine/libs/%s/libOpenCVEngine_jni.so %s" % (DEVICE_STR, DEVICE_ARCH, TARGET_DEVICE_PATH)) diff --git a/platforms/android/service/test_native.py b/platforms/android/service/test_native.py deleted file mode 100755 index 328b9a8a51..0000000000 --- a/platforms/android/service/test_native.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/python - -import os -import sys - -DEVICE_NAME = "" -DEVICE_STR = "" -DEVICE_ARCH = "armeabi" - -LOCAL_LOG_PATH = os.path.join(os.getcwd(), "logs") -DEVICE_LOG_PATH = "/sdcard/OpenCVEngineLogs" -DEVICE_BIN_PATH = "/data/data/EngineTest" - -def RunTestApp(AppName): - TestLog = os.path.join(DEVICE_LOG_PATH, AppName + "_" + DEVICE_ARCH + ".xml") - os.system("adb %s shell \"LD_LIBRARY_PATH=%s:$LD_LIBRARY_PATH;%s --gtest_output=\"xml:%s\"\"" % (DEVICE_STR, DEVICE_BIN_PATH, os.path.join(DEVICE_BIN_PATH, AppName), TestLog)) - os.system("adb %s pull \"%s\" \"%s\"" % (DEVICE_STR, TestLog, LOCAL_LOG_PATH)) - -if (__name__ == "__main__"): - if (3 == len(sys.argv)): - DEVICE_ARCH = sys.argv[1] - DEVICE_NAME = sys.argv[2] - - if (DEVICE_NAME != ""): - DEVICE_STR = "-s \"" + DEVICE_NAME + "\"" - - if (not os.path.exists(LOCAL_LOG_PATH)): - os.makedirs(LOCAL_LOG_PATH) - - print("Waiting for device \"%s\" with arch \"%s\" ..." % (DEVICE_NAME, DEVICE_ARCH)) - os.system("adb %s wait-for-device" % DEVICE_STR) - - os.system("adb %s shell rm -r \"%s\"" % (DEVICE_STR, DEVICE_LOG_PATH)) - os.system("adb %s shell mkdir -p \"%s\"" % (DEVICE_STR, DEVICE_LOG_PATH)) - - RunTestApp("OpenCVEngineTestApp") diff --git a/samples/android/CMakeLists.txt b/samples/android/CMakeLists.txt index 8cad0e9fe1..dbb539fc58 100644 --- a/samples/android/CMakeLists.txt +++ b/samples/android/CMakeLists.txt @@ -15,8 +15,6 @@ add_subdirectory(tutorial-1-camerapreview) add_subdirectory(tutorial-2-mixedprocessing) add_subdirectory(tutorial-3-cameracontrol) -add_subdirectory(native-activity) - # hello-android sample if(HAVE_opencv_highgui) add_executable(hello-android hello-android/main.cpp) diff --git a/samples/android/native-activity/.classpath b/samples/android/native-activity/.classpath deleted file mode 100644 index 3f9691c5dd..0000000000 --- a/samples/android/native-activity/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/samples/android/native-activity/.cproject b/samples/android/native-activity/.cproject deleted file mode 100644 index 83ca04b55b..0000000000 --- a/samples/android/native-activity/.cproject +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/android/native-activity/.project b/samples/android/native-activity/.project deleted file mode 100644 index c20be83f60..0000000000 --- a/samples/android/native-activity/.project +++ /dev/null @@ -1,101 +0,0 @@ - - - OpenCV Sample - native-activity - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - auto,full,incremental, - - - ?name? - - - - org.eclipse.cdt.make.core.append_environment - true - - - org.eclipse.cdt.make.core.autoBuildTarget - - - - org.eclipse.cdt.make.core.buildArguments - - - - org.eclipse.cdt.make.core.buildCommand - "${NDKROOT}/ndk-build.cmd" - - - org.eclipse.cdt.make.core.cleanBuildTarget - clean - - - org.eclipse.cdt.make.core.contents - org.eclipse.cdt.make.core.activeConfigSettings - - - org.eclipse.cdt.make.core.enableAutoBuild - true - - - org.eclipse.cdt.make.core.enableCleanBuild - false - - - org.eclipse.cdt.make.core.enableFullBuild - true - - - org.eclipse.cdt.make.core.fullBuildTarget - - - - org.eclipse.cdt.make.core.stopOnError - true - - - org.eclipse.cdt.make.core.useDefaultBuildCmd - false - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/samples/android/native-activity/.settings/org.eclipse.jdt.core.prefs b/samples/android/native-activity/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b080d2ddc8..0000000000 --- a/samples/android/native-activity/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.source=1.6 diff --git a/samples/android/native-activity/AndroidManifest.xml b/samples/android/native-activity/AndroidManifest.xml deleted file mode 100644 index 55b696ba47..0000000000 --- a/samples/android/native-activity/AndroidManifest.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/android/native-activity/CMakeLists.txt b/samples/android/native-activity/CMakeLists.txt deleted file mode 100644 index 0cc0571ed9..0000000000 --- a/samples/android/native-activity/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -set(sample example-native-activity) - -if(BUILD_FAT_JAVA_LIB) - set(native_deps opencv_java) -else() - set(native_deps opencv_videoio opencv_imgcodecs opencv_highgui opencv_imgproc) -endif() - -add_android_project(${sample} "${CMAKE_CURRENT_SOURCE_DIR}" LIBRARY_DEPS ${OpenCV_BINARY_DIR} SDK_TARGET 9 ${ANDROID_SDK_TARGET} NATIVE_DEPS ${native_deps}) -if(TARGET ${sample}) - add_dependencies(opencv_android_examples ${sample}) -endif() diff --git a/samples/android/native-activity/jni/Android.mk b/samples/android/native-activity/jni/Android.mk deleted file mode 100644 index 7ae31e24ca..0000000000 --- a/samples/android/native-activity/jni/Android.mk +++ /dev/null @@ -1,14 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -include ../../sdk/native/jni/OpenCV.mk - -LOCAL_MODULE := native_activity -LOCAL_SRC_FILES := native.cpp -LOCAL_LDLIBS += -lm -llog -landroid -LOCAL_STATIC_LIBRARIES += android_native_app_glue - -include $(BUILD_SHARED_LIBRARY) - -$(call import-module,android/native_app_glue) diff --git a/samples/android/native-activity/jni/Application.mk b/samples/android/native-activity/jni/Application.mk deleted file mode 100644 index e9392cfed2..0000000000 --- a/samples/android/native-activity/jni/Application.mk +++ /dev/null @@ -1,4 +0,0 @@ -APP_ABI := armeabi-v7a -APP_STL := gnustl_static -APP_CPPFLAGS := -frtti -fexceptions -APP_PLATFORM := android-9 diff --git a/samples/android/native-activity/jni/native.cpp b/samples/android/native-activity/jni/native.cpp deleted file mode 100644 index 052b866e62..0000000000 --- a/samples/android/native-activity/jni/native.cpp +++ /dev/null @@ -1,233 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include - -#define LOG_TAG "OCV:libnative_activity" -#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) -#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) -#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) -#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) - -struct Engine -{ - android_app* app; - cv::Ptr capture; -}; - -static cv::Size calc_optimal_camera_resolution(const char* supported, int width, int height) -{ - int frame_width = 0; - int frame_height = 0; - - size_t prev_idx = 0; - size_t idx = 0; - float min_diff = FLT_MAX; - - do - { - int tmp_width; - int tmp_height; - - prev_idx = idx; - while ((supported[idx] != '\0') && (supported[idx] != ',')) - idx++; - - sscanf(&supported[prev_idx], "%dx%d", &tmp_width, &tmp_height); - - int w_diff = width - tmp_width; - int h_diff = height - tmp_height; - if ((h_diff >= 0) && (w_diff >= 0)) - { - if ((h_diff <= min_diff) && (tmp_height <= 720)) - { - frame_width = tmp_width; - frame_height = tmp_height; - min_diff = h_diff; - } - } - - idx++; // to skip comma symbol - - } while(supported[idx-1] != '\0'); - - return cv::Size(frame_width, frame_height); -} - -static void engine_draw_frame(Engine* engine, const cv::Mat& frame) -{ - if (engine->app->window == NULL) - return; // No window. - - ANativeWindow_Buffer buffer; - if (ANativeWindow_lock(engine->app->window, &buffer, NULL) < 0) - { - LOGW("Unable to lock window buffer"); - return; - } - - int32_t* pixels = (int32_t*)buffer.bits; - - int left_indent = (buffer.width-frame.cols)/2; - int top_indent = (buffer.height-frame.rows)/2; - - if (top_indent > 0) - { - memset(pixels, 0, top_indent*buffer.stride*sizeof(int32_t)); - pixels += top_indent*buffer.stride; - } - - for (int yy = 0; yy < frame.rows; yy++) - { - if (left_indent > 0) - { - memset(pixels, 0, left_indent*sizeof(int32_t)); - memset(pixels+left_indent+frame.cols, 0, (buffer.stride-frame.cols-left_indent)*sizeof(int32_t)); - } - int32_t* line = pixels + left_indent; - size_t line_size = frame.cols*4*sizeof(unsigned char); - memcpy(line, frame.ptr(yy), line_size); - // go to next line - pixels += buffer.stride; - } - ANativeWindow_unlockAndPost(engine->app->window); -} - -static void engine_handle_cmd(android_app* app, int32_t cmd) -{ - Engine* engine = (Engine*)app->userData; - switch (cmd) - { - case APP_CMD_INIT_WINDOW: - if (app->window != NULL) - { - LOGI("APP_CMD_INIT_WINDOW"); - - engine->capture = cv::makePtr(0); - - union {double prop; const char* name;} u; - u.prop = engine->capture->get(cv::CAP_PROP_ANDROID_PREVIEW_SIZES_STRING); - - int view_width = ANativeWindow_getWidth(app->window); - int view_height = ANativeWindow_getHeight(app->window); - - cv::Size camera_resolution; - if (u.name) - camera_resolution = calc_optimal_camera_resolution(u.name, 640, 480); - else - { - LOGE("Cannot get supported camera camera_resolutions"); - camera_resolution = cv::Size(ANativeWindow_getWidth(app->window), - ANativeWindow_getHeight(app->window)); - } - - if ((camera_resolution.width != 0) && (camera_resolution.height != 0)) - { - engine->capture->set(cv::CAP_PROP_FRAME_WIDTH, camera_resolution.width); - engine->capture->set(cv::CAP_PROP_FRAME_HEIGHT, camera_resolution.height); - } - - float scale = std::min((float)view_width/camera_resolution.width, - (float)view_height/camera_resolution.height); - - if (ANativeWindow_setBuffersGeometry(app->window, (int)(view_width/scale), - int(view_height/scale), WINDOW_FORMAT_RGBA_8888) < 0) - { - LOGE("Cannot set pixel format!"); - return; - } - - LOGI("Camera initialized at resolution %dx%d", camera_resolution.width, camera_resolution.height); - } - break; - case APP_CMD_TERM_WINDOW: - LOGI("APP_CMD_TERM_WINDOW"); - - engine->capture->release(); - break; - } -} - -void android_main(android_app* app) -{ - Engine engine; - - // Make sure glue isn't stripped. - app_dummy(); - - size_t engine_size = sizeof(engine); // for Eclipse CDT parser - memset((void*)&engine, 0, engine_size); - app->userData = &engine; - app->onAppCmd = engine_handle_cmd; - engine.app = app; - - float fps = 0; - cv::Mat drawing_frame; - std::queue time_queue; - - // loop waiting for stuff to do. - while (1) - { - // Read all pending events. - int ident; - int events; - android_poll_source* source; - - // Process system events - while ((ident=ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0) - { - // Process this event. - if (source != NULL) - { - source->process(app, source); - } - - // Check if we are exiting. - if (app->destroyRequested != 0) - { - LOGI("Engine thread destroy requested!"); - return; - } - } - - int64 then; - int64 now = cv::getTickCount(); - time_queue.push(now); - - // Capture frame from camera and draw it - if (!engine.capture.empty()) - { - if (engine.capture->grab()) - engine.capture->retrieve(drawing_frame, cv::CAP_ANDROID_COLOR_FRAME_RGBA); - - char buffer[256]; - sprintf(buffer, "Display performance: %dx%d @ %.3f", drawing_frame.cols, drawing_frame.rows, fps); - cv::putText(drawing_frame, std::string(buffer), cv::Point(8,64), - cv::FONT_HERSHEY_COMPLEX_SMALL, 1, cv::Scalar(0,255,0,255)); - engine_draw_frame(&engine, drawing_frame); - } - - if (time_queue.size() >= 2) - then = time_queue.front(); - else - then = 0; - - if (time_queue.size() >= 25) - time_queue.pop(); - - fps = time_queue.size() * (float)cv::getTickFrequency() / (now-then); - } -} diff --git a/samples/android/native-activity/res/drawable/icon.png b/samples/android/native-activity/res/drawable/icon.png deleted file mode 100644 index 630454927b..0000000000 Binary files a/samples/android/native-activity/res/drawable/icon.png and /dev/null differ diff --git a/samples/android/native-activity/res/values/strings.xml b/samples/android/native-activity/res/values/strings.xml deleted file mode 100644 index 888534efe0..0000000000 --- a/samples/android/native-activity/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - OCV Native Activity - diff --git a/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java b/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java deleted file mode 100644 index 0ffb84c3a7..0000000000 --- a/samples/android/native-activity/src/org/opencv/samples/NativeActivity/CvNativeActivity.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.opencv.samples.NativeActivity; - -import org.opencv.android.BaseLoaderCallback; -import org.opencv.android.LoaderCallbackInterface; -import org.opencv.android.OpenCVLoader; - -import android.app.Activity; -import android.content.Intent; -import android.util.Log; - -public class CvNativeActivity extends Activity { - private static final String TAG = "OCVSample::Activity"; - - private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: - { - Log.i(TAG, "OpenCV loaded successfully"); - System.loadLibrary("native_activity"); - Intent intent = new Intent(CvNativeActivity.this, android.app.NativeActivity.class); - CvNativeActivity.this.startActivity(intent); - CvNativeActivity.this.finish(); - } break; - default: - { - super.onManagerConnected(status); - } break; - } - } - }; - - public CvNativeActivity() { - Log.i(TAG, "Instantiated new " + this.getClass()); - } - - @Override - public void onResume() - { - super.onResume(); - if (!OpenCVLoader.initDebug()) { - Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); - OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback); - } else { - Log.d(TAG, "OpenCV library found inside package. Using it!"); - mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); - } - } -} diff --git a/samples/android/tutorial-1-camerapreview/res/layout/tutorial1_surface_view.xml b/samples/android/tutorial-1-camerapreview/res/layout/tutorial1_surface_view.xml index 40f5f49326..77f1c5fba8 100644 --- a/samples/android/tutorial-1-camerapreview/res/layout/tutorial1_surface_view.xml +++ b/samples/android/tutorial-1-camerapreview/res/layout/tutorial1_surface_view.xml @@ -12,12 +12,4 @@ opencv:show_fps="true" opencv:camera_id="any" /> - - diff --git a/samples/android/tutorial-1-camerapreview/src/org/opencv/samples/tutorial1/Tutorial1Activity.java b/samples/android/tutorial-1-camerapreview/src/org/opencv/samples/tutorial1/Tutorial1Activity.java index f0f2fb28c9..2984c295c9 100644 --- a/samples/android/tutorial-1-camerapreview/src/org/opencv/samples/tutorial1/Tutorial1Activity.java +++ b/samples/android/tutorial-1-camerapreview/src/org/opencv/samples/tutorial1/Tutorial1Activity.java @@ -54,10 +54,7 @@ public class Tutorial1Activity extends Activity implements CvCameraViewListener2 setContentView(R.layout.tutorial1_surface_view); - if (mIsJavaCamera) - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); - else - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view); + mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); @@ -91,40 +88,6 @@ public class Tutorial1Activity extends Activity implements CvCameraViewListener2 mOpenCvCameraView.disableView(); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - Log.i(TAG, "called onCreateOptionsMenu"); - mItemSwitchCamera = menu.add("Toggle Native/Java camera"); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - String toastMesage = new String(); - Log.i(TAG, "called onOptionsItemSelected; selected item: " + item); - - if (item == mItemSwitchCamera) { - mOpenCvCameraView.setVisibility(SurfaceView.GONE); - mIsJavaCamera = !mIsJavaCamera; - - if (mIsJavaCamera) { - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); - toastMesage = "Java Camera"; - } else { - mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view); - toastMesage = "Native Camera"; - } - - mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); - mOpenCvCameraView.setCvCameraViewListener(this); - mOpenCvCameraView.enableView(); - Toast toast = Toast.makeText(this, toastMesage, Toast.LENGTH_LONG); - toast.show(); - } - - return true; - } - public void onCameraViewStarted(int width, int height) { } diff --git a/samples/directx/CMakeLists.txt b/samples/directx/CMakeLists.txt index 21ada16ed8..d0e60bdf33 100644 --- a/samples/directx/CMakeLists.txt +++ b/samples/directx/CMakeLists.txt @@ -31,7 +31,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) if(MSVC AND NOT BUILD_SHARED_LIBS) set_target_properties(${the_target} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /DEBUG") endif() - install(TARGETS ${the_target} RUNTIME DESTINATION "${OPENCV_SAMPLES_BIN_INSTALL_PATH}/${project}" COMPONENT main) + install(TARGETS ${the_target} RUNTIME DESTINATION "${OPENCV_SAMPLES_BIN_INSTALL_PATH}/${project}" COMPONENT samples) endif() ENDMACRO() diff --git a/samples/tapi/CMakeLists.txt b/samples/tapi/CMakeLists.txt index 6f8d873efe..74f51339dd 100644 --- a/samples/tapi/CMakeLists.txt +++ b/samples/tapi/CMakeLists.txt @@ -31,7 +31,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) if(MSVC AND NOT BUILD_SHARED_LIBS) set_target_properties(${the_target} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /DEBUG") endif() - install(TARGETS ${the_target} RUNTIME DESTINATION "${OPENCV_SAMPLES_BIN_INSTALL_PATH}/${project}" COMPONENT main) + install(TARGETS ${the_target} RUNTIME DESTINATION "${OPENCV_SAMPLES_BIN_INSTALL_PATH}/${project}" COMPONENT samples) endif() ENDMACRO()