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