Home | History | Annotate | Download | only in 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 AND NOT HAVE_GSTREAMER OR WITH_GSTREAMER_0_10)
     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 AND NOT HAVE_GSTREAMER OR WITH_GSTREAMER_0_10)
     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_LIBV4L1)
    157     CHECK_MODULE(libv4l2 HAVE_LIBV4L2)
    158     if(HAVE_LIBV4L1 AND HAVE_LIBV4L2)
    159       set(HAVE_LIBV4L YES)
    160     else()
    161       set(HAVE_LIBV4L NO)
    162     endif()
    163   endif()
    164   CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
    165   CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
    166   CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO)
    167 endif(WITH_V4L)
    168 
    169 # --- OpenNI ---
    170 ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
    171 if(WITH_OPENNI)
    172   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake")
    173 endif(WITH_OPENNI)
    174 
    175 ocv_clear_vars(HAVE_OPENNI2)
    176 if(WITH_OPENNI2)
    177   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI2.cmake")
    178 endif(WITH_OPENNI2)
    179 
    180 # --- XIMEA ---
    181 ocv_clear_vars(HAVE_XIMEA)
    182 if(WITH_XIMEA)
    183   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake")
    184   if(XIMEA_FOUND)
    185     set(HAVE_XIMEA TRUE)
    186   endif()
    187 endif(WITH_XIMEA)
    188 
    189 # --- FFMPEG ---
    190 ocv_clear_vars(HAVE_FFMPEG HAVE_FFMPEG_CODEC HAVE_FFMPEG_FORMAT HAVE_FFMPEG_UTIL HAVE_FFMPEG_SWSCALE HAVE_FFMPEG_RESAMPLE HAVE_GENTOO_FFMPEG HAVE_FFMPEG_FFMPEG)
    191 if(WITH_FFMPEG)
    192   if(WIN32 AND NOT ARM)
    193     include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake")
    194   elseif(UNIX)
    195     CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
    196     CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
    197     CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
    198     CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
    199     CHECK_MODULE(libavresample HAVE_FFMPEG_RESAMPLE)
    200 
    201     CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
    202     CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
    203     if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
    204       if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
    205         set(HAVE_GENTOO_FFMPEG TRUE)
    206       endif()
    207     endif()
    208     if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE)
    209       set(HAVE_FFMPEG TRUE)
    210     endif()
    211 
    212     if(HAVE_FFMPEG)
    213       # Find the bzip2 library because it is required on some systems
    214       FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
    215       if(NOT BZIP2_LIBRARIES)
    216         # Do an other trial
    217         FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
    218       endif()
    219     else()
    220       find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h"
    221                 PATHS /usr/local /usr /opt
    222                 PATH_SUFFIXES include
    223                 DOC "The path to FFMPEG headers")
    224       if(FFMPEG_INCLUDE_DIR)
    225         set(HAVE_GENTOO_FFMPEG TRUE)
    226         set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
    227         find_library(FFMPEG_CODEC_LIB "avcodec" HINTS "${FFMPEG_LIB_DIR}")
    228         find_library(FFMPEG_FORMAT_LIB "avformat" HINTS "${FFMPEG_LIB_DIR}")
    229         find_library(FFMPEG_UTIL_LIB "avutil" HINTS "${FFMPEG_LIB_DIR}")
    230         find_library(FFMPEG_SWSCALE_LIB "swscale" HINTS "${FFMPEG_LIB_DIR}")
    231         find_library(FFMPEG_RESAMPLE_LIB "avresample" HINTS "${FFMPEG_LIB_DIR}")
    232         if(FFMPEG_CODEC_LIB)
    233           set(HAVE_FFMPEG_CODEC 1)
    234         endif()
    235         if(FFMPEG_FORMAT_LIB)
    236           set(HAVE_FFMPEG_FORMAT 1)
    237         endif()
    238         if(FFMPEG_UTIL_LIB)
    239           set(HAVE_FFMPEG_UTIL 1)
    240         endif()
    241         if(FFMPEG_SWSCALE_LIB)
    242           set(HAVE_FFMPEG_SWSCALE 1)
    243         endif()
    244         if(FFMPEG_CODEC_LIB AND FFMPEG_FORMAT_LIB AND
    245            FFMPEG_UTIL_LIB AND FFMPEG_SWSCALE_LIB)
    246           set(ALIASOF_libavcodec_VERSION "Unknown")
    247           set(ALIASOF_libavformat_VERSION "Unknown")
    248           set(ALIASOF_libavutil_VERSION "Unknown")
    249           set(ALIASOF_libswscale_VERSION "Unknown")
    250           set(HAVE_FFMPEG 1)
    251           if(FFMPEG_RESAMPLE_LIB)
    252             set(HAVE_FFMPEG_RESAMPLE 1)
    253             set(ALIASOF_libavresample_VERSION "Unknown")
    254           endif()
    255         endif()
    256       endif(FFMPEG_INCLUDE_DIR)
    257       if(HAVE_FFMPEG)
    258         set(VIDEOIO_LIBRARIES ${VIDEOIO_LIBRARIES} "${FFMPEG_LIB_DIR}/libavcodec.a"
    259             "${FFMPEG_LIB_DIR}/libavformat.a" "${FFMPEG_LIB_DIR}/libavutil.a"
    260             "${FFMPEG_LIB_DIR}/libswscale.a")
    261         if(HAVE_FFMPEG_RESAMPLE)
    262           set(VIDEOIO_LIBRARIES ${VIDEOIO_LIBRARIES} "${FFMPEG_LIB_DIR}/libavresample.a")
    263         endif()
    264         ocv_include_directories(${FFMPEG_INCLUDE_DIR})
    265       endif(HAVE_FFMPEG)
    266     endif()
    267   endif()
    268 endif(WITH_FFMPEG)
    269 
    270 # --- VideoInput/DirectShow ---
    271 if(WITH_DSHOW)
    272   # always have VideoInput on Windows
    273   set(HAVE_DSHOW 1)
    274 endif(WITH_DSHOW)
    275 
    276 # --- VideoInput/Microsoft Media Foundation ---
    277 ocv_clear_vars(HAVE_MSMF)
    278 if(WITH_MSMF)
    279   check_include_file(Mfapi.h HAVE_MSMF)
    280 endif(WITH_MSMF)
    281 
    282 # --- Extra HighGUI and VideoIO libs on Windows ---
    283 if(WIN32)
    284   list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32)
    285   if(HAVE_VFW)
    286     list(APPEND VIDEOIO_LIBRARIES vfw32)
    287   endif()
    288   if(MINGW64)
    289     list(APPEND VIDEOIO_LIBRARIES avifil32 avicap32 winmm msvfw32)
    290     list(REMOVE_ITEM VIDEOIO_LIBRARIES vfw32)
    291   elseif(MINGW)
    292     list(APPEND VIDEOIO_LIBRARIES winmm)
    293   endif()
    294 endif(WIN32)
    295 
    296 # --- Apple AV Foundation ---
    297 if(WITH_AVFOUNDATION)
    298   set(HAVE_AVFOUNDATION YES)
    299 endif()
    300 
    301 # --- QuickTime ---
    302 if (NOT IOS)
    303   if(WITH_QUICKTIME)
    304     set(HAVE_QUICKTIME YES)
    305   elseif(APPLE AND CMAKE_COMPILER_IS_CLANGCXX)
    306     set(HAVE_QTKIT YES)
    307   endif()
    308 endif()
    309 
    310 # --- Intel Perceptual Computing SDK ---
    311 if(WITH_INTELPERC)
    312   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake")
    313 endif(WITH_INTELPERC)
    314 
    315 # --- gPhoto2 ---
    316 ocv_clear_vars(HAVE_GPHOTO2)
    317 if(WITH_GPHOTO2)
    318   CHECK_MODULE(libgphoto2 HAVE_GPHOTO2)
    319 endif(WITH_GPHOTO2)
    320