blob: 7b06d39e5d80a3e5c4e611ed929f68f9a9ea3fcb [file] [log] [blame]
agsantosdd6a62a2021-03-29 17:13:27 -04001FFMPEG_HASH := 9f38fac053010205806ece11e6aea9b7d3bde041
2FFMPEG_URL := https://git.ffmpeg.org/gitweb/ffmpeg.git/snapshot/$(FFMPEG_HASH).tar.gz
3
4PKGS+=ffmpeg
5
6ifeq ($(call need_pkg,"libavutil >= 55.75.100 libavcodec >= 57.106.101 libavformat >= 57.82.100 libavdevice >= 57.8.101 libavfilter >= 6.105.100 libswscale >= 4.7.103 libswresample >= 2.9.100"),)
7PKGS_FOUND += ffmpeg
8endif
9
10DEPS_ffmpeg = iconv zlib vpx opus speex x264
11
12FFMPEGCONF = \
13 --cc="$(CC)" \
14 --pkg-config="$(PKG_CONFIG)"
15
16#disable everything
17FFMPEGCONF += \
18 --disable-everything \
19 --enable-zlib \
20 --enable-gpl \
21 --enable-swscale \
22 --enable-bsfs \
23 --disable-filters \
24 --disable-programs \
25 --disable-postproc
26
27FFMPEGCONF += \
28 --disable-protocols \
29 --enable-protocol=crypto \
30 --enable-protocol=file \
31 --enable-protocol=rtp \
32 --enable-protocol=srtp \
33 --enable-protocol=tcp \
34 --enable-protocol=udp \
35 --enable-protocol=unix \
36 --enable-protocol=pipe
37
38#enable muxers/demuxers
39FFMPEGCONF += \
40 --disable-demuxers \
41 --disable-muxers \
42 --enable-muxer=rtp \
43 --enable-muxer=g722 \
44 --enable-muxer=h263 \
45 --enable-muxer=h264 \
46 --enable-muxer=hevc \
47 --enable-muxer=webm \
48 --enable-muxer=ogg \
49 --enable-muxer=pcm_s16be \
50 --enable-muxer=pcm_s16le \
51 --enable-demuxer=rtp \
52 --enable-demuxer=mjpeg \
53 --enable-demuxer=mjpeg_2000 \
54 --enable-demuxer=mpegvideo \
55 --enable-demuxer=image_jpeg_pipe \
56 --enable-demuxer=image_png_pipe \
57 --enable-demuxer=image_webp_pipe \
58 --enable-demuxer=matroska \
59 --enable-demuxer=m4v \
60 --enable-demuxer=mp3 \
61 --enable-demuxer=ogg \
62 --enable-demuxer=flac \
63 --enable-demuxer=wav \
64 --enable-demuxer=ac3 \
65 --enable-demuxer=g722 \
66 --enable-demuxer=pcm_mulaw \
67 --enable-demuxer=pcm_alaw \
68 --enable-demuxer=pcm_s16be \
69 --enable-demuxer=pcm_s16le \
70 --enable-demuxer=h263 \
71 --enable-demuxer=h264 \
72 --enable-demuxer=hevc
73
74#enable parsers
75FFMPEGCONF += \
76 --enable-parser=h263 \
77 --enable-parser=h264 \
78 --enable-parser=hevc \
79 --enable-parser=mpeg4video \
80 --enable-parser=vp8 \
81 --enable-parser=vp9 \
82 --enable-parser=opus
83
84#encoders/decoders
85FFMPEGCONF += \
86 --enable-encoder=adpcm_g722 \
87 --enable-decoder=adpcm_g722 \
88 --enable-encoder=rawvideo \
89 --enable-decoder=rawvideo \
90 --enable-encoder=libx264 \
91 --enable-decoder=h264 \
92 --enable-encoder=pcm_alaw \
93 --enable-decoder=pcm_alaw \
94 --enable-encoder=pcm_mulaw \
95 --enable-decoder=pcm_mulaw \
96 --enable-encoder=mpeg4 \
97 --enable-decoder=mpeg4 \
98 --enable-encoder=libvpx_vp8 \
99 --enable-decoder=vp8 \
100 --enable-decoder=vp9 \
101 --enable-encoder=h263 \
102 --enable-encoder=h263p \
103 --enable-decoder=h263 \
104 --enable-encoder=mjpeg \
105 --enable-decoder=mjpeg \
106 --enable-decoder=mjpegb \
107 --enable-libspeex \
108 --enable-libopus \
109 --enable-libvpx \
110 --enable-libx264 \
111 --enable-encoder=libspeex \
112 --enable-decoder=libspeex \
113 --enable-encoder=libopus \
114 --enable-decoder=libopus
115
116# decoders for ringtones and audio streaming
117FFMPEGCONF += \
118 --enable-decoder=flac \
119 --enable-decoder=vorbis \
120 --enable-decoder=aac \
121 --enable-decoder=ac3 \
122 --enable-decoder=eac3 \
123 --enable-decoder=mp3 \
124 --enable-decoder=pcm_u24be \
125 --enable-decoder=pcm_u24le \
126 --enable-decoder=pcm_u32be \
127 --enable-decoder=pcm_u32le \
128 --enable-decoder=pcm_u8 \
129 --enable-decoder=pcm_f16le \
130 --enable-decoder=pcm_f24le \
131 --enable-decoder=pcm_f32be \
132 --enable-decoder=pcm_f32le \
133 --enable-decoder=pcm_f64be \
134 --enable-decoder=pcm_f64le \
135 --enable-decoder=pcm_s16be \
136 --enable-decoder=pcm_s16be_planar \
137 --enable-decoder=pcm_s16le \
138 --enable-decoder=pcm_s16le_planar \
139 --enable-decoder=pcm_s24be \
140 --enable-decoder=pcm_s24le \
141 --enable-decoder=pcm_s24le_planar \
142 --enable-decoder=pcm_s32be \
143 --enable-decoder=pcm_s32le \
144 --enable-decoder=pcm_s32le_planar \
145 --enable-decoder=pcm_s64be \
146 --enable-decoder=pcm_s64le \
147 --enable-decoder=pcm_s8 \
148 --enable-decoder=pcm_s8_planar \
149 --enable-decoder=pcm_u16be \
150 --enable-decoder=pcm_u16le
151
152#encoders/decoders for images
153FFMPEGCONF += \
154 --enable-encoder=jpegls \
155 --enable-decoder=jpegls \
156 --enable-encoder=ljpeg \
157 --enable-decoder=jpeg2000 \
158 --enable-encoder=png \
159 --enable-decoder=png
160
161#filters
162FFMPEGCONF += \
163 --enable-filter=scale \
164 --enable-filter=overlay \
165 --enable-filter=format \
166 --enable-filter=fps \
167 --enable-filter=transpose \
168 --enable-filter=rotate \
169 --enable-filter=alphamerge \
170 --enable-filter=boxblur \
171 --enable-filter=lut \
172 --enable-filter=negate \
173 --enable-filter=colorkey \
174 --enable-filter=split
175
176
177#platform specific options
178
179ifdef HAVE_WIN32
180FFMPEGCONF += \
181 --enable-indev=dshow \
182 --enable-indev=gdigrab \
183 --enable-dxva2
184endif
185
186ifdef HAVE_LINUX
187FFMPEGCONF += --enable-pic
188ifdef HAVE_ANDROID
189# Android Linux
190FFMPEGCONF += \
191 --target-os=android \
192 --enable-jni \
193 --enable-mediacodec \
194 --enable-decoder=vp8_mediacodec \
195 --enable-decoder=h264_mediacodec \
196 --enable-decoder=mpeg4_mediacodec \
197 --enable-decoder=hevc_mediacodec \
198 --enable-cross-compile \
199 --ranlib=$(RANLIB) \
200 --strip=$(STRIP) \
201 --cc=$(CC) \
202 --cxx=$(CXX) \
203 --ld=$(CC) \
204 --ar=$(AR)
205# ASM not working on Android x86 https://trac.ffmpeg.org/ticket/4928
206ifeq ($(ARCH),i386)
207FFMPEGCONF += --disable-asm
208endif
209ifeq ($(ARCH),x86_64)
210FFMPEGCONF += --disable-asm
211endif
212else
213# Desktop Linux
214DEPS_ffmpeg += ffnvcodec
215FFMPEGCONF += \
216 --target-os=linux \
217 --enable-indev=v4l2 \
218 --enable-indev=xcbgrab \
219 --enable-vdpau \
220 --enable-hwaccel=h264_vdpau \
221 --enable-hwaccel=mpeg4_vdpau \
222 --enable-vaapi \
223 --enable-hwaccel=h264_vaapi \
224 --enable-hwaccel=mpeg4_vaapi \
225 --enable-hwaccel=h263_vaapi \
226 --enable-hwaccel=vp8_vaapi \
227 --enable-hwaccel=mjpeg_vaapi \
228 --enable-hwaccel=hevc_vaapi \
229 --enable-encoder=h264_vaapi \
230 --enable-encoder=vp8_vaapi \
231 --enable-encoder=mjpeg_vaapi \
232 --enable-encoder=hevc_vaapi
233# ffnvcodec is not supported on ARM then we enable it here for i386 and x86_64
234ifeq ($(ARCH),$(filter $(ARCH),i386 x86_64))
235FFMPEGCONF += --enable-cuvid \
236 --enable-ffnvcodec \
237 --enable-nvdec \
238 --enable-nvenc \
239 --enable-hwaccel=h264_nvdec \
240 --enable-hwaccel=hevc_nvdec \
241 --enable-hwaccel=vp8_nvdec \
242 --enable-hwaccel=mjpeg_nvdec \
243 --enable-encoder=h264_nvenc \
244 --enable-encoder=hevc_nvenc
245endif
246# End Desktop Linux:
247endif
248# End HAVE_LINUX:
249endif
250
251ifdef HAVE_MACOSX
252FFMPEGCONF += \
253 --enable-avfoundation \
254 --enable-indev=avfoundation \
255 --enable-videotoolbox \
256 --enable-hwaccel=h263_videotoolbox \
257 --enable-hwaccel=h264_videotoolbox \
258 --enable-hwaccel=mpeg4_videotoolbox \
259 --enable-hwaccel=hevc_videotoolbox \
260 --enable-encoder=h264_videotoolbox \
261 --enable-encoder=hevc_videotoolbox \
262 --disable-securetransport
263endif
264
265ifdef HAVE_IOS
266FFMPEGCONF += \
267 --enable-videotoolbox \
268 --enable-hwaccel=h263_videotoolbox \
269 --enable-hwaccel=h264_videotoolbox \
270 --enable-hwaccel=mpeg4_videotoolbox \
271 --enable-hwaccel=hevc_videotoolbox \
272 --enable-encoder=h264_videotoolbox \
273 --enable-encoder=hevc_videotoolbox \
274 --target-os=darwin \
275 --enable-cross-compile \
276 --enable-pic
277endif
278
279ifndef HAVE_IOS
280ifndef HAVE_ANDROID
281ifdef HAVE_CROSS_COMPILE
282FFMPEGCONF += --cross-prefix=$(HOST)-
283endif
284endif
285endif
286
287# x86 stuff
288ifeq ($(ARCH),i386)
289FFMPEGCONF += --arch=x86
290endif
291
292ifeq ($(ARCH),x86_64)
293FFMPEGCONF += --arch=x86_64
294endif
295
296# ARM stuff
297ifeq ($(ARCH),arm)
298FFMPEGCONF += --arch=arm
299ifdef HAVE_ARMV7A
300FFMPEGCONF += --cpu=cortex-a8
301endif
302ifdef HAVE_ARMV6
303FFMPEGCONF += --cpu=armv6 --disable-neon
304endif
305endif
306
307# ARM64 stuff
308ifeq ($(ARCH),aarch64)
309FFMPEGCONF += --arch=aarch64
310endif
311ifeq ($(ARCH),arm64)
312FFMPEGCONF += --arch=aarch64
313endif
314
315# Windows
316ifdef HAVE_WIN32
317DEPS_ffmpeg += ffnvcodec
318FFMPEGCONF += --target-os=mingw32 \
319 --enable-w32threads \
320 --disable-decoder=dca \
321 --enable-cuvid \
322 --enable-ffnvcodec \
323 --enable-nvdec \
324 --enable-nvenc \
325 --enable-hwaccel=h264_nvdec \
326 --enable-hwaccel=hevc_nvdec \
327 --enable-hwaccel=vp8_nvdec \
328 --enable-hwaccel=mjpeg_nvdec \
329 --enable-encoder=h264_nvenc \
330 --enable-encoder=hevc_nvenc
331endif
332
333$(TARBALLS)/ffmpeg-$(FFMPEG_HASH).tar.gz:
334 $(call download,$(FFMPEG_URL))
335
336.sum-ffmpeg: ffmpeg-$(FFMPEG_HASH).tar.gz
337
338ffmpeg: ffmpeg-$(FFMPEG_HASH).tar.gz
339 rm -Rf $@ $@-$(FFMPEG_HASH)
340 mkdir -p $@-$(FFMPEG_HASH)
341 (cd $@-$(FFMPEG_HASH) && tar x $(if ${BATCH_MODE},,-v) --strip-components=1 -f $<)
342 $(APPLY) $(SRC)/ffmpeg/remove-mjpeg-log.patch
343 $(APPLY) $(SRC)/ffmpeg/change-RTCP-ratio.patch
344 $(APPLY) $(SRC)/ffmpeg/rtp_ext_abs_send_time.patch
345 $(APPLY) $(SRC)/ffmpeg/libopusdec-enable-FEC.patch
346 $(APPLY) $(SRC)/ffmpeg/libopusenc-enable-FEC.patch
347 $(UPDATE_AUTOCONFIG)
348 $(MOVE)
349
350.ffmpeg: ffmpeg .sum-ffmpeg
351 cd $< && $(HOSTVARS) ./configure \
352 --extra-cflags="$(CFLAGS)" \
353 --extra-ldflags="$(LDFLAGS)" $(FFMPEGCONF) \
354 --prefix="$(PREFIX)" --enable-static --disable-shared \
355 --pkg-config-flags="--static"
356 cd $< && $(MAKE) install-libs install-headers
357 touch $@