1 set(the_description "Media I/O")
2 ocv_add_module(videoio opencv_imgproc opencv_imgcodecs WRAP java python)
4 # ----------------------------------------------------------------------------
5 # CMake file for videoio. See root CMakeLists.txt
6 # Some parts taken from version of Hartmut Seichter, HIT Lab NZ.
7 # Jose Luis Blanco, 2008
8 # ----------------------------------------------------------------------------
10 if(DEFINED WINRT AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
11 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW")
15 ocv_include_directories(${ZLIB_INCLUDE_DIRS})
16 list(APPEND VIDEOIO_LIBRARIES ${ZLIB_LIBRARIES})
20 ${CMAKE_CURRENT_LIST_DIR}/src/precomp.hpp
23 ${CMAKE_CURRENT_LIST_DIR}/src/videoio_registry.cpp
24 ${CMAKE_CURRENT_LIST_DIR}/src/videoio_c.cpp
25 ${CMAKE_CURRENT_LIST_DIR}/src/cap.cpp
26 ${CMAKE_CURRENT_LIST_DIR}/src/cap_images.cpp
27 ${CMAKE_CURRENT_LIST_DIR}/src/cap_mjpeg_encoder.cpp
28 ${CMAKE_CURRENT_LIST_DIR}/src/cap_mjpeg_decoder.cpp
29 ${CMAKE_CURRENT_LIST_DIR}/src/container_avi.cpp
32 file(GLOB videoio_ext_hdrs
33 "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/*.hpp"
34 "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.hpp"
35 "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/*.h")
37 # Removing WinRT API headers by default
38 list(REMOVE_ITEM videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_winrt.hpp")
40 # Dependencies used by the implementation referenced
41 # below are not available on WinRT 8.0.
42 # Enabling it for WiRT 8.1+ only.
43 if(DEFINED WINRT AND NOT DEFINED WINRT_8_0 AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
45 # WinRT detected. Adding WinRT API header
46 message(STATUS " ${name}: WinRT detected. Adding WinRT API header")
47 list(APPEND videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_winrt.hpp")
49 # Adding WinRT internal sources and headers
50 list(APPEND videoio_srcs
51 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_capture.cpp
52 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_bridge.cpp
53 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_video.cpp
54 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/CaptureFrameGrabber.cpp
55 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaStreamSink.cpp)
56 list(APPEND videoio_hdrs
57 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_capture.hpp
58 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_bridge.hpp
59 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt_video.hpp
60 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MFIncludes.hpp
61 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/CaptureFrameGrabber.hpp
62 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaSink.hpp
63 ${CMAKE_CURRENT_LIST_DIR}/src/cap_winrt/MediaStreamSink.hpp)
67 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_common.cpp)
68 list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_common.hpp)
69 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_reader.cpp)
70 list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_reader.hpp)
71 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_writer.cpp)
72 list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_mfx_writer.hpp)
73 list(APPEND VIDEOIO_LIBRARIES mfx)
77 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_cmu.cpp)
80 if (WIN32 AND HAVE_DSHOW)
81 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dshow.cpp)
82 list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dshow.hpp)
84 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTRSAFE_NO_DEPRECATE")
88 if(WIN32 AND HAVE_MSMF)
89 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_msmf.hpp)
90 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_msmf.cpp)
92 add_definitions(-DHAVE_MSMF_DXVA)
96 if (WIN32 AND HAVE_VFW)
97 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_vfw.cpp)
101 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_xine.cpp)
105 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dc1394_v2.cpp)
109 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dc1394.cpp)
114 INCLUDE_DIRECTORIES(${GSTREAMER_INCLUDE_DIR})
115 list(APPEND VIDEOIO_LIBRARIES ${GSTREAMER_LIBRARIES})
117 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gstreamer.cpp)
118 endif(HAVE_GSTREAMER)
121 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_unicap.cpp)
125 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_libv4l.cpp)
126 elseif(HAVE_CAMV4L2 OR HAVE_VIDEOIO)
127 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_v4l.cpp)
131 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_openni.cpp)
132 ocv_include_directories(${OPENNI_INCLUDE_DIR})
133 list(APPEND VIDEOIO_LIBRARIES ${OPENNI_LIBRARY})
137 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_openni2.cpp)
138 ocv_include_directories(${OPENNI2_INCLUDE_DIR})
139 list(APPEND VIDEOIO_LIBRARIES ${OPENNI2_LIBRARY})
143 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ximea.cpp)
145 ocv_include_directories(${XIMEA_PATH})
147 if(XIMEA_LIBRARY_DIR)
148 link_directories("${XIMEA_LIBRARY_DIR}")
151 list(APPEND VIDEOIO_LIBRARIES xiapi64)
153 list(APPEND VIDEOIO_LIBRARIES xiapi32)
155 list(APPEND VIDEOIO_LIBRARIES "-framework m3api")
157 list(APPEND VIDEOIO_LIBRARIES m3api)
162 list(APPEND videoio_hdrs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ffmpeg_impl.hpp)
163 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ffmpeg.cpp)
164 if(UNIX AND BZIP2_LIBRARIES)
165 list(APPEND VIDEOIO_LIBRARIES ${BZIP2_LIBRARIES})
168 list(APPEND VIDEOIO_LIBRARIES "-framework VideoDecodeAcceleration" bz2)
170 if(HAVE_FFMPEG_WRAPPER)
171 add_definitions(-DHAVE_FFMPEG_WRAPPER=1)
176 add_definitions(-DHAVE_PVAPI)
177 add_definitions(${PVAPI_DEFINITIONS})
178 ocv_include_directories(${PVAPI_INCLUDE_PATH})
179 set(videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_pvapi.cpp ${videoio_srcs})
180 list(APPEND VIDEOIO_LIBRARIES ${PVAPI_LIBRARY})
184 add_definitions(-DHAVE_GIGE_API)
185 ocv_include_directories(${GIGEAPI_INCLUDE_PATH})
186 set(videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_giganetix.cpp ${videoio_srcs})
187 list(APPEND VIDEOIO_LIBRARIES ${GIGEAPI_LIBRARIES})
188 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_giganetix.cpp)
192 add_definitions(-DHAVE_ARAVIS_API)
193 ocv_include_directories(${ARAVIS_INCLUDE_PATH})
194 set(videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_aravis.cpp ${videoio_srcs})
195 list(APPEND VIDEOIO_LIBRARIES ${ARAVIS_LIBRARIES})
196 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_aravis.cpp)
197 endif(HAVE_ARAVIS_API)
199 if(HAVE_AVFOUNDATION)
201 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_avfoundation.mm)
202 list(APPEND VIDEOIO_LIBRARIES "-framework AVFoundation" "-framework QuartzCore")
204 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_avfoundation_mac.mm)
205 list(APPEND VIDEOIO_LIBRARIES "-framework Cocoa" "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore")
210 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_qt.cpp)
211 list(APPEND VIDEOIO_LIBRARIES "-framework Carbon" "-framework QuickTime" "-framework CoreFoundation" "-framework QuartzCore")
213 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_qtkit.mm)
214 list(APPEND VIDEOIO_LIBRARIES "-framework QTKit" "-framework QuartzCore" "-framework AppKit")
218 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_intelperc.cpp)
219 ocv_include_directories(${INTELPERC_INCLUDE_DIR})
220 list(APPEND VIDEOIO_LIBRARIES ${INTELPERC_LIBRARIES})
221 endif(HAVE_INTELPERC)
224 list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gphoto2.cpp)
228 list(APPEND videoio_srcs
229 ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_abstract_camera.mm
230 ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_photo_camera.mm
231 ${CMAKE_CURRENT_LIST_DIR}/src/cap_ios_video_camera.mm)
233 list(APPEND VIDEOIO_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework UIKit")
237 # these variables are set by 'ocv_append_build_options(VIDEOIO ...)'
238 foreach(P ${VIDEOIO_INCLUDE_DIRS})
239 ocv_include_directories(${P})
242 foreach(P ${VIDEOIO_LIBRARY_DIRS})
243 link_directories(${P})
247 source_group("Src" FILES ${videoio_srcs} ${videoio_hdrs})
248 source_group("Include" FILES ${videoio_ext_hdrs})
249 ocv_set_module_sources(HEADERS ${videoio_ext_hdrs} SOURCES ${videoio_srcs} ${videoio_hdrs})
250 ocv_module_include_directories()
252 ocv_create_module(${VIDEOIO_LIBRARIES})
254 macro(ocv_videoio_configure_target)
256 add_apple_compiler_options(the_module)
260 set_target_properties(${the_module} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:atlthunk.lib /NODEFAULTLIB:atlsd.lib /NODEFAULTLIB:libcmt.lib /DEBUG")
261 if(DEFINED WINRT AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
262 set_target_properties(${the_module} PROPERTIES VS_DESKTOP_EXTENSIONS_VERSION "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
266 ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations)
268 if(WIN32 AND HAVE_FFMPEG_WRAPPER)
269 #copy ffmpeg dll to the output folder
270 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
271 set(FFMPEG_SUFFIX _64)
274 set(ffmpeg_dir "${OpenCV_BINARY_DIR}/3rdparty/ffmpeg")
275 set(ffmpeg_bare_name "opencv_ffmpeg${FFMPEG_SUFFIX}.dll")
276 set(ffmpeg_bare_name_ver "opencv_ffmpeg${OPENCV_DLLVERSION}${FFMPEG_SUFFIX}.dll")
277 set(ffmpeg_path "${ffmpeg_dir}/${ffmpeg_bare_name}")
280 add_custom_command(TARGET ${the_module} POST_BUILD
281 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Release/${ffmpeg_bare_name_ver}"
282 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/Debug/${ffmpeg_bare_name_ver}"
283 COMMENT "Copying ${ffmpeg_path} to the output directory")
284 elseif(MSVC AND (CMAKE_GENERATOR MATCHES "Visual"))
285 add_custom_command(TARGET ${the_module} POST_BUILD
286 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}/${ffmpeg_bare_name_ver}"
287 COMMENT "Copying ${ffmpeg_path} to the output directory")
289 add_custom_command(TARGET ${the_module} POST_BUILD
290 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${ffmpeg_path}" "${EXECUTABLE_OUTPUT_PATH}/${ffmpeg_bare_name_ver}"
291 COMMENT "Copying ${ffmpeg_path} to the output directory")
294 install(FILES "${ffmpeg_path}" DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs RENAME "${ffmpeg_bare_name_ver}")
296 if(INSTALL_CREATE_DISTRIB)
297 install(FILES "${ffmpeg_dir}/opencv_ffmpeg.dll" DESTINATION "bin/" COMPONENT libs RENAME "opencv_ffmpeg${OPENCV_DLLVERSION}.dll")
298 install(FILES "${ffmpeg_dir}/opencv_ffmpeg_64.dll" DESTINATION "bin/" COMPONENT libs RENAME "opencv_ffmpeg${OPENCV_DLLVERSION}_64.dll")
303 if(NOT BUILD_opencv_world)
304 ocv_videoio_configure_target()
307 ocv_add_accuracy_tests()