Merge pull request #16122 from alalek:cmake_update_cpu_compiler_detection
[platform/upstream/opencv.git] / cmake / OpenCVFindLibsVideo.cmake
1 # ----------------------------------------------------------------------------
2 #  Detect 3rd-party video IO libraries
3 # ----------------------------------------------------------------------------
4
5 ocv_clear_vars(HAVE_VFW)
6 if(WITH_VFW)
7   try_compile(HAVE_VFW
8     "${OpenCV_BINARY_DIR}"
9     "${OpenCV_SOURCE_DIR}/cmake/checks/vfwtest.cpp"
10     CMAKE_FLAGS "-DLINK_LIBRARIES:STRING=vfw32")
11 endif(WITH_VFW)
12
13 # --- GStreamer ---
14 ocv_clear_vars(HAVE_GSTREAMER)
15 # try to find gstreamer 1.x first if 0.10 was not requested
16 if(WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10)
17   if(WIN32)
18     SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_LIST_DIR}")
19     FIND_PACKAGE(GstreamerWindows)
20     IF(GSTREAMER_gstbase_LIBRARY AND GSTREAMER_gstvideo_LIBRARY AND GSTREAMER_gstapp_LIBRARY AND GSTREAMER_gstpbutils_LIBRARY AND GSTREAMER_gstriff_LIBRARY)
21       set(HAVE_GSTREAMER TRUE)
22       set(GSTREAMER_BASE_VERSION 1.0)
23       set(GSTREAMER_VIDEO_VERSION 1.0)
24       set(GSTREAMER_APP_VERSION 1.0)
25       set(GSTREAMER_RIFF_VERSION 1.0)
26       set(GSTREAMER_PBUTILS_VERSION 1.0)
27     ENDIF(GSTREAMER_gstbase_LIBRARY AND GSTREAMER_gstvideo_LIBRARY AND GSTREAMER_gstapp_LIBRARY AND GSTREAMER_gstpbutils_LIBRARY AND GSTREAMER_gstriff_LIBRARY)
28
29   else(WIN32)
30     ocv_check_modules(GSTREAMER-1.0 gstreamer-base-1.0 gstreamer-video-1.0 gstreamer-app-1.0 gstreamer-riff-1.0 gstreamer-pbutils-1.0)
31     if(HAVE_GSTREAMER-1.0)
32       set(HAVE_GSTREAMER TRUE)
33       ocv_append_build_options(VIDEOIO GSTREAMER-1.0)
34       set(GSTREAMER_BASE_VERSION ${GSTREAMER-1.0_gstreamer-base-1.0_VERSION})
35       set(GSTREAMER_VIDEO_VERSION ${GSTREAMER-1.0_gstreamer-video-1.0_VERSION})
36       set(GSTREAMER_APP_VERSION ${GSTREAMER-1.0_gstreamer-app-1.0_VERSION})
37       set(GSTREAMER_RIFF_VERSION ${GSTREAMER-1.0_gstreamer-riff-1.0_VERSION})
38       set(GSTREAMER_PBUTILS_VERSION ${GSTREAMER-1.0_gstreamer-pbutils-1.0_VERSION})
39     endif()
40   endif(WIN32)
41 endif()
42
43 # if gstreamer 1.x was not found, or we specified we wanted 0.10, try to find it
44 if(WITH_GSTREAMER AND NOT HAVE_GSTREAMER OR WITH_GSTREAMER_0_10)
45   ocv_check_modules(GSTREAMER-0.10 gstreamer-base-0.10 gstreamer-video-0.10 gstreamer-app-0.10 gstreamer-riff-0.10 gstreamer-pbutils-0.10)
46   if(HAVE_GSTREAMER-0.10)
47     set(HAVE_GSTREAMER TRUE)
48     ocv_append_build_options(VIDEOIO GSTREAMER-0.10)
49     set(GSTREAMER_BASE_VERSION ${GSTREAMER-0.10_gstreamer-base-0.10_VERSION})
50     set(GSTREAMER_VIDEO_VERSION ${GSTREAMER-0.10_gstreamer-video-0.10_VERSION})
51     set(GSTREAMER_APP_VERSION ${GSTREAMER-0.10_gstreamer-app-0.10_VERSION})
52     set(GSTREAMER_RIFF_VERSION ${GSTREAMER-0.10_gstreamer-riff-0.10_VERSION})
53     set(GSTREAMER_PBUTILS_VERSION ${GSTREAMER-0.10_gstreamer-pbutils-0.10_VERSION})
54   endif()
55 endif()
56
57 # --- unicap ---
58 ocv_clear_vars(HAVE_UNICAP)
59 if(WITH_UNICAP)
60   ocv_check_modules(HAVE_UNICAP libunicap libucil)
61   if(HAVE_UNICAP)
62     ocv_append_build_options(VIDEOIO UNICAP)
63   endif()
64 endif()
65
66 # --- PvApi ---
67 ocv_clear_vars(HAVE_PVAPI)
68 if(WITH_PVAPI)
69   find_path(PVAPI_INCLUDE_PATH "PvApi.h"
70             PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
71             PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc"
72             DOC "The path to PvAPI header")
73
74   if(PVAPI_INCLUDE_PATH)
75     if(X86 AND NOT WIN32)
76       set(PVAPI_SDK_SUBDIR x86)
77     elseif(X86_64)
78       set(PVAPI_SDK_SUBDIR x64)
79     elseif(ARM)
80       set(PVAPI_SDK_SUBDIR arm)
81     endif()
82
83     get_filename_component(_PVAPI_LIBRARY_HINT "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE)
84
85     find_library(PVAPI_LIBRARY NAMES "PvAPI" PATHS "${_PVAPI_LIBRARY_HINT}")
86
87     if(PVAPI_LIBRARY)
88       if(WIN32)
89         if(MINGW)
90           set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall")
91         endif(MINGW)
92       endif()
93       set(HAVE_PVAPI TRUE)
94     endif()
95   endif(PVAPI_INCLUDE_PATH)
96 endif(WITH_PVAPI)
97
98 # --- GigEVisionSDK ---
99 ocv_clear_vars(HAVE_GIGE_API)
100 if(WITH_GIGEAPI)
101   find_path(GIGEAPI_INCLUDE_PATH "GigEVisionSDK.h"
102             PATHS /usr/local /var /opt /usr ENV ProgramFiles ENV ProgramW6432
103             PATH_SUFFIXES include "Smartek Vision Technologies/GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_c"
104             DOC "The path to Smartek GigEVisionSDK header")
105   FIND_LIBRARY(GIGEAPI_LIBRARIES NAMES GigEVisionSDK)
106   if(GIGEAPI_LIBRARIES AND GIGEAPI_INCLUDE_PATH)
107     set(HAVE_GIGE_API TRUE)
108   endif()
109 endif(WITH_GIGEAPI)
110
111 # --- Aravis SDK ---
112 ocv_clear_vars(HAVE_ARAVIS_API)
113 if(WITH_ARAVIS)
114   ocv_check_modules(ARAVIS_GLIB glib-2.0)
115   if(HAVE_ARAVIS_GLIB)
116     find_path(ARAVIS_INCLUDE_PATH "arv.h"
117               PATHS /usr/local /var /opt /usr ENV ProgramFiles ENV ProgramW6432
118               PATH_SUFFIXES include "aravis-0.6" "aravis-0.4"
119               DOC "The path to Aravis SDK headers")
120     find_library(ARAVIS_LIBRARIES NAMES "aravis-0.6" "aravis-0.4" )
121     if(ARAVIS_LIBRARIES AND ARAVIS_INCLUDE_PATH)
122       ocv_append_build_options(VIDEOIO ARAVIS_GLIB)
123       set(HAVE_ARAVIS_API TRUE)
124     endif()
125   else()
126     message("Can not build Aravis support without glib2")
127   endif()
128 endif(WITH_ARAVIS)
129
130 # --- Dc1394 ---
131 ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
132 if(WITH_1394)
133   if(WIN32 AND MINGW)
134       # TODO remove this, use pkgconfig from MinGW instead
135       find_path(CMU1394_INCLUDE_PATH "/1394common.h"
136                 PATH_SUFFIXES include
137                 DOC "The path to cmu1394 headers")
138       find_path(DC1394_2_INCLUDE_PATH "/dc1394/dc1394.h"
139                 PATH_SUFFIXES include
140                 DOC "The path to DC1394 2.x headers")
141       if(CMU1394_INCLUDE_PATH AND DC1394_2_INCLUDE_PATH)
142         set(CMU1394_LIB_DIR  "${CMU1394_INCLUDE_PATH}/../lib"  CACHE PATH "Full path of CMU1394 library directory")
143         set(DC1394_2_LIB_DIR "${DC1394_2_INCLUDE_PATH}/../lib" CACHE PATH "Full path of DC1394 2.x library directory")
144         if(EXISTS "${CMU1394_LIB_DIR}/lib1394camera.a" AND EXISTS "${DC1394_2_LIB_DIR}/libdc1394.a")
145           set(HAVE_DC1394_2 TRUE)
146         endif()
147       endif()
148       if(HAVE_DC1394_2)
149         ocv_parse_pkg(DC1394_2_VERSION "libdc1394-2" "${DC1394_2_LIB_DIR}/pkgconfig")
150         ocv_include_directories(${DC1394_2_INCLUDE_PATH})
151         set(VIDEOIO_LIBRARIES ${VIDEOIO_LIBRARIES}
152             "${DC1394_2_LIB_DIR}/libdc1394.a"
153             "${CMU1394_LIB_DIR}/lib1394camera.a")
154       endif()
155   endif()
156   if(NOT HAVE_DC1394_2)
157     ocv_check_modules(DC1394_2 libdc1394-2)
158     if(HAVE_DC1394_2)
159       ocv_append_build_options(VIDEOIO DC1394_2)
160     else()
161       ocv_check_modules(DC1394 libdc1394)
162       if(HAVE_DC1394)
163         ocv_append_build_options(VIDEOIO DC1394)
164       endif()
165     endif()
166   endif()
167 endif()
168
169 # --- xine ---
170 ocv_clear_vars(HAVE_XINE)
171 if(WITH_XINE)
172   ocv_check_modules(XINE libxine)
173   if(HAVE_XINE)
174     ocv_append_build_options(VIDEOIO XINE)
175   endif()
176 endif(WITH_XINE)
177
178 # --- V4L ---
179 ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_VIDEOIO)
180 if(WITH_V4L)
181   if(WITH_LIBV4L)
182     ocv_check_modules(LIBV4L libv4l1 libv4l2)
183     if(HAVE_LIBV4L)
184       ocv_append_build_options(VIDEOIO LIBV4L)
185     endif()
186   endif()
187   CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
188   CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
189   CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO)
190 endif(WITH_V4L)
191
192 # --- OpenNI ---
193 ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
194 if(WITH_OPENNI)
195   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake")
196 endif(WITH_OPENNI)
197
198 ocv_clear_vars(HAVE_OPENNI2)
199 if(WITH_OPENNI2)
200   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI2.cmake")
201 endif(WITH_OPENNI2)
202
203 # --- XIMEA ---
204 ocv_clear_vars(HAVE_XIMEA)
205 if(WITH_XIMEA)
206   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake")
207   if(XIMEA_FOUND)
208     set(HAVE_XIMEA TRUE)
209   endif()
210 endif(WITH_XIMEA)
211
212 # --- FFMPEG ---
213 ocv_clear_vars(HAVE_FFMPEG)
214 if(WITH_FFMPEG)  # try FFmpeg autodetection
215   if(OPENCV_FFMPEG_USE_FIND_PACKAGE)
216     if(OPENCV_FFMPEG_USE_FIND_PACKAGE STREQUAL "1" OR OPENCV_FFMPEG_USE_FIND_PACKAGE STREQUAL "ON")
217       set(OPENCV_FFMPEG_USE_FIND_PACKAGE "FFMPEG")
218     endif()
219     find_package(${OPENCV_FFMPEG_USE_FIND_PACKAGE}) # Required components: AVCODEC AVFORMAT AVUTIL SWSCALE
220     if(FFMPEG_FOUND OR FFmpeg_FOUND)
221       set(HAVE_FFMPEG TRUE)
222     else()
223       message(STATUS "Can't find FFmpeg via find_package(${OPENCV_FFMPEG_USE_FIND_PACKAGE})")
224     endif()
225   elseif(WIN32 AND NOT ARM AND NOT OPENCV_FFMPEG_SKIP_DOWNLOAD)
226     include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg.cmake")
227     download_win_ffmpeg(FFMPEG_CMAKE_SCRIPT)
228     if(FFMPEG_CMAKE_SCRIPT)
229       set(HAVE_FFMPEG TRUE)
230       set(HAVE_FFMPEG_WRAPPER 1)
231       include("${FFMPEG_CMAKE_SCRIPT}")
232     endif()
233   elseif(PKG_CONFIG_FOUND)
234     ocv_check_modules(FFMPEG libavcodec libavformat libavutil libswscale)
235     ocv_check_modules(FFMPEG_libavresample libavresample)
236     if(FFMPEG_libavresample_FOUND)
237       ocv_append_build_options(FFMPEG FFMPEG_libavresample)
238     endif()
239   else()
240     message(STATUS "Can't find ffmpeg - 'pkg-config' utility is missing")
241   endif()
242 endif()
243 if(HAVE_FFMPEG
244     AND NOT HAVE_FFMPEG_WRAPPER
245 )
246   try_compile(__VALID_FFMPEG
247       "${OpenCV_BINARY_DIR}"
248       "${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
249       CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
250                   "-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_DIRS}"
251                   "-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
252       OUTPUT_VARIABLE TRY_OUT
253   )
254   if(NOT __VALID_FFMPEG)
255     #message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
256     message(STATUS "WARNING: Can't build ffmpeg test code")
257     set(HAVE_FFMPEG FALSE)
258   else()
259     ocv_append_build_options(VIDEOIO FFMPEG)
260   endif()
261 endif()
262
263 # --- VideoInput/DirectShow ---
264 if(WITH_DSHOW)
265   if(MSVC_VERSION GREATER 1499)
266     set(HAVE_DSHOW 1)
267   elseif(NOT HAVE_DSHOW)
268     check_include_file(DShow.h HAVE_DSHOW)
269   endif()
270 endif(WITH_DSHOW)
271
272 # --- VideoInput/Microsoft Media Foundation ---
273 ocv_clear_vars(HAVE_MSMF)
274 if(WITH_MSMF)
275   check_include_file(Mfapi.h HAVE_MSMF)
276   set(HAVE_MSMF_DXVA "")
277   if(WITH_MSMF_DXVA)
278     check_include_file(D3D11.h D3D11_found)
279     check_include_file(D3d11_4.h D3D11_4_found)
280     if(D3D11_found AND D3D11_4_found)
281       set(HAVE_MSMF_DXVA YES)
282     endif()
283   endif()
284 endif()
285
286 # --- Extra HighGUI and VideoIO libs on Windows ---
287 if(WIN32)
288   list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32)
289   if(HAVE_VFW)
290     list(APPEND VIDEOIO_LIBRARIES vfw32)
291   endif()
292   if(MINGW AND CMAKE_SIZEOF_VOID_P EQUAL 8)
293     list(APPEND VIDEOIO_LIBRARIES avifil32 avicap32 winmm msvfw32)
294     list(REMOVE_ITEM VIDEOIO_LIBRARIES vfw32)
295   elseif(MINGW)
296     list(APPEND VIDEOIO_LIBRARIES winmm)
297   endif()
298 endif(WIN32)
299
300 if(APPLE)
301   if(WITH_AVFOUNDATION)
302     set(HAVE_AVFOUNDATION YES)
303   endif()
304   if(NOT IOS)
305     if(WITH_QUICKTIME)
306       set(HAVE_QUICKTIME YES)
307     elseif(WITH_QTKIT)
308       set(HAVE_QTKIT YES)
309     endif()
310   endif()
311 endif(APPLE)
312
313 # --- Intel Perceptual Computing SDK ---
314 if(WITH_INTELPERC)
315   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake")
316 endif(WITH_INTELPERC)
317
318 if(WITH_MFX)
319   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVDetectMediaSDK.cmake")
320 endif()
321
322 # --- gPhoto2 ---
323 ocv_clear_vars(HAVE_GPHOTO2)
324 if(WITH_GPHOTO2)
325   ocv_check_modules(GPHOTO2 libgphoto2)
326   if(HAVE_GPHOTO2)
327     ocv_append_build_options(VIDEOIO GPHOTO2)
328   endif()
329 endif()
330
331 # --- VA & VA_INTEL ---
332 if(WITH_VA_INTEL)
333   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindVA_INTEL.cmake")
334   if(VA_INTEL_IOCL_INCLUDE_DIR)
335     ocv_include_directories(${VA_INTEL_IOCL_INCLUDE_DIR})
336   endif()
337   set(WITH_VA YES)
338 endif(WITH_VA_INTEL)
339
340 if(WITH_VA)
341   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindVA.cmake")
342   if(VA_INCLUDE_DIR)
343     ocv_include_directories(${VA_INCLUDE_DIR})
344   endif()
345 endif(WITH_VA)