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