1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 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 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 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 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
|
# - Try to find ffmpeg libraries (libavcodec, libavdevice, libavformat, libavutil, and libswscale)
# Once done this will define
#
# FFMPEG_FOUND - system has ffmpeg or libav
# FFMPEG_INCLUDE_DIR - the ffmpeg include directory
# FFMPEG_LIBRARIES - Link these to use ffmpeg
# FFMPEG_LIBAVCODEC
# FFMPEG_LIBAVDEVICE
# FFMPEG_LIBAVFORMAT
# FFMPEG_LIBAVUTIL
# FFMPEG_LIBSWSCALE
#
# Copyright (c) 2008 Andreas Schneider <mail@cynapses.org>
# Modified for other libraries by Lasse Kärkkäinen <tronic>
# Modified for Hedgewars by Stepik777
# Modified for INDILIB by rlancaste
#
# Redistribution and use is allowed according to the terms of the New
# BSD license.
#
macro(_FFMPEG_PACKAGE_check_version)
if(EXISTS "${PACKAGE_INCLUDE_DIR}/version.h")
file(READ "${PACKAGE_INCLUDE_DIR}/version.h" _FFMPEG_PACKAGE_version_header)
string(REGEX MATCH "#define ${PACKAGE_NAME}_VERSION_MAJOR[ \t]+([0-9]+)" _VERSION_MAJOR_match "${_FFMPEG_PACKAGE_version_header}")
set(FFMPEG_PACKAGE_VERSION_MAJOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define ${PACKAGE_NAME}_VERSION_MINOR[ \t]+([0-9]+)" _VERSION_MINOR_match "${_FFMPEG_PACKAGE_version_header}")
set(FFMPEG_PACKAGE_VERSION_MINOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define ${PACKAGE_NAME}_VERSION_MICRO[ \t]+([0-9]+)" _VERSION_MICRO_match "${_FFMPEG_PACKAGE_version_header}")
set(FFMPEG_PACKAGE_VERSION_MICRO "${CMAKE_MATCH_1}")
set(FFMPEG_PACKAGE_VERSION ${FFMPEG_PACKAGE_VERSION_MAJOR}.${FFMPEG_PACKAGE_VERSION_MINOR}.${FFMPEG_PACKAGE_VERSION_MICRO})
if(${FFMPEG_PACKAGE_VERSION} VERSION_LESS ${FFMPEG_PACKAGE_FIND_VERSION})
set(FFMPEG_PACKAGE_VERSION_OK FALSE)
else(${FFMPEG_PACKAGE_VERSION} VERSION_LESS ${FFMPEG_PACKAGE_FIND_VERSION})
set(FFMPEG_PACKAGE_VERSION_OK TRUE)
endif(${FFMPEG_PACKAGE_VERSION} VERSION_LESS ${FFMPEG_PACKAGE_FIND_VERSION})
if(NOT FFMPEG_PACKAGE_VERSION_OK)
message(STATUS "${PACKAGE_NAME} version ${FFMPEG_PACKAGE_VERSION} found in ${PACKAGE_INCLUDE_DIR}, "
"but at least version ${FFMPEG_PACKAGE_FIND_VERSION} is required")
else(NOT FFMPEG_PACKAGE_VERSION_OK)
mark_as_advanced(FFMPEG_PACKAGE_VERSION_MAJOR FFMPEG_PACKAGE_VERSION_MINOR FFMPEG_PACKAGE_VERSION_MICRO)
endif(NOT FFMPEG_PACKAGE_VERSION_OK)
else(EXISTS "${PACKAGE_INCLUDE_DIR}/version.h")
set(FFMPEG_PACKAGE_VERSION_OK FALSE)
message(STATUS "${PACKAGE_NAME}'s version.h file was not found in the include directory: ${PACKAGE_INCLUDE_DIR}, please install this program.")
endif(EXISTS "${PACKAGE_INCLUDE_DIR}/version.h")
endmacro(_FFMPEG_PACKAGE_check_version)
# required ffmpeg library versions, Requiring at least FFMPEG 3.2.11, Hypatia
set(_avcodec_ver ">=57.64.101")
set(_avdevice_ver ">=57.1.100")
set(_avformat_ver ">=57.56.100")
set(_avutil_ver ">=55.34.100")
set(_swscale_ver ">=4.2.100")
if (FFMPEG_LIBRARIES AND FFMPEG_INCLUDE_DIR)
# in cache already
set(FFMPEG_FOUND TRUE)
else (FFMPEG_LIBRARIES AND FFMPEG_INCLUDE_DIR)
# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_path(FFMPEG_INCLUDE_DIR
NAMES libavcodec/avcodec.h
PATHS ${FFMPEG_INCLUDE_DIRS} ${CMAKE_INSTALL_PREFIX}/include /usr/include /usr/local/include /opt/local/include /sw/include
PATH_SUFFIXES ffmpeg libav
)
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(AVCODEC libavcodec${_avcodec_ver})
pkg_check_modules(AVDEVICE libavdevice${_avdevice_ver})
pkg_check_modules(AVFORMAT libavformat${_avformat_ver})
pkg_check_modules(AVUTIL libavutil${_avutil_ver})
pkg_check_modules(SWSCALE libswscale${_swscale_ver})
endif (PKG_CONFIG_FOUND)
if (NOT PKG_CONFIG_FOUND OR
NOT FFMPEG_LIBAVCODEC OR
NOT FFMPEG_LIBAVDEVICE OR
NOT FFMPEG_LIBAVFORMAT OR
NOT FFMPEG_LIBAVUTIL OR
NOT FFMPEG_LIBSWSCALE)
# LIBAVCODEC
set(PACKAGE_NAME "LIBAVCODEC")
set(PACKAGE_INCLUDE_DIR "${FFMPEG_INCLUDE_DIR}/libavcodec")
set(FFMPEG_PACKAGE_FIND_VERSION _avcodec_ver)
_FFMPEG_PACKAGE_check_version()
if(FFMPEG_PACKAGE_VERSION_OK)
set(AVCODEC_VERSION FFMPEG_PACKAGE_VERSION)
endif(FFMPEG_PACKAGE_VERSION_OK)
# LIBAVDEVICE
set(PACKAGE_NAME "LIBAVDEVICE")
set(PACKAGE_INCLUDE_DIR "${FFMPEG_INCLUDE_DIR}/libavdevice")
set(FFMPEG_PACKAGE_FIND_VERSION _avdevice_ver)
_FFMPEG_PACKAGE_check_version()
if(FFMPEG_PACKAGE_VERSION_OK)
set(AVDEVICE_VERSION FFMPEG_PACKAGE_VERSION)
endif(FFMPEG_PACKAGE_VERSION_OK)
# LIBAVFORMAT
set(PACKAGE_NAME "LIBAVFORMAT")
set(PACKAGE_INCLUDE_DIR "${FFMPEG_INCLUDE_DIR}/libavformat")
set(FFMPEG_PACKAGE_FIND_VERSION _avformat_ver)
_FFMPEG_PACKAGE_check_version()
if(FFMPEG_PACKAGE_VERSION_OK)
set(AVFORMAT_VERSION FFMPEG_PACKAGE_VERSION)
endif(FFMPEG_PACKAGE_VERSION_OK)
# LIBAVUTIL
set(PACKAGE_NAME "LIBAVUTIL")
set(PACKAGE_INCLUDE_DIR "${FFMPEG_INCLUDE_DIR}/libavutil")
set(FFMPEG_PACKAGE_FIND_VERSION _avutil_ver)
_FFMPEG_PACKAGE_check_version()
if(FFMPEG_PACKAGE_VERSION_OK)
set(AVUTIL_VERSION FFMPEG_PACKAGE_VERSION)
endif(FFMPEG_PACKAGE_VERSION_OK)
# LIBSWSCALE
set(PACKAGE_NAME "LIBSWSCALE")
set(PACKAGE_INCLUDE_DIR "${FFMPEG_INCLUDE_DIR}/libswscale")
set(FFMPEG_PACKAGE_FIND_VERSION _swscale_ver)
_FFMPEG_PACKAGE_check_version()
if(FFMPEG_PACKAGE_VERSION_OK)
set(SWSCALE_VERSION FFMPEG_PACKAGE_VERSION)
endif(FFMPEG_PACKAGE_VERSION_OK)
endif ()
find_library(FFMPEG_LIBAVCODEC
NAMES avcodec libavcodec
PATHS ${AVCODEC_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}/lib /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVDEVICE
NAMES avdevice libavdevice
PATHS ${AVDEVICE_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}/lib /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVFORMAT
NAMES avformat libavformat
PATHS ${AVFORMAT_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}/lib /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBAVUTIL
NAMES avutil libavutil
PATHS ${AVUTIL_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}/lib /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
find_library(FFMPEG_LIBSWSCALE
NAMES swscale libswscale
PATHS ${SWSCALE_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX}/lib /usr/lib /usr/local/lib /opt/local/lib /sw/lib
)
#Only set FFMPEG to found if all the libraries are found in the right versions.
if(AVCODEC_VERSION AND
AVDEVICE_VERSION AND
AVFORMAT_VERSION AND
AVUTIL_VERSION AND
SWSCALE_VERSION AND
FFMPEG_LIBAVCODEC AND
FFMPEG_LIBAVDEVICE AND
FFMPEG_LIBAVFORMAT AND
FFMPEG_LIBAVUTIL AND
FFMPEG_LIBSWSCALE)
set(FFMPEG_FOUND TRUE)
endif()
if (FFMPEG_FOUND)
set(FFMPEG_LIBRARIES
${FFMPEG_LIBAVCODEC}
${FFMPEG_LIBAVDEVICE}
${FFMPEG_LIBAVFORMAT}
${FFMPEG_LIBAVUTIL}
${FFMPEG_LIBSWSCALE}
)
endif (FFMPEG_FOUND)
if (FFMPEG_FOUND)
if (NOT FFMPEG_FIND_QUIETLY)
message(STATUS "Found FFMPEG: ${FFMPEG_LIBRARIES}, ${FFMPEG_INCLUDE_DIR}")
endif (NOT FFMPEG_FIND_QUIETLY)
else (FFMPEG_FOUND)
message(STATUS "Could not find up to date FFMPEG for INDI Webcam. Up to date versions of these packages are required: libavcodec, libavdevice, libavformat, libavutil, and libswscale")
if (FFMPEG_FIND_REQUIRED)
message(FATAL_ERROR "Error: FFMPEG is required by this package!")
endif (FFMPEG_FIND_REQUIRED)
endif (FFMPEG_FOUND)
endif (FFMPEG_LIBRARIES AND FFMPEG_INCLUDE_DIR)
|