Merge pull request #3063 from akarsakov:ocl_warps_check
[profile/ivi/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
16 if(WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10)
17   CHECK_MODULE(gstreamer-base-1.0 HAVE_GSTREAMER_BASE)
18   CHECK_MODULE(gstreamer-video-1.0 HAVE_GSTREAMER_VIDEO)
19   CHECK_MODULE(gstreamer-app-1.0 HAVE_GSTREAMER_APP)
20   CHECK_MODULE(gstreamer-riff-1.0 HAVE_GSTREAMER_RIFF)
21   CHECK_MODULE(gstreamer-pbutils-1.0 HAVE_GSTREAMER_PBUTILS)
22
23   if(HAVE_GSTREAMER_BASE AND HAVE_GSTREAMER_VIDEO AND HAVE_GSTREAMER_APP AND HAVE_GSTREAMER_RIFF AND HAVE_GSTREAMER_PBUTILS)
24       set(HAVE_GSTREAMER TRUE)
25       set(GSTREAMER_BASE_VERSION ${ALIASOF_gstreamer-base-1.0_VERSION})
26       set(GSTREAMER_VIDEO_VERSION ${ALIASOF_gstreamer-video-1.0_VERSION})
27       set(GSTREAMER_APP_VERSION ${ALIASOF_gstreamer-app-1.0_VERSION})
28       set(GSTREAMER_RIFF_VERSION ${ALIASOF_gstreamer-riff-1.0_VERSION})
29       set(GSTREAMER_PBUTILS_VERSION ${ALIASOF_gstreamer-pbutils-1.0_VERSION})
30   endif()
31
32 endif(WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10)
33
34 # if gstreamer 1.x was not found, or we specified we wanted 0.10, try to find it
35 if(WITH_GSTREAMER_0_10 OR NOT HAVE_GSTREAMER)
36   CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER_BASE)
37   CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER_VIDEO)
38   CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER_APP)
39   CHECK_MODULE(gstreamer-riff-0.10 HAVE_GSTREAMER_RIFF)
40   CHECK_MODULE(gstreamer-pbutils-0.10 HAVE_GSTREAMER_PBUTILS)
41
42   if(HAVE_GSTREAMER_BASE AND HAVE_GSTREAMER_VIDEO AND HAVE_GSTREAMER_APP AND HAVE_GSTREAMER_RIFF AND HAVE_GSTREAMER_PBUTILS)
43       set(HAVE_GSTREAMER TRUE)
44       set(GSTREAMER_BASE_VERSION ${ALIASOF_gstreamer-base-0.10_VERSION})
45       set(GSTREAMER_VIDEO_VERSION ${ALIASOF_gstreamer-video-0.10_VERSION})
46       set(GSTREAMER_APP_VERSION ${ALIASOF_gstreamer-app-0.10_VERSION})
47       set(GSTREAMER_RIFF_VERSION ${ALIASOF_gstreamer-riff-0.10_VERSION})
48       set(GSTREAMER_PBUTILS_VERSION ${ALIASOF_gstreamer-pbutils-0.10_VERSION})
49   endif()
50 endif(WITH_GSTREAMER_0_10 OR NOT HAVE_GSTREAMER)
51
52 # --- unicap ---
53 ocv_clear_vars(HAVE_UNICAP)
54 if(WITH_UNICAP)
55   CHECK_MODULE(libunicap HAVE_UNICAP_)
56   CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
57   if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
58     set(HAVE_UNICAP TRUE)
59   endif()
60 endif(WITH_UNICAP)
61
62 # --- PvApi ---
63 ocv_clear_vars(HAVE_PVAPI)
64 if(WITH_PVAPI)
65   find_path(PVAPI_INCLUDE_PATH "PvApi.h"
66             PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
67             PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc"
68             DOC "The path to PvAPI header")
69
70   if(PVAPI_INCLUDE_PATH)
71     if(X86 AND NOT WIN32)
72       set(PVAPI_SDK_SUBDIR x86)
73     elseif(X86_64)
74       set(PVAPI_SDK_SUBDIR x64)
75     elseif(ARM)
76       set(PVAPI_SDK_SUBDIR arm)
77     endif()
78
79     get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE)
80     if(PVAPI_SDK_SUBDIR)
81       set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}")
82     endif()
83     if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
84       set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}")
85     endif()
86
87     if(WIN32)
88       if(MINGW)
89         set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall")
90       endif(MINGW)
91       set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/PvAPI.lib" CACHE PATH "The PvAPI library")
92     else(WIN32)
93       set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library")
94     endif(WIN32)
95     if(EXISTS "${PVAPI_LIBRARY}")
96       set(HAVE_PVAPI TRUE)
97     endif()
98   endif(PVAPI_INCLUDE_PATH)
99 endif(WITH_PVAPI)
100
101 # --- GigEVisionSDK ---
102 ocv_clear_vars(HAVE_GIGE_API)
103 if(WITH_GIGEAPI)
104   find_path(GIGEAPI_INCLUDE_PATH "GigEVisionSDK.h"
105             PATHS /usr/local /var /opt /usr ENV ProgramFiles ENV ProgramW6432
106             PATH_SUFFIXES include "Smartek Vision Technologies/GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_c"
107             DOC "The path to Smartek GigEVisionSDK header")
108   FIND_LIBRARY(GIGEAPI_LIBRARIES NAMES GigEVisionSDK)
109   if(GIGEAPI_LIBRARIES AND GIGEAPI_INCLUDE_PATH)
110     set(HAVE_GIGE_API TRUE)
111   endif()
112 endif(WITH_GIGEAPI)
113
114 # --- Dc1394 ---
115 ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
116 if(WITH_1394)
117   if(WIN32 AND MINGW)
118       find_path(CMU1394_INCLUDE_PATH "/1394common.h"
119                 PATH_SUFFIXES include
120                 DOC "The path to cmu1394 headers")
121       find_path(DC1394_2_INCLUDE_PATH "/dc1394/dc1394.h"
122                 PATH_SUFFIXES include
123                 DOC "The path to DC1394 2.x headers")
124       if(CMU1394_INCLUDE_PATH AND DC1394_2_INCLUDE_PATH)
125         set(CMU1394_LIB_DIR  "${CMU1394_INCLUDE_PATH}/../lib"  CACHE PATH "Full path of CMU1394 library directory")
126         set(DC1394_2_LIB_DIR "${DC1394_2_INCLUDE_PATH}/../lib" CACHE PATH "Full path of DC1394 2.x library directory")
127         if(EXISTS "${CMU1394_LIB_DIR}/lib1394camera.a" AND EXISTS "${DC1394_2_LIB_DIR}/libdc1394.a")
128           set(HAVE_DC1394_2 TRUE)
129         endif()
130       endif()
131       if(HAVE_DC1394_2)
132         ocv_parse_pkg("libdc1394-2" "${DC1394_2_LIB_DIR}/pkgconfig" "")
133         ocv_include_directories(${DC1394_2_INCLUDE_PATH})
134         set(VIDEOIO_LIBRARIES ${VIDEOIO_LIBRARIES}
135             "${DC1394_2_LIB_DIR}/libdc1394.a"
136             "${CMU1394_LIB_DIR}/lib1394camera.a")
137       endif(HAVE_DC1394_2)
138   else(WIN32 AND MINGW)
139     CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
140     if(NOT HAVE_DC1394_2)
141       CHECK_MODULE(libdc1394 HAVE_DC1394)
142     endif()
143   endif(WIN32 AND MINGW)
144 endif(WITH_1394)
145
146 # --- xine ---
147 ocv_clear_vars(HAVE_XINE)
148 if(WITH_XINE)
149   CHECK_MODULE(libxine HAVE_XINE)
150 endif(WITH_XINE)
151
152 # --- V4L ---
153 ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_VIDEOIO)
154 if(WITH_V4L)
155   if(WITH_LIBV4L)
156     CHECK_MODULE(libv4l1 HAVE_LIBV4L)
157   endif()
158   CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
159   CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
160   CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO)
161 endif(WITH_V4L)
162
163 # --- OpenNI ---
164 ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
165 if(WITH_OPENNI)
166   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake")
167 endif(WITH_OPENNI)
168
169 ocv_clear_vars(HAVE_OPENNI2)
170 if(WITH_OPENNI2)
171   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI2.cmake")
172 endif(WITH_OPENNI2)
173
174 # --- XIMEA ---
175 ocv_clear_vars(HAVE_XIMEA)
176 if(WITH_XIMEA)
177   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake")
178   if(XIMEA_FOUND)
179     set(HAVE_XIMEA TRUE)
180   endif()
181 endif(WITH_XIMEA)
182
183 # --- FFMPEG ---
184 ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG)
185 if(WITH_FFMPEG)
186   if(WIN32 AND NOT ARM)
187     include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake")
188   elseif(UNIX)
189     CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
190     CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
191     CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
192     CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
193
194     CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
195     CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
196     if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
197       if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
198         set(HAVE_GENTOO_FFMPEG TRUE)
199       endif()
200     endif()
201     if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE)
202       set(HAVE_FFMPEG TRUE)
203     endif()
204
205     if(HAVE_FFMPEG)
206       # Find the bzip2 library because it is required on some systems
207       FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
208       if(NOT BZIP2_LIBRARIES)
209         # Do an other trial
210         FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
211       endif()
212     endif(HAVE_FFMPEG)
213   endif()
214
215   if(APPLE)
216     find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h"
217               PATHS /usr/local /usr /opt
218               PATH_SUFFIXES include
219               DOC "The path to FFMPEG headers")
220     if(FFMPEG_INCLUDE_DIR)
221       set(HAVE_GENTOO_FFMPEG TRUE)
222       set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
223       if(EXISTS "${FFMPEG_LIB_DIR}/libavcodec.a")
224         set(HAVE_FFMPEG_CODEC 1)
225         set(ALIASOF_libavcodec_VERSION "Unknown")
226         if(EXISTS "${FFMPEG_LIB_DIR}/libavformat.a")
227           set(HAVE_FFMPEG_FORMAT 1)
228           set(ALIASOF_libavformat_VERSION "Unknown")
229           if(EXISTS "${FFMPEG_LIB_DIR}/libavutil.a")
230             set(HAVE_FFMPEG_UTIL 1)
231             set(ALIASOF_libavutil_VERSION "Unknown")
232             if(EXISTS "${FFMPEG_LIB_DIR}/libswscale.a")
233               set(HAVE_FFMPEG_SWSCALE 1)
234               set(ALIASOF_libswscale_VERSION "Unknown")
235               set(HAVE_FFMPEG 1)
236             endif()
237           endif()
238         endif()
239       endif()
240     endif(FFMPEG_INCLUDE_DIR)
241     if(HAVE_FFMPEG)
242       set(VIDEOIO_LIBRARIES ${VIDEOIO_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a"
243           "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a"
244           "${FFMPEG_LIB_DIR}/libswscale.a")
245       ocv_include_directories(${FFMPEG_INCLUDE_DIR})
246     endif()
247   endif(APPLE)
248 endif(WITH_FFMPEG)
249
250 # --- VideoInput/DirectShow ---
251 if(WITH_DSHOW)
252   # always have VideoInput on Windows
253   set(HAVE_DSHOW 1)
254 endif(WITH_DSHOW)
255
256 # --- VideoInput/Microsoft Media Foundation ---
257 if(WITH_MSMF)
258   check_include_file(Mfapi.h HAVE_MSMF)
259 endif(WITH_MSMF)
260
261 # --- Extra HighGUI and VideoIO libs on Windows ---
262 if(WIN32)
263   list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32)
264   list(APPEND VIDEOIO_LIBRARIES vfw32)
265   if(MINGW64)
266     list(APPEND VIDEOIO_LIBRARIES avifil32 avicap32 winmm msvfw32)
267     list(REMOVE_ITEM VIDEOIO_LIBRARIES vfw32)
268   elseif(MINGW)
269     list(APPEND VIDEOIO_LIBRARIES winmm)
270   endif()
271 endif(WIN32)
272
273 # --- Apple AV Foundation ---
274 if(WITH_AVFOUNDATION)
275   set(HAVE_AVFOUNDATION YES)
276 endif()
277
278 # --- QuickTime ---
279 if (NOT IOS)
280   if(WITH_QUICKTIME)
281     set(HAVE_QUICKTIME YES)
282   elseif(APPLE AND CMAKE_COMPILER_IS_CLANGCXX)
283     set(HAVE_QTKIT YES)
284   endif()
285 endif()
286
287 # --- Intel Perceptual Computing SDK ---
288 if(WITH_INTELPERC)
289   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake")
290 endif(WITH_INTELPERC)