Skip to content

Commit 0553543

Browse files
authored
Merge pull request opencv#19597 from komakai:android-ndk-camera
Android NDK camera support * Add native camera video backend for Android * In the event of a "No buffer available error" wait for the appropriate callback and retry * Fix stale context when creating a new AndroidCameraCapture * Add property handling
1 parent 543379d commit 0553543

File tree

10 files changed

+749
-3
lines changed

10 files changed

+749
-3
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,9 @@ OCV_OPTION(WITH_QUIRC "Include library QR-code decoding" ON
437437
OCV_OPTION(WITH_ANDROID_MEDIANDK "Use Android Media NDK for Video I/O (Android)" (ANDROID_NATIVE_API_LEVEL GREATER 20)
438438
VISIBLE_IF ANDROID
439439
VERIFY HAVE_ANDROID_MEDIANDK)
440+
OCV_OPTION(WITH_ANDROID_NATIVE_CAMERA "Use Android NDK for Camera I/O (Android)" (ANDROID_NATIVE_API_LEVEL GREATER 23)
441+
VISIBLE_IF ANDROID
442+
VERIFY HAVE_ANDROID_NATIVE_CAMERA)
440443
OCV_OPTION(WITH_TENGINE "Include Arm Inference Tengine support" OFF
441444
VISIBLE_IF (ARM OR AARCH64) AND (UNIX OR ANDROID) AND NOT IOS
442445
VERIFY HAVE_TENGINE)

cmake/android/android_gradle_projects.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ set(GRADLE_VERSION "5.6.4" CACHE STRING "Gradle version")
66
message(STATUS "Gradle version: ${GRADLE_VERSION}")
77

88
set(ANDROID_COMPILE_SDK_VERSION "26" CACHE STRING "Android compileSdkVersion")
9-
set(ANDROID_MIN_SDK_VERSION "21" CACHE STRING "Android minSdkVersion")
9+
if(ANDROID_NATIVE_API_LEVEL GREATER 21)
10+
set(ANDROID_MIN_SDK_VERSION "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android minSdkVersion")
11+
else()
12+
set(ANDROID_MIN_SDK_VERSION "21" CACHE STRING "Android minSdkVersion")
13+
endif()
1014
set(ANDROID_TARGET_SDK_VERSION "26" CACHE STRING "Android minSdkVersion")
1115

1216
set(ANDROID_BUILD_BASE_DIR "${OpenCV_BINARY_DIR}/opencv_android" CACHE INTERNAL "")

modules/java/android_sdk/CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ FILE(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${JAVA_INSTALL_ROOT
9696

9797
ocv_update(ANDROID_COMPILE_SDK_VERSION "27")
9898
ocv_update(ANDROID_MIN_SDK_VERSION "14")
99-
ocv_update(ANDROID_TARGET_SDK_VERSION "21")
99+
if(ANDROID_NATIVE_API_LEVEL GREATER 21)
100+
ocv_update(ANDROID_TARGET_SDK_VERSION "${ANDROID_NATIVE_API_LEVEL}")
101+
else()
102+
ocv_update(ANDROID_TARGET_SDK_VERSION "21")
103+
endif()
100104
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.gradle.in" "${CMAKE_CURRENT_BINARY_DIR}/build.gradle" @ONLY)
101105
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/build.gradle" DESTINATION ${JAVA_INSTALL_ROOT}/.. COMPONENT java)
102106

modules/videoio/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ if(TARGET ocv.3rdparty.android_mediandk)
201201
list(APPEND tgts ocv.3rdparty.android_mediandk)
202202
endif()
203203

204+
if(TARGET ocv.3rdparty.android_native_camera)
205+
list(APPEND videoio_srcs
206+
${CMAKE_CURRENT_LIST_DIR}/src/cap_android_camera.cpp)
207+
list(APPEND tgts ocv.3rdparty.android_native_camera)
208+
endif()
209+
204210
ocv_set_module_sources(HEADERS ${videoio_ext_hdrs} ${videoio_hdrs} SOURCES ${videoio_srcs})
205211
ocv_module_include_directories()
206212
ocv_create_module()
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# if(ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER_EQUAL 24) <-- would be nicer but requires CMake 3.7 or later
2+
if(ANDROID AND ANDROID_NATIVE_API_LEVEL GREATER 23)
3+
set(HAVE_ANDROID_NATIVE_CAMERA TRUE)
4+
set(libs "-landroid -llog -lcamera2ndk")
5+
ocv_add_external_target(android_native_camera "" "${libs}" "HAVE_ANDROID_NATIVE_CAMERA")
6+
endif()
7+
8+
set(HAVE_ANDROID_NATIVE_CAMERA ${HAVE_ANDROID_NATIVE_CAMERA} PARENT_SCOPE)

modules/videoio/cmake/init.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ add_backend("dshow" WITH_DSHOW)
3737
add_backend("msmf" WITH_MSMF)
3838

3939
add_backend("android_mediandk" WITH_ANDROID_MEDIANDK)
40+
add_backend("android_camera" WITH_ANDROID_NATIVE_CAMERA)

0 commit comments

Comments
 (0)