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)
|