CMakeLists.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. set(VIDEOIO_ENABLE_PLUGINS_DEFAULT ON)
  2. if(EMSCRIPTEN OR IOS OR XROS OR WINRT)
  3. set(VIDEOIO_ENABLE_PLUGINS_DEFAULT OFF)
  4. endif()
  5. set(VIDEOIO_PLUGIN_LIST "" CACHE STRING "List of videoio backends to be compiled as plugins (ffmpeg, gstreamer, mfx, msmf or special value 'all')")
  6. set(VIDEOIO_ENABLE_PLUGINS "${VIDEOIO_ENABLE_PLUGINS_DEFAULT}" CACHE BOOL "Allow building and using of videoio plugins")
  7. mark_as_advanced(VIDEOIO_PLUGIN_LIST VIDEOIO_ENABLE_PLUGINS)
  8. string(REPLACE "," ";" VIDEOIO_PLUGIN_LIST "${VIDEOIO_PLUGIN_LIST}") # support comma-separated list (,) too
  9. string(TOLOWER "${VIDEOIO_PLUGIN_LIST}" VIDEOIO_PLUGIN_LIST)
  10. if(NOT VIDEOIO_ENABLE_PLUGINS)
  11. if(VIDEOIO_PLUGIN_LIST)
  12. message(WARNING "VideoIO: plugins are disabled through VIDEOIO_ENABLE_PLUGINS, so VIDEOIO_PLUGIN_LIST='${VIDEOIO_PLUGIN_LIST}' is ignored")
  13. set(VIDEOIO_PLUGIN_LIST "")
  14. endif()
  15. else()
  16. # Make virtual opencv_videoio_plugins target
  17. if(NOT TARGET opencv_videoio_plugins)
  18. add_custom_target(opencv_videoio_plugins ALL)
  19. endif()
  20. endif()
  21. ocv_add_module(videoio opencv_imgproc opencv_imgcodecs WRAP java objc python)
  22. set(videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/precomp.hpp)
  23. set(videoio_srcs
  24. "${CMAKE_CURRENT_LIST_DIR}/src/videoio_registry.cpp"
  25. "${CMAKE_CURRENT_LIST_DIR}/src/videoio_c.cpp"
  26. "${CMAKE_CURRENT_LIST_DIR}/src/cap.cpp"
  27. "${CMAKE_CURRENT_LIST_DIR}/src/cap_images.cpp"
  28. "${CMAKE_CURRENT_LIST_DIR}/src/cap_mjpeg_encoder.cpp"
  29. "${CMAKE_CURRENT_LIST_DIR}/src/cap_mjpeg_decoder.cpp"
  30. "${CMAKE_CURRENT_LIST_DIR}/src/backend_plugin.cpp"
  31. "${CMAKE_CURRENT_LIST_DIR}/src/backend_static.cpp"
  32. "${CMAKE_CURRENT_LIST_DIR}/src/container_avi.cpp")
  33. file(GLOB videoio_ext_hdrs
  34. "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/*.hpp"
  35. "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.hpp"
  36. "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.h"
  37. "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/legacy/*.h")
  38. if(OPENCV_DEBUG_POSTFIX)
  39. ocv_append_source_file_compile_definitions("${CMAKE_CURRENT_LIST_DIR}/src/backend_plugin.cpp" "DEBUG_POSTFIX=${OPENCV_DEBUG_POSTFIX}")
  40. endif()
  41. # Removing WinRT API headers by default
  42. list(REMOVE_ITEM videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_winrt.hpp")
  43. # Remove iOS API header by default
  44. list(REMOVE_ITEM videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_ios.h")
  45. if(DEFINED WINRT AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
  46. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW")
  47. endif()
  48. # Dependencies used by the implementation referenced
  49. # below are not available on WinRT 8.0.
  50. # Enabling it for WiRT 8.1+ only.
  51. if(DEFINED WINRT AND NOT DEFINED WINRT_8_0 AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
  52. # WinRT detected. Adding WinRT API header
  53. message(STATUS " ${name}: WinRT detected. Adding WinRT API header")
  54. list(APPEND videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_winrt.hpp")
  55. # Adding WinRT internal sources and headers
  56. list(APPEND videoio_srcs
  57. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_capture.cpp
  58. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_bridge.cpp
  59. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_video.cpp
  60. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/CaptureFrameGrabber.cpp
  61. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaStreamSink.cpp)
  62. list(APPEND videoio_hdrs
  63. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_capture.hpp
  64. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_bridge.hpp
  65. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_video.hpp
  66. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MFIncludes.hpp
  67. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/CaptureFrameGrabber.hpp
  68. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaSink.hpp
  69. ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaStreamSink.hpp)
  70. endif()
  71. include(${CMAKE_CURRENT_LIST_DIR}/cmake/plugin.cmake)
  72. set(tgts "PRIVATE")
  73. if(TARGET ocv.3rdparty.mediasdk)
  74. if("mfx" IN_LIST VIDEOIO_PLUGIN_LIST OR VIDEOIO_PLUGIN_LIST STREQUAL "all")
  75. ocv_create_builtin_videoio_plugin("opencv_videoio_intel_mfx" ocv.3rdparty.mediasdk "cap_mfx_common.cpp" "cap_mfx_reader.cpp" "cap_mfx_writer.cpp" "cap_mfx_plugin.cpp")
  76. else()
  77. list(APPEND videoio_srcs
  78. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_common.cpp
  79. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_reader.cpp
  80. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_writer.cpp)
  81. list(APPEND videoio_hdrs
  82. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_common.hpp
  83. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_reader.hpp
  84. ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_writer.hpp)
  85. list(APPEND tgts ocv.3rdparty.mediasdk)
  86. endif()
  87. endif()
  88. if(TARGET ocv.3rdparty.dshow)
  89. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dshow.cpp)
  90. list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dshow.hpp)
  91. list(APPEND tgts ocv.3rdparty.dshow)
  92. endif()
  93. if(TARGET ocv.3rdparty.msmf)
  94. if("msmf" IN_LIST VIDEOIO_PLUGIN_LIST OR VIDEOIO_PLUGIN_LIST STREQUAL "all")
  95. ocv_create_builtin_videoio_plugin("opencv_videoio_msmf" ocv.3rdparty.msmf "cap_msmf.cpp")
  96. else()
  97. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_msmf.hpp)
  98. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_msmf.cpp)
  99. list(APPEND tgts ocv.3rdparty.msmf)
  100. endif()
  101. endif()
  102. if(TARGET ocv.3rdparty.xine)
  103. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_xine.cpp)
  104. list(APPEND tgts ocv.3rdparty.xine)
  105. endif()
  106. if(TARGET ocv.3rdparty.dc1394_2)
  107. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dc1394_v2.cpp)
  108. list(APPEND tgts ocv.3rdparty.dc1394_2)
  109. endif()
  110. if(TARGET ocv.3rdparty.gstreamer)
  111. if("gstreamer" IN_LIST VIDEOIO_PLUGIN_LIST OR VIDEOIO_PLUGIN_LIST STREQUAL "all")
  112. ocv_create_builtin_videoio_plugin("opencv_videoio_gstreamer" ocv.3rdparty.gstreamer "cap_gstreamer.cpp")
  113. else()
  114. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gstreamer.cpp)
  115. list(APPEND tgts ocv.3rdparty.gstreamer)
  116. endif()
  117. endif()
  118. if(TARGET ocv.3rdparty.v4l)
  119. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_v4l.cpp)
  120. list(APPEND tgts ocv.3rdparty.v4l)
  121. endif()
  122. if(TARGET ocv.3rdparty.openni2)
  123. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_openni2.cpp)
  124. list(APPEND tgts ocv.3rdparty.openni2)
  125. endif()
  126. if(TARGET ocv.3rdparty.ximea)
  127. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ximea.cpp)
  128. list(APPEND tgts ocv.3rdparty.ximea)
  129. endif()
  130. if(TARGET ocv.3rdparty.ueye)
  131. if("ueye" IN_LIST VIDEOIO_PLUGIN_LIST OR VIDEOIO_PLUGIN_LIST STREQUAL "all")
  132. ocv_create_builtin_videoio_plugin("opencv_videoio_ueye" ocv.3rdparty.ueye "cap_ueye.cpp")
  133. else()
  134. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ueye.cpp)
  135. list(APPEND tgts ocv.3rdparty.ueye)
  136. endif()
  137. endif()
  138. if(TARGET ocv.3rdparty.ffmpeg)
  139. if(HAVE_FFMPEG_WRAPPER)
  140. list(APPEND tgts ocv.3rdparty.ffmpeg)
  141. elseif("ffmpeg" IN_LIST VIDEOIO_PLUGIN_LIST OR VIDEOIO_PLUGIN_LIST STREQUAL "all")
  142. ocv_create_builtin_videoio_plugin("opencv_videoio_ffmpeg" ocv.3rdparty.ffmpeg "cap_ffmpeg.cpp")
  143. if(TARGET ocv.3rdparty.ffmpeg.plugin_deps)
  144. ocv_target_link_libraries(opencv_videoio_ffmpeg ocv.3rdparty.ffmpeg.plugin_deps)
  145. endif()
  146. if(TARGET ocv.3rdparty.mediasdk
  147. AND NOT OPENCV_FFMPEG_DISABLE_MEDIASDK
  148. )
  149. ocv_target_link_libraries(opencv_videoio_ffmpeg ocv.3rdparty.mediasdk)
  150. endif()
  151. else()
  152. list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ffmpeg_impl.hpp)
  153. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ffmpeg.cpp)
  154. list(APPEND tgts ocv.3rdparty.ffmpeg)
  155. if(TARGET ocv.3rdparty.ffmpeg.builtin_deps)
  156. list(APPEND tgts ocv.3rdparty.ffmpeg.builtin_deps)
  157. endif()
  158. if(TARGET ocv.3rdparty.mediasdk
  159. AND NOT OPENCV_FFMPEG_DISABLE_MEDIASDK
  160. )
  161. list(APPEND tgts ocv.3rdparty.mediasdk)
  162. endif()
  163. endif()
  164. endif()
  165. if(TARGET ocv.3rdparty.pvapi)
  166. set(videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_pvapi.cpp ${videoio_srcs})
  167. list(APPEND tgts ocv.3rdparty.pvapi)
  168. endif()
  169. if(TARGET ocv.3rdparty.aravis)
  170. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_aravis.cpp)
  171. list(APPEND tgts ocv.3rdparty.aravis)
  172. endif()
  173. if(TARGET ocv.3rdparty.avfoundation)
  174. if(IOS OR XROS)
  175. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_avfoundation.mm)
  176. else()
  177. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_avfoundation_mac.mm)
  178. endif()
  179. list(APPEND tgts ocv.3rdparty.avfoundation)
  180. endif()
  181. if(TARGET ocv.3rdparty.librealsense)
  182. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_librealsense.cpp)
  183. list(APPEND tgts ocv.3rdparty.librealsense)
  184. endif()
  185. if(TARGET ocv.3rdparty.gphoto2)
  186. list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gphoto2.cpp)
  187. list(APPEND tgts ocv.3rdparty.gphoto2)
  188. endif()
  189. if(TARGET ocv.3rdparty.cap_ios)
  190. list(APPEND videoio_srcs
  191. ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_abstract_camera.mm
  192. ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_photo_camera.mm
  193. ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_video_camera.mm)
  194. list(APPEND tgts ocv.3rdparty.cap_ios)
  195. list(APPEND videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_ios.h")
  196. endif()
  197. if(TARGET ocv.3rdparty.android_mediandk)
  198. list(APPEND videoio_srcs
  199. ${CMAKE_CURRENT_LIST_DIR}/src/cap_android_mediandk.cpp)
  200. list(APPEND tgts ocv.3rdparty.android_mediandk)
  201. endif()
  202. if(TARGET ocv.3rdparty.android_native_camera)
  203. list(APPEND videoio_srcs
  204. ${CMAKE_CURRENT_LIST_DIR}/src/cap_android_camera.cpp)
  205. list(APPEND tgts ocv.3rdparty.android_native_camera)
  206. endif()
  207. if(TARGET ocv.3rdparty.obsensor)
  208. if(OBSENSOR_USE_ORBBEC_SDK)
  209. list(APPEND videoio_srcs
  210. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor_liborbbec.hpp
  211. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor_liborbbec.cpp)
  212. else()
  213. list(APPEND videoio_srcs
  214. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor_capture.cpp)
  215. list(APPEND videoio_hdrs
  216. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor_capture.hpp
  217. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_stream_channel_interface.hpp)
  218. if(HAVE_OBSENSOR_MSMF)
  219. list(APPEND videoio_srcs
  220. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_uvc_stream_channel.cpp
  221. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_stream_channel_msmf.cpp)
  222. list(APPEND videoio_hdrs
  223. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_uvc_stream_channel.hpp
  224. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_stream_channel_msmf.hpp)
  225. elseif(HAVE_OBSENSOR_V4L2)
  226. list(APPEND videoio_srcs
  227. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_uvc_stream_channel.cpp
  228. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_stream_channel_v4l2.cpp)
  229. list(APPEND videoio_hdrs
  230. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_uvc_stream_channel.hpp
  231. ${CMAKE_CURRENT_LIST_DIR}/src/cap_obsensor/obsensor_stream_channel_v4l2.hpp)
  232. endif()
  233. endif()
  234. list(APPEND tgts ocv.3rdparty.obsensor)
  235. endif()
  236. if(tgts STREQUAL "PRIVATE")
  237. set(tgts "")
  238. endif()
  239. ocv_install_used_external_targets(${tgts})
  240. ocv_set_module_sources(HEADERS ${videoio_ext_hdrs} ${videoio_hdrs} SOURCES ${videoio_srcs})
  241. ocv_module_include_directories()
  242. ocv_create_module()
  243. ocv_add_accuracy_tests(${tgts})
  244. ocv_add_perf_tests(${tgts})
  245. if(VIDEOIO_ENABLE_PLUGINS)
  246. ocv_target_compile_definitions(${the_module} PRIVATE ENABLE_PLUGINS)
  247. endif()
  248. ocv_target_link_libraries(${the_module} LINK_PRIVATE ${tgts})
  249. # copy FFmpeg dll to the output folder
  250. if(WIN32 AND HAVE_FFMPEG_WRAPPER)
  251. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  252. set(FFMPEG_SUFFIX _64)
  253. endif()
  254. set(ffmpeg_dir "${OpenCV_BINARY_DIR}/3rdparty/ffmpeg")
  255. set(ffmpeg_bare_name "opencv_videoio_ffmpeg${FFMPEG_SUFFIX}.dll")
  256. set(ffmpeg_bare_name_ver "opencv_videoio_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll")
  257. set(ffmpeg_path "${ffmpeg_dir}/${ffmpeg_bare_name}")
  258. if(MSVC_IDE)
  259. execute_process(
  260. COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Release/${ffmpeg_bare_name_ver}"
  261. COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Debug/${ffmpeg_bare_name_ver}")
  262. elseif(MSVC AND (CMAKE_GENERATOR MATCHES "Visual"))
  263. execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${ffmpeg_bare_name_ver}")
  264. else()
  265. execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${ffmpeg_bare_name_ver}")
  266. endif()
  267. install(FILES "${ffmpeg_path}" DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs RENAME "${ffmpeg_bare_name_ver}")
  268. if(INSTALL_CREATE_DISTRIB)
  269. install(FILES "${ffmpeg_dir}/opencv_videoio_ffmpeg${FFMPEG_SUFFIX}.dll" DESTINATION "bin/" COMPONENT libs RENAME "opencv_videoio_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll")
  270. endif()
  271. endif()