 799622affd
			
		
	
	799622affd
	
	
	
		
			
			(cherry picked from commit 2b2e3ee93c)
Conflicts:
	cmake/OpenCVFindLibsVideo.cmake
	modules/videoio/src/cap.cpp
	modules/videoio/src/cap_ffmpeg_impl.hpp
	modules/videoio/src/ffmpeg_codecs.hpp
	modules/videoio/test/test_ffmpeg.cpp
		
	
		
			
				
	
	
		
			294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| # ----------------------------------------------------------------------------
 | |
| #  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(WITH_GSTREAMER)
 | |
|   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)
 | |
| 
 | |
|   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-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})
 | |
|   endif()
 | |
| 
 | |
| endif(WITH_GSTREAMER)
 | |
| 
 | |
| # 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()
 | |
| 
 | |
| # 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)
 | |
|   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)
 | |
| 
 | |
|   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()
 | |
| endif(WITH_GSTREAMER_0_10 AND NOT HAVE_GSTREAMER)
 | |
| 
 | |
| # --- unicap ---
 | |
| ocv_clear_vars(HAVE_UNICAP)
 | |
| if(WITH_UNICAP)
 | |
|   CHECK_MODULE(libunicap HAVE_UNICAP_)
 | |
|   CHECK_MODULE(libucil HAVE_UNICAP_UCIL)
 | |
|   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})
 | |
|         set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES}
 | |
|             "${DC1394_2_LIB_DIR}/libdc1394.a"
 | |
|             "${CMU1394_LIB_DIR}/lib1394camera.a")
 | |
|       endif(HAVE_DC1394_2)
 | |
|   else(WIN32 AND MINGW)
 | |
|     CHECK_MODULE(libdc1394-2 HAVE_DC1394_2)
 | |
|     if(NOT HAVE_DC1394_2)
 | |
|       CHECK_MODULE(libdc1394 HAVE_DC1394)
 | |
|     endif()
 | |
|   endif(WIN32 AND MINGW)
 | |
| endif(WITH_1394)
 | |
| 
 | |
| # --- xine ---
 | |
| ocv_clear_vars(HAVE_XINE)
 | |
| if(WITH_XINE)
 | |
|   CHECK_MODULE(libxine HAVE_XINE)
 | |
| endif(WITH_XINE)
 | |
| 
 | |
| # --- V4L ---
 | |
| ocv_clear_vars(HAVE_LIBV4L HAVE_CAMV4L HAVE_CAMV4L2 HAVE_VIDEOIO)
 | |
| if(WITH_V4L)
 | |
|   if(WITH_LIBV4L)
 | |
|     CHECK_MODULE(libv4l1 HAVE_LIBV4L1)
 | |
|     CHECK_MODULE(libv4l2 HAVE_LIBV4L2)
 | |
|     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 ---
 | |
| 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)
 | |
| if(WITH_FFMPEG)
 | |
|   if(WIN32 AND NOT ARM)
 | |
|     include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg_version.cmake")
 | |
|   elseif(UNIX)
 | |
|     CHECK_MODULE(libavcodec HAVE_FFMPEG_CODEC)
 | |
|     CHECK_MODULE(libavformat HAVE_FFMPEG_FORMAT)
 | |
|     CHECK_MODULE(libavutil HAVE_FFMPEG_UTIL)
 | |
|     CHECK_MODULE(libswscale HAVE_FFMPEG_SWSCALE)
 | |
|     CHECK_MODULE(libavresample HAVE_FFMPEG_RESAMPLE)
 | |
| 
 | |
|     CHECK_INCLUDE_FILE(libavformat/avformat.h HAVE_GENTOO_FFMPEG)
 | |
|     CHECK_INCLUDE_FILE(ffmpeg/avformat.h HAVE_FFMPEG_FFMPEG)
 | |
|     if(NOT HAVE_GENTOO_FFMPEG AND NOT HAVE_FFMPEG_FFMPEG)
 | |
|       if(EXISTS /usr/include/ffmpeg/libavformat/avformat.h OR HAVE_FFMPEG_SWSCALE)
 | |
|         set(HAVE_GENTOO_FFMPEG TRUE)
 | |
|       endif()
 | |
|     endif()
 | |
|     if(HAVE_FFMPEG_CODEC AND HAVE_FFMPEG_FORMAT AND HAVE_FFMPEG_UTIL AND HAVE_FFMPEG_SWSCALE)
 | |
|       set(HAVE_FFMPEG TRUE)
 | |
|     endif()
 | |
| 
 | |
|     if(HAVE_FFMPEG)
 | |
|       # Find the bzip2 library because it is required on some systems
 | |
|       FIND_LIBRARY(BZIP2_LIBRARIES NAMES bz2 bzip2)
 | |
|       if(NOT BZIP2_LIBRARIES)
 | |
|         # Do an other trial
 | |
|         FIND_FILE(BZIP2_LIBRARIES NAMES libbz2.so.1 PATHS /lib)
 | |
|       endif()
 | |
|     else()
 | |
|       find_path(FFMPEG_INCLUDE_DIR "libavformat/avformat.h"
 | |
|                 PATHS /usr/local /usr /opt
 | |
|                 PATH_SUFFIXES include
 | |
|                 DOC "The path to FFMPEG headers")
 | |
|       if(FFMPEG_INCLUDE_DIR)
 | |
|         set(HAVE_GENTOO_FFMPEG TRUE)
 | |
|         set(FFMPEG_LIB_DIR "${FFMPEG_INCLUDE_DIR}/../lib" CACHE PATH "Full path of FFMPEG library directory")
 | |
|         find_library(FFMPEG_CODEC_LIB "avcodec" HINTS "${FFMPEG_LIB_DIR}")
 | |
|         find_library(FFMPEG_FORMAT_LIB "avformat" HINTS "${FFMPEG_LIB_DIR}")
 | |
|         find_library(FFMPEG_UTIL_LIB "avutil" HINTS "${FFMPEG_LIB_DIR}")
 | |
|         find_library(FFMPEG_SWSCALE_LIB "swscale" HINTS "${FFMPEG_LIB_DIR}")
 | |
|         if(FFMPEG_CODEC_LIB AND FFMPEG_FORMAT_LIB AND
 | |
|            FFMPEG_UTIL_LIB AND FFMPEG_SWSCALE_LIB)
 | |
|           set(ALIASOF_libavcodec_VERSION "Unknown")
 | |
|           set(ALIASOF_libavformat_VERSION "Unknown")
 | |
|           set(ALIASOF_libavutil_VERSION "Unknown")
 | |
|           set(ALIASOF_libswscale_VERSION "Unknown")
 | |
|           set(HAVE_FFMPEG 1)
 | |
|         endif()
 | |
|       endif(FFMPEG_INCLUDE_DIR)
 | |
|       if(HAVE_FFMPEG)
 | |
|         set(HIGHGUI_LIBRARIES ${HIGHGUI_LIBRARIES}
 | |
|             ${FFMPEG_CODEC_LIB} ${FFMPEG_FORMAT_LIB}
 | |
|             ${FFMPEG_UTIL_LIB} ${FFMPEG_SWSCALE_LIB})
 | |
|         ocv_include_directories(${FFMPEG_INCLUDE_DIR})
 | |
|       endif(HAVE_FFMPEG)
 | |
|     endif()
 | |
|   endif()
 | |
| endif(WITH_FFMPEG)
 | |
| 
 | |
| # --- VideoInput/DirectShow ---
 | |
| if(WITH_DSHOW)
 | |
|   # always have VideoInput on Windows
 | |
|   set(HAVE_DSHOW 1)
 | |
| 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)
 | |
| 
 | |
| # --- Extra HighGUI libs on Windows ---
 | |
| if(WIN32)
 | |
|   list(APPEND HIGHGUI_LIBRARIES comctl32 gdi32 ole32 setupapi ws2_32 vfw32)
 | |
|   if(MINGW64)
 | |
|     list(APPEND HIGHGUI_LIBRARIES avifil32 avicap32 winmm msvfw32)
 | |
|     list(REMOVE_ITEM HIGHGUI_LIBRARIES vfw32)
 | |
|   elseif(MINGW)
 | |
|     list(APPEND HIGHGUI_LIBRARIES winmm)
 | |
|   endif()
 | |
| endif(WIN32)
 | |
| 
 | |
| # --- Apple AV Foundation ---
 | |
| if(WITH_AVFOUNDATION)
 | |
|   set(HAVE_AVFOUNDATION YES)
 | |
| endif()
 | |
| 
 | |
| # --- QuickTime ---
 | |
| if (NOT IOS)
 | |
|   if(WITH_QUICKTIME)
 | |
|     set(HAVE_QUICKTIME YES)
 | |
|   elseif(APPLE)
 | |
|     set(HAVE_QTKIT YES)
 | |
|   endif()
 | |
| endif()
 | |
| 
 | |
| # --- Intel Perceptual Computing SDK ---
 | |
| if(WITH_INTELPERC)
 | |
|   include("${OpenCV_SOURCE_DIR}/cmake/OpenCVFindIntelPerCSDK.cmake")
 | |
| endif(WITH_INTELPERC)
 |