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