mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.6 KiB
146 lines
5.6 KiB
# --- FFMPEG --- |
|
OCV_OPTION(OPENCV_FFMPEG_ENABLE_LIBAVDEVICE "Include FFMPEG/libavdevice library support." OFF |
|
VISIBLE_IF WITH_FFMPEG) |
|
|
|
if(NOT HAVE_FFMPEG AND OPENCV_FFMPEG_USE_FIND_PACKAGE) |
|
if(OPENCV_FFMPEG_USE_FIND_PACKAGE STREQUAL "1" OR OPENCV_FFMPEG_USE_FIND_PACKAGE STREQUAL "ON") |
|
set(OPENCV_FFMPEG_USE_FIND_PACKAGE "FFMPEG") |
|
endif() |
|
find_package(${OPENCV_FFMPEG_USE_FIND_PACKAGE}) # Required components: AVCODEC AVFORMAT AVUTIL SWSCALE |
|
if(FFMPEG_FOUND OR FFmpeg_FOUND) |
|
set(HAVE_FFMPEG TRUE) |
|
endif() |
|
endif() |
|
|
|
if(NOT HAVE_FFMPEG AND WIN32 AND NOT ARM AND NOT OPENCV_FFMPEG_SKIP_DOWNLOAD) |
|
include("${OpenCV_SOURCE_DIR}/3rdparty/ffmpeg/ffmpeg.cmake") |
|
download_win_ffmpeg(FFMPEG_CMAKE_SCRIPT) |
|
if(FFMPEG_CMAKE_SCRIPT) |
|
include("${FFMPEG_CMAKE_SCRIPT}") |
|
set(HAVE_FFMPEG TRUE) |
|
set(HAVE_FFMPEG_WRAPPER TRUE) |
|
endif() |
|
endif() |
|
|
|
set(_required_ffmpeg_libraries libavcodec libavformat libavutil libswscale) |
|
set(_used_ffmpeg_libraries ${_required_ffmpeg_libraries}) |
|
if(NOT HAVE_FFMPEG AND PKG_CONFIG_FOUND) |
|
ocv_check_modules(FFMPEG libavcodec libavformat libavutil libswscale) |
|
if(FFMPEG_FOUND) |
|
ocv_check_modules(FFMPEG_libavresample libavresample) # optional |
|
if(FFMPEG_libavresample_FOUND) |
|
list(APPEND FFMPEG_LIBRARIES ${FFMPEG_libavresample_LIBRARIES}) |
|
list(APPEND _used_ffmpeg_libraries libavresample) |
|
endif() |
|
if(OPENCV_FFMPEG_ENABLE_LIBAVDEVICE) |
|
ocv_check_modules(FFMPEG_libavdevice libavdevice) # optional |
|
if(FFMPEG_libavdevice_FOUND) |
|
list(APPEND FFMPEG_LIBRARIES ${FFMPEG_libavdevice_LIBRARIES}) |
|
list(APPEND _used_ffmpeg_libraries libavdevice) |
|
endif() |
|
endif() |
|
set(HAVE_FFMPEG TRUE) |
|
else() |
|
set(_missing_ffmpeg_libraries "") |
|
foreach (ffmpeg_lib ${_required_ffmpeg_libraries}) |
|
if (NOT FFMPEG_${ffmpeg_lib}_FOUND) |
|
list(APPEND _missing_ffmpeg_libraries ${ffmpeg_lib}) |
|
endif() |
|
endforeach () |
|
message(STATUS "FFMPEG is disabled. Required libraries: ${_required_ffmpeg_libraries}." |
|
" Missing libraries: ${_missing_ffmpeg_libraries}") |
|
unset(_missing_ffmpeg_libraries) |
|
endif() |
|
endif() |
|
|
|
#================================= |
|
# Versions check. |
|
if(HAVE_FFMPEG AND NOT HAVE_FFMPEG_WRAPPER) |
|
set(_min_libavcodec_version 54.35.0) |
|
set(_min_libavformat_version 54.20.4) |
|
set(_min_libavutil_version 52.3.0) |
|
set(_min_libswscale_version 2.1.1) |
|
set(_min_libavresample_version 1.0.1) |
|
set(_min_libavdevice_version 53.2.0) |
|
foreach(ffmpeg_lib ${_used_ffmpeg_libraries}) |
|
if(FFMPEG_${ffmpeg_lib}_VERSION VERSION_LESS _min_${ffmpeg_lib}_version) |
|
message(STATUS "FFMPEG is disabled. Can't find suitable ${ffmpeg_lib} library" |
|
" (minimal ${_min_${ffmpeg_lib}_version}, found ${FFMPEG_${ffmpeg_lib}_VERSION}).") |
|
set(HAVE_FFMPEG FALSE) |
|
endif() |
|
endforeach() |
|
if(NOT HAVE_FFMPEG) |
|
message(STATUS "FFMPEG libraries version check failed " |
|
"(minimal libav release 9.20, minimal FFMPEG release 1.1.16).") |
|
endif() |
|
unset(_min_libavcodec_version) |
|
unset(_min_libavformat_version) |
|
unset(_min_libavutil_version) |
|
unset(_min_libswscale_version) |
|
unset(_min_libavresample_version) |
|
unset(_min_libavdevice_version) |
|
endif() |
|
|
|
#================================== |
|
|
|
if(HAVE_FFMPEG AND NOT HAVE_FFMPEG_WRAPPER AND NOT OPENCV_FFMPEG_SKIP_BUILD_CHECK) |
|
try_compile(__VALID_FFMPEG |
|
"${OpenCV_BINARY_DIR}" |
|
"${OpenCV_SOURCE_DIR}/cmake/checks/ffmpeg_test.cpp" |
|
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${FFMPEG_INCLUDE_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) |
|
endif() |
|
endif() |
|
|
|
#================================== |
|
unset(_required_ffmpeg_libraries) |
|
unset(_used_ffmpeg_libraries) |
|
|
|
if(HAVE_FFMPEG_WRAPPER) |
|
ocv_add_external_target(ffmpeg "" "" "HAVE_FFMPEG_WRAPPER") |
|
elseif(HAVE_FFMPEG) |
|
if(OPENCV_FFMPEG_ENABLE_LIBAVDEVICE AND FFMPEG_libavdevice_FOUND) |
|
set(HAVE_FFMPEG_LIBAVDEVICE TRUE) |
|
ocv_add_external_target(ffmpeg "${FFMPEG_INCLUDE_DIRS}" "${FFMPEG_LIBRARIES}" "HAVE_FFMPEG;HAVE_FFMPEG_LIBAVDEVICE") |
|
else() |
|
ocv_add_external_target(ffmpeg "${FFMPEG_INCLUDE_DIRS}" "${FFMPEG_LIBRARIES}" "HAVE_FFMPEG") |
|
endif() |
|
set(__builtin_defines "") |
|
set(__builtin_include_dirs "") |
|
set(__builtin_libs "") |
|
set(__plugin_defines "") |
|
set(__plugin_include_dirs "") |
|
set(__plugin_libs "") |
|
if(HAVE_OPENCL) |
|
set(__opencl_dirs "") |
|
if(OPENCL_INCLUDE_DIRS) |
|
set(__opencl_dirs "${OPENCL_INCLUDE_DIRS}") |
|
elseif(OPENCL_INCLUDE_DIR) |
|
set(__opencl_dirs "${OPENCL_INCLUDE_DIR}") |
|
else() |
|
set(__opencl_dirs "${OpenCV_SOURCE_DIR}/3rdparty/include/opencl/1.2") |
|
endif() |
|
# extra dependencies for buildin code (OpenCL dir is required for extensions like cl_d3d11.h) |
|
# buildin HAVE_OPENCL is already defined through cvconfig.h |
|
list(APPEND __builtin_include_dirs "${__opencl_dirs}") |
|
|
|
# extra dependencies for |
|
list(APPEND __plugin_defines "HAVE_OPENCL") |
|
list(APPEND __plugin_include_dirs "${__opencl_dirs}") |
|
endif() |
|
|
|
# TODO: libva, d3d11 |
|
|
|
if(__builtin_include_dirs OR __builtin_include_defines OR __builtin_include_libs) |
|
ocv_add_external_target(ffmpeg.builtin_deps "${__builtin_include_dirs}" "${__builtin_include_libs}" "${__builtin_defines}") |
|
endif() |
|
if(VIDEOIO_ENABLE_PLUGINS AND __plugin_include_dirs OR __plugin_include_defines OR __plugin_include_libs) |
|
ocv_add_external_target(ffmpeg.plugin_deps "${__plugin_include_dirs}" "${__plugin_include_libs}" "${__plugin_defines}") |
|
endif() |
|
endif()
|
|
|