OpenCVFindLibsVideo.cmake 9.19 KB
Newer Older
wester committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# ----------------------------------------------------------------------------
#  Detect 3rd-party video IO libraries
# ----------------------------------------------------------------------------

ocv_clear_vars(HAVE_VFW)
if(WITH_VFW)
  try_compile(HAVE_VFW
    "${OpenCV_BINARY_DIR}"
    "${OpenCV_SOURCE_DIR}/cmake/checks/vfwtest.cpp"
    CMAKE_FLAGS "-DLINK_LIBRARIES:STRING=vfw32")
endif(WITH_VFW)

# --- GStreamer ---
ocv_clear_vars(HAVE_GSTREAMER)
# try to find gstreamer 1.x first if 0.10 was not requested
if(WITH_GSTREAMER AND NOT WITH_GSTREAMER_0_10)
wester committed
17 18 19 20 21
  CHECK_MODULE(gstreamer-base-1.0 HAVE_GSTREAMER_BASE)
  CHECK_MODULE(gstreamer-video-1.0 HAVE_GSTREAMER_VIDEO)
  CHECK_MODULE(gstreamer-app-1.0 HAVE_GSTREAMER_APP)
  CHECK_MODULE(gstreamer-riff-1.0 HAVE_GSTREAMER_RIFF)
  CHECK_MODULE(gstreamer-pbutils-1.0 HAVE_GSTREAMER_PBUTILS)
wester committed
22

wester committed
23
  if(HAVE_GSTREAMER_BASE AND HAVE_GSTREAMER_VIDEO AND HAVE_GSTREAMER_APP AND HAVE_GSTREAMER_RIFF AND HAVE_GSTREAMER_PBUTILS)
wester committed
24 25 26 27 28 29
      set(HAVE_GSTREAMER TRUE)
      set(GSTREAMER_BASE_VERSION ${ALIASOF_gstreamer-base-1.0_VERSION})
      set(GSTREAMER_VIDEO_VERSION ${ALIASOF_gstreamer-video-1.0_VERSION})
      set(GSTREAMER_APP_VERSION ${ALIASOF_gstreamer-app-1.0_VERSION})
      set(GSTREAMER_RIFF_VERSION ${ALIASOF_gstreamer-riff-1.0_VERSION})
      set(GSTREAMER_PBUTILS_VERSION ${ALIASOF_gstreamer-pbutils-1.0_VERSION})
wester committed
30 31 32 33 34 35 36 37 38
  endif()

endif()

# gstreamer support was requested but could not find gstreamer 1.x,
# so fallback/try to find gstreamer 0.10
if(WITH_GSTREAMER AND NOT HAVE_GSTREAMER)
  set(WITH_GSTREAMER_0_10 ON)
endif()
wester committed
39

wester committed
40 41 42 43
# if gstreamer 1.x was not found (fallback on gstreamer 0.10), or we specified
# we wanted gstreamer 0.10 support,
# then try to find it if not gstreamer support has not been found so far.
if(WITH_GSTREAMER_0_10 AND NOT HAVE_GSTREAMER)
a  
Kai Westerkamp committed
44 45 46 47 48
  CHECK_MODULE(gstreamer-base-0.10 HAVE_GSTREAMER_BASE)
  CHECK_MODULE(gstreamer-video-0.10 HAVE_GSTREAMER_VIDEO)
  CHECK_MODULE(gstreamer-app-0.10 HAVE_GSTREAMER_APP)
  CHECK_MODULE(gstreamer-riff-0.10 HAVE_GSTREAMER_RIFF)
  CHECK_MODULE(gstreamer-pbutils-0.10 HAVE_GSTREAMER_PBUTILS)
wester committed
49 50 51 52 53 54 55 56 57

  if(HAVE_GSTREAMER_BASE AND HAVE_GSTREAMER_VIDEO AND HAVE_GSTREAMER_APP AND HAVE_GSTREAMER_RIFF AND HAVE_GSTREAMER_PBUTILS)
      set(HAVE_GSTREAMER TRUE)
      set(GSTREAMER_BASE_VERSION ${ALIASOF_gstreamer-base-0.10_VERSION})
      set(GSTREAMER_VIDEO_VERSION ${ALIASOF_gstreamer-video-0.10_VERSION})
      set(GSTREAMER_APP_VERSION ${ALIASOF_gstreamer-app-0.10_VERSION})
      set(GSTREAMER_RIFF_VERSION ${ALIASOF_gstreamer-riff-0.10_VERSION})
      set(GSTREAMER_PBUTILS_VERSION ${ALIASOF_gstreamer-pbutils-0.10_VERSION})
  endif()
wester committed
58
endif(WITH_GSTREAMER_0_10 AND NOT HAVE_GSTREAMER)
wester committed
59 60 61 62

# --- unicap ---
ocv_clear_vars(HAVE_UNICAP)
if(WITH_UNICAP)
a  
Kai Westerkamp committed
63 64
  CHECK_MODULE(libunicap HAVE_UNICAP_)
  CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
wester committed
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
  if(HAVE_UNICAP_ AND HAVE_UNICAP_UCIL)
    set(HAVE_UNICAP TRUE)
  endif()
endif(WITH_UNICAP)

# --- PvApi ---
ocv_clear_vars(HAVE_PVAPI)
if(WITH_PVAPI)
  find_path(PVAPI_INCLUDE_PATH "PvApi.h"
            PATHS /usr/local /opt /usr ENV ProgramFiles ENV ProgramW6432
            PATH_SUFFIXES include "Allied Vision Technologies/GigESDK/inc-pc" "AVT GigE SDK/inc-pc" "GigESDK/inc-pc"
            DOC "The path to PvAPI header")

  if(PVAPI_INCLUDE_PATH)
    if(X86 AND NOT WIN32)
      set(PVAPI_SDK_SUBDIR x86)
    elseif(X86_64)
      set(PVAPI_SDK_SUBDIR x64)
    elseif(ARM)
      set(PVAPI_SDK_SUBDIR arm)
    endif()

    get_filename_component(_PVAPI_LIBRARY "${PVAPI_INCLUDE_PATH}/../lib-pc" ABSOLUTE)
    if(PVAPI_SDK_SUBDIR)
      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${PVAPI_SDK_SUBDIR}")
    endif()
    if(NOT WIN32 AND CMAKE_COMPILER_IS_GNUCXX)
      set(_PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_OPENCV_GCC_VERSION_MAJOR}.${CMAKE_OPENCV_GCC_VERSION_MINOR}")
    endif()

    if(WIN32)
      if(MINGW)
        set(PVAPI_DEFINITIONS "-DPVDECL=__stdcall")
      endif(MINGW)
      set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/PvAPI.lib" CACHE PATH "The PvAPI library")
    else(WIN32)
      set(PVAPI_LIBRARY "${_PVAPI_LIBRARY}/${CMAKE_STATIC_LIBRARY_PREFIX}PvAPI${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE PATH "The PvAPI library")
    endif(WIN32)
    if(EXISTS "${PVAPI_LIBRARY}")
      set(HAVE_PVAPI TRUE)
    endif()
  endif(PVAPI_INCLUDE_PATH)
endif(WITH_PVAPI)

# --- GigEVisionSDK ---
ocv_clear_vars(HAVE_GIGE_API)
if(WITH_GIGEAPI)
  find_path(GIGEAPI_INCLUDE_PATH "GigEVisionSDK.h"
            PATHS /usr/local /var /opt /usr ENV ProgramFiles ENV ProgramW6432
            PATH_SUFFIXES include "Smartek Vision Technologies/GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_cpp" "GigEVisionSDK/gige_c"
            DOC "The path to Smartek GigEVisionSDK header")
  FIND_LIBRARY(GIGEAPI_LIBRARIES NAMES GigEVisionSDK)
  if(GIGEAPI_LIBRARIES AND GIGEAPI_INCLUDE_PATH)
    set(HAVE_GIGE_API TRUE)
  endif()
endif(WITH_GIGEAPI)

# --- Dc1394 ---
ocv_clear_vars(HAVE_DC1394 HAVE_DC1394_2)
if(WITH_1394)
  if(WIN32 AND MINGW)
      find_path(CMU1394_INCLUDE_PATH "/1394common.h"
                PATH_SUFFIXES include
                DOC "The path to cmu1394 headers")
      find_path(DC1394_2_INCLUDE_PATH "/dc1394/dc1394.h"
                PATH_SUFFIXES include
                DOC "The path to DC1394 2.x headers")
      if(CMU1394_INCLUDE_PATH AND DC1394_2_INCLUDE_PATH)
        set(CMU1394_LIB_DIR  "${CMU1394_INCLUDE_PATH}/../lib"  CACHE PATH "Full path of CMU1394 library directory")
        set(DC1394_2_LIB_DIR "${DC1394_2_INCLUDE_PATH}/../lib" CACHE PATH "Full path of DC1394 2.x library directory")
        if(EXISTS "${CMU1394_LIB_DIR}/lib1394camera.a" AND EXISTS "${DC1394_2_LIB_DIR}/libdc1394.a")
          set(HAVE_DC1394_2 TRUE)
        endif()
      endif()
      if(HAVE_DC1394_2)
        ocv_parse_pkg("libdc1394-2" "${DC1394_2_LIB_DIR}/pkgconfig" "")
        ocv_include_directories(${DC1394_2_INCLUDE_PATH})
wester committed
142
        set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES}
wester committed
143 144 145 146
            "${DC1394_2_LIB_DIR}/libdc1394.a"
            "${CMU1394_LIB_DIR}/lib1394camera.a")
      endif(HAVE_DC1394_2)
  else(WIN32 AND MINGW)
a  
Kai Westerkamp committed
147
    CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
wester committed
148
    if(NOT HAVE_DC1394_2)
a  
Kai Westerkamp committed
149
      CHECK_MODULE(libdc1394 HAVE_DC1394)
wester committed
150 151 152 153 154 155 156
    endif()
  endif(WIN32 AND MINGW)
endif(WITH_1394)

# --- xine ---
ocv_clear_vars(HAVE_XINE)
if(WITH_XINE)
a  
Kai Westerkamp committed
157
  CHECK_MODULE(libxine HAVE_XINE)
wester committed
158 159 160 161 162 163
endif(WITH_XINE)

# --- V4L ---
ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_VIDEOIO)
if(WITH_V4L)
  if(WITH_LIBV4L)
a  
Kai Westerkamp committed
164 165
    CHECK_MODULE(libv4l1 HAVE_LIBV4L1)
    CHECK_MODULE(libv4l2 HAVE_LIBV4L2)
wester committed
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
    if(HAVE_LIBV4L1 AND HAVE_LIBV4L2)
      set(HAVE_LIBV4L YES)
    else()
      set(HAVE_LIBV4L NO)
    endif()
  endif()
  CHECK_INCLUDE_FILE(linux/videodev.h HAVE_CAMV4L)
  CHECK_INCLUDE_FILE(linux/videodev2.h HAVE_CAMV4L2)
  CHECK_INCLUDE_FILE(sys/videoio.h HAVE_VIDEOIO)
endif(WITH_V4L)

# --- OpenNI ---
ocv_clear_vars(HAVE_OPENNI HAVE_OPENNI_PRIME_SENSOR_MODULE)
if(WITH_OPENNI)
  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindOpenNI.cmake")
endif(WITH_OPENNI)

# --- XIMEA ---
ocv_clear_vars(HAVE_XIMEA)
if(WITH_XIMEA)
  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindXimea.cmake")
  if(XIMEA_FOUND)
    set(HAVE_XIMEA TRUE)
  endif()
endif(WITH_XIMEA)

# --- FFMPEG ---
wester committed
193
ocv_clear_vars(HAVE_FFMPEG)
wester committed
194 195
if(WITH_FFMPEG)
  if(WIN32 AND NOT ARM)
wester committed
196 197 198 199 200 201 202
    include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake")
    set(HAVE_FFMPEG TRUE)
  elseif(PKG_CONFIG_FOUND)
    ocv_check_modules(FFMPEG libavcodec libavformat libavutil libswscale)
    ocv_check_modules(FFMPEG_libavresample libavresample)
    if(FFMPEG_libavresample_FOUND)
      ocv_append_build_options(FFMPEG FFMPEG_libavresample)
wester committed
203 204
    endif()
    if(HAVE_FFMPEG)
wester committed
205 206 207 208 209 210 211 212 213 214 215 216 217 218
      try_compile(__VALID_FFMPEG
          "${OpenCV_BINARY_DIR}"
          "${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp"
          CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_DIRS}"
                      "-DLINK_DIRECTORIES:STRING=${FFMPEG_LIBRARY_DIRS}"
                      "-DLINK_LIBRARIES:STRING=${FFMPEG_LIBRARIES}"
          OUTPUT_VARIABLE TRY_OUT
      )
      if(NOT __VALID_FFMPEG)
        #message(FATAL_ERROR "FFMPEG: test check build log:\n${TRY_OUT}")
        message(STATUS "WARNING: Can't build ffmpeg test code")
        set(HAVE_FFMPEG FALSE)
      else()
        ocv_append_build_options(HIGHGUI FFMPEG)
wester committed
219 220
      endif()
    endif()
wester committed
221 222
  else()
    message(STATUS "Can't find ffmpeg - 'pkg-config' utility is missing")
wester committed
223 224 225 226 227
  endif()
endif(WITH_FFMPEG)

# --- VideoInput/DirectShow ---
if(WITH_DSHOW)
a  
Kai Westerkamp committed
228 229
  # always have VideoInput on Windows
  set(HAVE_DSHOW 1)
wester committed
230 231 232 233 234 235 236 237
endif(WITH_DSHOW)

# --- VideoInput/Microsoft Media Foundation ---
ocv_clear_vars(HAVE_MSMF)
if(WITH_MSMF)
  check_include_file(Mfapi.h HAVE_MSMF)
endif(WITH_MSMF)

wester committed
238
# --- Extra HighGUI libs on Windows ---
wester committed
239
if(WIN32)
wester committed
240
  list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32 vfw32)
wester committed
241
  if(MINGW64)
wester committed
242 243
    list(APPEND HIGHGUI_LIBRARIES avifil32 avicap32 winmm msvfw32)
    list(REMOVE_ITEM HIGHGUI_LIBRARIES vfw32)
wester committed
244
  elseif(MINGW)
wester committed
245
    list(APPEND HIGHGUI_LIBRARIES winmm)
wester committed
246 247 248
  endif()
endif(WIN32)

wester committed
249 250 251
if(APPLE)
  if(WITH_AVFOUNDATION)
    set(HAVE_AVFOUNDATION YES)
wester committed
252
  endif()
wester committed
253 254 255 256 257 258 259 260
  if(NOT IOS)
    if(WITH_QUICKTIME)
      set(HAVE_QUICKTIME YES)
    elseif(WITH_QTKIT)
      set(HAVE_QTKIT YES)
    endif()
  endif()
endif(APPLE)
wester committed
261 262 263 264 265

# --- Intel Perceptual Computing SDK ---
if(WITH_INTELPERC)
  include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake")
endif(WITH_INTELPERC)