Merge pull request #16100 from sajarindider:brief
[platform/upstream/opencv.git] / modules / videoio / CMakeLists.txt
1 set(the_description "Media I/O")
2 ocv_add_module(videoio opencv_imgproc opencv_imgcodecs WRAP java python)
3
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 # ----------------------------------------------------------------------------
9
10 if(DEFINED WINRT AND NOT DEFINED ENABLE_WINRT_MODE_NATIVE)
11   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW")
12 endif()
13
14 if(APPLE)
15   ocv_include_directories(${ZLIB_INCLUDE_DIRS})
16   list(APPEND VIDEOIO_LIBRARIES ${ZLIB_LIBRARIES})
17 endif()
18
19 set(videoio_hdrs
20     ${CMAKE_CURRENT_LIST_DIR}/src/precomp.hpp
21     )
22 set(videoio_srcs
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
30     )
31
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")
36
37 # Removing WinRT API headers by default
38 list(REMOVE_ITEM videoio_ext_hdrs "${CMAKE_CURRENT_LIST_DIR}/include/opencv2/${name}/cap_winrt.hpp")
39
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)
44
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")
48
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)
64 endif()
65
66 if(HAVE_MFX)
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)
74 endif()
75
76 if(WIN32 AND NOT ARM)
77   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_cmu.cpp)
78 endif()
79
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)
83   if(MINGW AND X86_64)
84     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSTRSAFE_NO_DEPRECATE")
85   endif()
86 endif()
87
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)
91   if(HAVE_MSMF_DXVA)
92     add_definitions(-DHAVE_MSMF_DXVA)
93   endif()
94 endif()
95
96 if (WIN32 AND HAVE_VFW)
97   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_vfw.cpp)
98 endif()
99
100 if(HAVE_XINE)
101   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_xine.cpp)
102 endif(HAVE_XINE)
103
104 if(HAVE_DC1394_2)
105   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dc1394_v2.cpp)
106 endif(HAVE_DC1394_2)
107
108 if(HAVE_DC1394)
109   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_dc1394.cpp)
110 endif(HAVE_DC1394)
111
112 if(HAVE_GSTREAMER)
113   IF(WIN32)
114     INCLUDE_DIRECTORIES(${GSTREAMER_INCLUDE_DIR})
115     list(APPEND VIDEOIO_LIBRARIES ${GSTREAMER_LIBRARIES})
116   ENDIF(WIN32)
117   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gstreamer.cpp)
118 endif(HAVE_GSTREAMER)
119
120 if(HAVE_UNICAP)
121   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_unicap.cpp)
122 endif(HAVE_UNICAP)
123
124 if(HAVE_LIBV4L)
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)
128 endif()
129
130 if(HAVE_OPENNI)
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})
134 endif(HAVE_OPENNI)
135
136 if(HAVE_OPENNI2)
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})
140 endif(HAVE_OPENNI2)
141
142 if(HAVE_XIMEA)
143   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_ximea.cpp)
144   if(XIMEA_PATH)
145     ocv_include_directories(${XIMEA_PATH})
146   endif()
147   if(XIMEA_LIBRARY_DIR)
148     link_directories("${XIMEA_LIBRARY_DIR}")
149   endif()
150   if(WIN32 AND X86_64)
151     list(APPEND VIDEOIO_LIBRARIES xiapi64)
152   elseif(WIN32)
153     list(APPEND VIDEOIO_LIBRARIES xiapi32)
154   elseif(APPLE)
155     list(APPEND VIDEOIO_LIBRARIES "-framework m3api")
156   else()
157     list(APPEND VIDEOIO_LIBRARIES m3api)
158   endif()
159 endif(HAVE_XIMEA)
160
161 if(HAVE_FFMPEG)
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})
166   endif()
167   if(APPLE)
168     list(APPEND VIDEOIO_LIBRARIES "-framework VideoDecodeAcceleration" bz2)
169   endif()
170   if(HAVE_FFMPEG_WRAPPER)
171     add_definitions(-DHAVE_FFMPEG_WRAPPER=1)
172   endif()
173 endif(HAVE_FFMPEG)
174
175 if(HAVE_PVAPI)
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})
181 endif()
182
183 if(HAVE_GIGE_API)
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)
189 endif(HAVE_GIGE_API)
190
191 if(HAVE_ARAVIS_API)
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)
198
199 if(HAVE_AVFOUNDATION)
200   if(IOS)
201     list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_avfoundation.mm)
202     list(APPEND VIDEOIO_LIBRARIES "-framework AVFoundation" "-framework QuartzCore")
203   else()
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")
206   endif()
207 endif()
208
209 if(HAVE_QUICKTIME)
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")
212 elseif(HAVE_QTKIT)
213   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_qtkit.mm)
214   list(APPEND VIDEOIO_LIBRARIES "-framework QTKit" "-framework QuartzCore" "-framework AppKit")
215 endif()
216
217 if(HAVE_INTELPERC)
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)
222
223 if(HAVE_GPHOTO2)
224   list(APPEND videoio_srcs ${CMAKE_CURRENT_LIST_DIR}/src/cap_gphoto2.cpp)
225 endif(HAVE_GPHOTO2)
226
227 if(IOS)
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)
232
233   list(APPEND VIDEOIO_LIBRARIES "-framework Accelerate" "-framework AVFoundation" "-framework CoreGraphics" "-framework CoreImage" "-framework CoreMedia" "-framework CoreVideo" "-framework QuartzCore" "-framework UIKit")
234 endif()
235
236 if(TRUE)
237   # these variables are set by 'ocv_append_build_options(VIDEOIO ...)'
238   foreach(P ${VIDEOIO_INCLUDE_DIRS})
239     ocv_include_directories(${P})
240   endforeach()
241
242   foreach(P ${VIDEOIO_LIBRARY_DIRS})
243     link_directories(${P})
244   endforeach()
245 endif()
246
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()
251
252 ocv_create_module(${VIDEOIO_LIBRARIES})
253
254 macro(ocv_videoio_configure_target)
255 if(APPLE)
256   add_apple_compiler_options(the_module)
257 endif()
258
259 if(MSVC)
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}")
263   endif()
264 endif()
265
266 ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated-declarations)
267
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)
272   endif()
273
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}")
278
279   if(MSVC_IDE)
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")
288   else()
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")
292   endif()
293
294   install(FILES "${ffmpeg_path}" DESTINATION ${OPENCV_BIN_INSTALL_PATH} COMPONENT libs RENAME "${ffmpeg_bare_name_ver}")
295
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")
299   endif()
300 endif()
301 endmacro()
302
303 if(NOT BUILD_opencv_world)
304   ocv_videoio_configure_target()
305 endif()
306
307 ocv_add_accuracy_tests()
308 ocv_add_perf_tests()