From 340f92f5a8641f0c76cbc25e103eb9e1c84c2f2a858060007b3951ee2e757294 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Sat, 15 Jan 2022 11:15:43 +0000 Subject: [PATCH] Accepting request 946598 from home:jengelh:ff5 OBS-URL: https://build.opensuse.org/request/show/946598 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-5?expand=0&rev=1 --- .gitattributes | 23 + baselibs.conf | 11 + enable_decoders | 107 ++++ enable_encoders | 88 ++++ ffmpeg-4.2-dlopen-fdk_aac.patch | 188 +++++++ ffmpeg-4.4-CVE-2020-22046.patch | 26 + ffmpeg-5-rpmlintrc | 7 + ffmpeg-5.0.tar.xz | 3 + ffmpeg-5.0.tar.xz.asc | 11 + ffmpeg-5.changes | 13 + ffmpeg-5.keyring | 30 ++ ffmpeg-5.spec | 857 ++++++++++++++++++++++++++++++++ ffmpeg-arm6l.diff | 17 + ffmpeg-codec-choice.diff | 57 +++ ffmpeg-new-coder-errors.diff | 60 +++ vmaf-trim-usr-local.patch | 17 + 16 files changed, 1515 insertions(+) create mode 100644 .gitattributes create mode 100644 baselibs.conf create mode 100644 enable_decoders create mode 100644 enable_encoders create mode 100644 ffmpeg-4.2-dlopen-fdk_aac.patch create mode 100644 ffmpeg-4.4-CVE-2020-22046.patch create mode 100644 ffmpeg-5-rpmlintrc create mode 100644 ffmpeg-5.0.tar.xz create mode 100644 ffmpeg-5.0.tar.xz.asc create mode 100644 ffmpeg-5.changes create mode 100644 ffmpeg-5.keyring create mode 100644 ffmpeg-5.spec create mode 100644 ffmpeg-arm6l.diff create mode 100644 ffmpeg-codec-choice.diff create mode 100644 ffmpeg-new-coder-errors.diff create mode 100644 vmaf-trim-usr-local.patch diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/baselibs.conf b/baselibs.conf new file mode 100644 index 0000000..7d9c2b3 --- /dev/null +++ b/baselibs.conf @@ -0,0 +1,11 @@ +libavcodec58_134 +libavdevice58_13 +libavfilter7_110 +libavformat58_76 +libavresample4_0 + obsoletes "libavresample4- < " + provides "libavresample4- = " +libavutil56_70 +libpostproc55_9 +libswresample3_9 +libswscale5_9 diff --git a/enable_decoders b/enable_decoders new file mode 100644 index 0000000..8d2b80f --- /dev/null +++ b/enable_decoders @@ -0,0 +1,107 @@ +## module name # reason for enablement in ffmpeg (usually there is another package that already got legal review) +aac +ac3 +ansi # trivial +apng +ass # trivial +ayuv # trivial +bmp # trivial +dirac # dirac +exr # openEXR +ffv1 # ffmpeg +ffvhuff # ffmpeg +ffwavesynth # pseudo +flac # libFLAC +gif # libpng +gsm # libgsm +huffyuv # trivial+zlib +ilbc # ilbc +libaom # libaom +libaom_av1 # libaom +libcelt # celt, opus +libcodec2 # codec2 +libdav1d # av1 +libgsm # libgsm +libopenjpeg # openjpeg +libopus # opus +libschroedinger # schroedinger +libspeex # speex +libvorbis # libvorbis +libvpx_vp8 # libvpx +libvpx_vp9 # libvpx +mjpeg # mjpegtools +mp1 # twolame/lame +mp1float # twolame/lame +mp2 # twolame +mp2float # twolame +mp3 # lame +mp3float # lame +mpeg1video +mpeg2video +#mpeg4 +opus # libopus +pam # trivial +pbm # trivial +pcm_alaw # trivial +pcm_bluray +pcm_dvd +pcm_f32be # trivial +pcm_f32le # trivial +pcm_f64be # trivial +pcm_f64le # trivial +pcm_mulaw # trivial +pcm_s16be # trivial +pcm_s16be_planar # trivial +pcm_s16le # trivial +pcm_s16le_planar # trivial +pcm_s24be # trivial +pcm_s24le # trivial +pcm_s24le_planar # trivial +pcm_s32be # trivial +pcm_s32le # trivial +pcm_s32le_planar # trivial +pcm_s8 # trivial +pcm_s8_planar # trivial +pcm_u16be # trivial +pcm_u16le # trivial +pcm_u24be # trivial +pcm_u24le # trivial +pcm_u32be # trivial +pcm_u32le # trivial +pcm_u8 # trivial +pcx +pgm # trivial +pgmyuv # trivial +pgssub # mkvtoolnix +png # libpng +ppm # trivial +rawvideo # trivial +sgi # trivial +srt # trivial +ssa # trivial +sunrast # trivial +targa # trivial +text # trivial +theora # libtheora +tiff # libtiff +v210 # trivial +v210x # trivial +v308 # trivial +v408 # trivial +v410 # trivial +vorbis # libvorbis +vp3 # libav +vp5 # libav +vp6 # libav +vp6a # libav +vp6f # libav +vp8 # libvpx +vp9 # libvpx +webp # libwebp +webvtt # trivial +wrapped_avframe # passthrough +xbm # trivial +xwd # xwd +y41p # trivial +yuv4 # trivial +zlib # zlib diff --git a/enable_encoders b/enable_encoders new file mode 100644 index 0000000..faf7004 --- /dev/null +++ b/enable_encoders @@ -0,0 +1,88 @@ +## module name # reason for enablement in ffmpeg (usually there is another package that already got legal review) +aac +apng # libpng +ass # trivial +ayuv # trival +bmp # trivial +ffv1 +ffvhuff # trivial+zlib +flac # libFLAC +gif # libpng +huffyuv # trivial+zlib +jpegls +libaom # libaom +libaom_av1 # libaom +libcodec2 # codec2 +libgsm # libgsm +libmp3lame # lame +libopenjpeg # openjpeg +libopus # opus +librav1e # rav1e +libschroedinger # schroedinger +libspeex # speex +libsvtav1 +libtheora # libtheora +libtwolame # twolame +libvorbis # libvorbis +libvpx_vp8 +libvpx_vp9 +libwebp +libwebp_anim +mjpeg # mjpegtools +mp2 # twolame +mp2fixed # twolame +mpeg1video +mpeg2video +opus # opus +pam +pbm # trivial +pcm_alaw # trivial +pcm_f32be # trivial +pcm_f32le # trivial +pcm_f64be # trivial +pcm_f64le # trivial +pcm_mulaw # trivial +pcm_s16be # trivial +pcm_s16be_planar # trivial +pcm_s16le # trivial +pcm_s16le_planar # trivial +pcm_s24be # trivial +pcm_s24le # trivial +pcm_s24le_planar # trivial +pcm_s32be # trivial +pcm_s32le # trivial +pcm_s32le_planar # trivial +pcm_s8 # trivial +pcm_s8_planar # trivial +pcm_u16be # trivial +pcm_u16le # trivial +pcm_u24be # trivial +pcm_u24le # trivial +pcm_u32be # trivial +pcm_u32le # trivial +pcm_u8 # trivial +pcx +pgm # trivial +pgmyuv # trivial +png # libpng +ppm # trivial +rawvideo # trivial +sgi # trivial +srt # trivial +ssa # trivial +sunrast # trivial +targa # trivial +text # trivial +tiff # libtiff +v210 # trivial +v308 # trivial +v408 # trivial +v410 # trivial +vorbis # libvorbis +webvtt # trivial +wrapped_avframe # passthrough +xbm # (X11) +xwd # xwd +y41p # trivial +yuv4 # trivial +zlib # zlib diff --git a/ffmpeg-4.2-dlopen-fdk_aac.patch b/ffmpeg-4.2-dlopen-fdk_aac.patch new file mode 100644 index 0000000..dfeba6f --- /dev/null +++ b/ffmpeg-4.2-dlopen-fdk_aac.patch @@ -0,0 +1,188 @@ +--- + configure | 3 ++ + libavcodec/dlopen.h | 12 ++++++++++ + libavcodec/libfdk-aacdec.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ + libavcodec/libfdk-aacenc.c | 47 +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 115 insertions(+) + +Index: ffmpeg-5.0/configure +=================================================================== +--- ffmpeg-5.0.orig/configure ++++ ffmpeg-5.0/configure +@@ -231,6 +231,7 @@ External library support: + --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 + and libraw1394 [no] + --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] ++ --enable-libfdk-aac-dlopen enable AAC de/encoding via dlopen()'ed libfdk-aac [no] + --enable-libflite enable flite (voice synthesis) support via libflite [no] + --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no] + --enable-libfreetype enable libfreetype, needed for drawtext filter [no] +@@ -1784,6 +1785,7 @@ EXTERNAL_LIBRARY_GPL_LIST=" + EXTERNAL_LIBRARY_NONFREE_LIST=" + decklink + libfdk_aac ++ libfdk_aac_dlopen + libtls + " + +@@ -6528,6 +6530,7 @@ enabled libdrm && require_pkg + enabled libfdk_aac && { check_pkg_config libfdk_aac fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || + { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && + warn "using libfdk without pkg-config"; } } ++enabled libfdk_aac_dlopen && enable libfdk_aac && add_cppflags "-I/usr/include/fdk-aac" + flite_extralibs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite" + enabled libflite && require libflite "flite/flite.h" flite_init $flite_extralibs + enabled fontconfig && enable libfontconfig +Index: ffmpeg-5.0/libavcodec/dlopen.h +=================================================================== +--- /dev/null ++++ ffmpeg-5.0/libavcodec/dlopen.h +@@ -0,0 +1,12 @@ ++#ifndef LOCALINC_DLOPEN_H ++#define LOCALINC_DLOPEN_H ++#include ++#define num2str(x) str(x) ++#define str(x) #x ++ ++#define dl_sym(func, args, lib) \ ++ dl_##func = args dlsym(lib, #func); \ ++ if ((err = dlerror())) \ ++ goto error; ++ ++#endif +Index: ffmpeg-5.0/libavcodec/libfdk-aacdec.c +=================================================================== +--- ffmpeg-5.0.orig/libavcodec/libfdk-aacdec.c ++++ ffmpeg-5.0/libavcodec/libfdk-aacdec.c +@@ -37,6 +37,54 @@ + #define AAC_PCM_MAX_OUTPUT_CHANNELS AAC_PCM_OUTPUT_CHANNELS + #endif + ++#ifdef CONFIG_LIBFDK_AAC_DLOPEN ++#include "dlopen.h" ++AAC_DECODER_ERROR (*dl_aacDecoder_AncDataInit)(HANDLE_AACDECODER, UCHAR*, int); ++HANDLE_AACDECODER (*dl_aacDecoder_Open)(TRANSPORT_TYPE, UINT); ++AAC_DECODER_ERROR (*dl_aacDecoder_Fill)(HANDLE_AACDECODER, UCHAR**, const UINT*, UINT*); ++AAC_DECODER_ERROR (*dl_aacDecoder_ConfigRaw)(HANDLE_AACDECODER, UCHAR **, const UINT*); ++AAC_DECODER_ERROR (*dl_aacDecoder_SetParam)(const HANDLE_AACDECODER, const AACDEC_PARAM, const INT); ++AAC_DECODER_ERROR (*dl_aacDecoder_DecodeFrame)(HANDLE_AACDECODER, INT_PCM*, const INT, const UINT); ++CStreamInfo* (*dl_aacDecoder_GetStreamInfo)(HANDLE_AACDECODER); ++void (*dl_aacDecoder_Close)(HANDLE_AACDECODER); ++#define aacDecoder_AncDataInit dl_aacDecoder_AncDataInit ++#define aacDecoder_Open dl_aacDecoder_Open ++#define aacDecoder_Fill dl_aacDecoder_Fill ++#define aacDecoder_ConfigRaw dl_aacDecoder_ConfigRaw ++#define aacDecoder_SetParam dl_aacDecoder_SetParam ++#define aacDecoder_DecodeFrame dl_aacDecoder_DecodeFrame ++#define aacDecoder_GetStreamInfo dl_aacDecoder_GetStreamInfo ++#define aacDecoder_Close dl_aacDecoder_Close ++#define FDKAAC_LIB "libfdk-aac.so.2" ++static int loadLibFdkAac(AVCodecContext *avctx); ++static int loadLibFdkAac(AVCodecContext *avctx) { ++ void *libfdkaac = NULL; ++ const char *err = NULL; ++ ++ libfdkaac = dlopen(FDKAAC_LIB, RTLD_LAZY); ++ if(err = dlerror()) { ++ av_log(avctx, AV_LOG_FATAL, "%s\n%s is missing, libfdk-aac support will be disabled\n", err, FDKAAC_LIB); ++ if(libfdkaac) ++ dlclose(libfdkaac); ++ return 1; ++ } ++ dl_sym(aacDecoder_AncDataInit, (AAC_DECODER_ERROR (*)(HANDLE_AACDECODER, UCHAR*, int)), libfdkaac); ++ dl_sym(aacDecoder_Open, (HANDLE_AACDECODER (*)(TRANSPORT_TYPE, UINT)), libfdkaac); ++ dl_sym(aacDecoder_Fill, (AAC_DECODER_ERROR (*)(HANDLE_AACDECODER, UCHAR**, const UINT*, UINT*)), libfdkaac); ++ dl_sym(aacDecoder_ConfigRaw, (AAC_DECODER_ERROR (*)(HANDLE_AACDECODER, UCHAR**, const UINT*)), libfdkaac); ++ dl_sym(aacDecoder_SetParam, (AAC_DECODER_ERROR (*)(const HANDLE_AACDECODER, const AACDEC_PARAM, const INT)), libfdkaac); ++ dl_sym(aacDecoder_DecodeFrame, (AAC_DECODER_ERROR (*)(HANDLE_AACDECODER, INT_PCM*, const INT, const UINT)), libfdkaac); ++ dl_sym(aacDecoder_GetStreamInfo, (CStreamInfo* (*)(HANDLE_AACDECODER)), libfdkaac); ++ dl_sym(aacDecoder_Close, (void (*)(HANDLE_AACDECODER)), libfdkaac); ++ return 0; ++error: ++ av_log(avctx, AV_LOG_FATAL, "libfdk-aac: Missing symbols in %s: %s\n" ++ "libfdk-aac support disabled\n", FDKAAC_LIB, err); ++ dlclose(libfdkaac); ++ return 1; ++} ++#endif ++ + enum ConcealMethod { + CONCEAL_METHOD_SPECTRAL_MUTING = 0, + CONCEAL_METHOD_NOISE_SUBSTITUTION = 1, +@@ -229,6 +277,11 @@ static av_cold int fdk_aac_decode_init(A + FDKAACDecContext *s = avctx->priv_data; + AAC_DECODER_ERROR err; + ++#ifdef CONFIG_LIBFDK_AAC_DLOPEN ++ if (loadLibFdkAac(avctx)) ++ return -1; ++#endif ++ + s->handle = aacDecoder_Open(avctx->extradata_size ? TT_MP4_RAW : TT_MP4_ADTS, 1); + if (!s->handle) { + av_log(avctx, AV_LOG_ERROR, "Error opening decoder\n"); +Index: ffmpeg-5.0/libavcodec/libfdk-aacenc.c +=================================================================== +--- ffmpeg-5.0.orig/libavcodec/libfdk-aacenc.c ++++ ffmpeg-5.0/libavcodec/libfdk-aacenc.c +@@ -36,6 +36,48 @@ + #define FDKENC_VER_AT_LEAST(vl0, vl1) 0 + #endif + ++#ifdef CONFIG_LIBFDK_AAC_DLOPEN ++#include "dlopen.h" ++#include ++AACENC_ERROR (*dl_aacEncOpen)(HANDLE_AACENCODER*, const UINT, const UINT); ++AACENC_ERROR (*dl_aacEncoder_SetParam)(const HANDLE_AACENCODER, const AACENC_PARAM, const UINT); ++AACENC_ERROR (*dl_aacEncEncode)(const HANDLE_AACENCODER, const AACENC_BufDesc*, const AACENC_BufDesc*, const AACENC_InArgs*, AACENC_OutArgs*); ++AACENC_ERROR (*dl_aacEncInfo)(const HANDLE_AACENCODER, AACENC_InfoStruct*); ++AACENC_ERROR (*dl_aacEncClose)(HANDLE_AACENCODER*); ++ ++#define aacEncOpen dl_aacEncOpen ++#define aacEncoder_SetParam dl_aacEncoder_SetParam ++#define aacEncEncode dl_aacEncEncode ++#define aacEncInfo dl_aacEncInfo ++#define aacEncClose dl_aacEncClose ++#define FDKAAC_LIB "libfdk-aac.so.2" ++ ++static int loadLibFdkAac(AVCodecContext *avctx); ++static int loadLibFdkAac(AVCodecContext *avctx) { ++ void *libfdkaac = NULL; ++ const char *err = NULL; ++ ++ libfdkaac = dlopen(FDKAAC_LIB, RTLD_LAZY); ++ if(err = dlerror()) { ++ av_log(avctx, AV_LOG_FATAL, "%s\n%s is missing, libfdk-aac support will be disabled\n", err, FDKAAC_LIB); ++ if(libfdkaac) ++ dlclose(libfdkaac); ++ return 1; ++ } ++ dl_sym(aacEncOpen, (AACENC_ERROR (*)(HANDLE_AACENCODER*, const UINT, const UINT)), libfdkaac); ++ dl_sym(aacEncoder_SetParam, (AACENC_ERROR (*)(const HANDLE_AACENCODER, const AACENC_PARAM, const UINT)), libfdkaac); ++ dl_sym(aacEncEncode, (AACENC_ERROR (*)(const HANDLE_AACENCODER, const AACENC_BufDesc*, const AACENC_BufDesc*, const AACENC_InArgs*, AACENC_OutArgs*)), libfdkaac); ++ dl_sym(aacEncInfo, (AACENC_ERROR (*)(const HANDLE_AACENCODER, AACENC_InfoStruct*)), libfdkaac); ++ dl_sym(aacEncClose, (AACENC_ERROR (*)(HANDLE_AACENCODER*)), libfdkaac); ++ return 0; ++error: ++ av_log(avctx, AV_LOG_FATAL, "libfdk-aac: Missing symbols in %s: %s\n" ++ "libfdk-aac support disabled\n", FDKAAC_LIB, err); ++ dlclose(libfdkaac); ++ return 1; ++} ++#endif ++ + typedef struct AACContext { + const AVClass *class; + HANDLE_AACENCODER handle; +@@ -128,6 +170,11 @@ static av_cold int aac_encode_init(AVCod + int aot = FF_PROFILE_AAC_LOW + 1; + int sce = 0, cpe = 0; + ++#ifdef CONFIG_LIBFDK_AAC_DLOPEN ++ if (loadLibFdkAac(avctx)) ++ return -1; ++#endif ++ + if ((err = aacEncOpen(&s->handle, 0, avctx->channels)) != AACENC_OK) { + av_log(avctx, AV_LOG_ERROR, "Unable to open the encoder: %s\n", + aac_get_error(err)); diff --git a/ffmpeg-4.4-CVE-2020-22046.patch b/ffmpeg-4.4-CVE-2020-22046.patch new file mode 100644 index 0000000..5ff5812 --- /dev/null +++ b/ffmpeg-4.4-CVE-2020-22046.patch @@ -0,0 +1,26 @@ +From 097c917c147661f5378dae8fe3f7e46f43236426 Mon Sep 17 00:00:00 2001 +From: Andreas Rheinhardt +Date: Thu, 17 Oct 2019 11:11:55 +0200 +Subject: [PATCH] avcodec/ac3enc: Fix memleak + +Fixes ticket #8294. + +Signed-off-by: Andreas Rheinhardt +--- + libavcodec/ac3enc.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +Index: ffmpeg-4.4.1/libavcodec/ac3enc.c +=================================================================== +--- ffmpeg-4.4.1.orig/libavcodec/ac3enc.c ++++ ffmpeg-4.4.1/libavcodec/ac3enc.c +@@ -2148,7 +2148,8 @@ av_cold int ff_ac3_encode_close(AVCodecC + av_freep(&block->cpl_coord_mant); + } + +- s->mdct_end(s); ++ if (s->mdct_end) ++ s->mdct_end(s); + + return 0; + } diff --git a/ffmpeg-5-rpmlintrc b/ffmpeg-5-rpmlintrc new file mode 100644 index 0000000..4843745 --- /dev/null +++ b/ffmpeg-5-rpmlintrc @@ -0,0 +1,7 @@ +# manpages for such executables aren't supplied +addFilter("no-manual-page-for-binary") + +# our libraries really have those names and versions +addFilter("shlib-fixed-dependency") +addFilter("no-dependency-on libffmpeg.*") +addFilter("no-dependency-on ffmpeg-4-lib*") diff --git a/ffmpeg-5.0.tar.xz b/ffmpeg-5.0.tar.xz new file mode 100644 index 0000000..faacab2 --- /dev/null +++ b/ffmpeg-5.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51e919f7d205062c0fd4fae6243a84850391115104ccf1efc451733bc0ac7298 +size 9811480 diff --git a/ffmpeg-5.0.tar.xz.asc b/ffmpeg-5.0.tar.xz.asc new file mode 100644 index 0000000..15f08ed --- /dev/null +++ b/ffmpeg-5.0.tar.xz.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQFMBAABCAA2FiEE/PmG6hXm4pOlZE8QtDIvBNZ2WNgFAmHhxXEYHGZmbXBlZy1k +ZXZlbEBmZm1wZWcub3JnAAoJELQyLwTWdljYsRYH/jYO49v3N7P++9kWAWrzxccw +GV6biaOvS664vmyiM/iPCntDPPE3Z4ihKEKgMgIp30nBvkQEjTLgFD4G0CfB9dyo +rfeBYyEomklpQjKu0pmH5AJ3DzEl3fuj3UV8/goAB7KyekGD5tnxk5+I+Sf41Swg +IaVtR2P2aDpb6BnVwBZJ2MloVFvlnqrJiWjoGhS3eMF3J3EnHLfuqtyoOZ0wax5R +O9E/RpnmrwZ52/wyC1xBcJU8hBzWHQHrTwt1iVRDxiNuCRP626nomLEc2F7Bcqji +QuCu6SKOEng7idYavqHyPhGM/Lm+Y6SDoYWX9aM1cu/yyLfZ6i2OR8LnJaInRbs= +=O0dz +-----END PGP SIGNATURE----- diff --git a/ffmpeg-5.changes b/ffmpeg-5.changes new file mode 100644 index 0000000..5266211 --- /dev/null +++ b/ffmpeg-5.changes @@ -0,0 +1,13 @@ +------------------------------------------------------------------- +Fri Jan 14 23:16:18 UTC 2022 - Jan Engelhardt + +- Based on ffmpeg-4.0.spec, update to 5.0 + * New Vulkan-powered filters for video horizontal/vertical + flipping. + * Speex decoder. + * Various new muxers/demuxers. + * An AV1 low-overhead bitstream format muxer is added. + * Swscale slice threading support. + * New audio and video filters. +- Drop soversion.diff (for now; it may very well be reintroduced, + depending on how 5.1 is released). diff --git a/ffmpeg-5.keyring b/ffmpeg-5.keyring new file mode 100644 index 0000000..35375c8 --- /dev/null +++ b/ffmpeg-5.keyring @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBE22rV0BCAC3DzRmA2XlhrqYv9HKoEvNHHf+PzosmCTHmYhWHDqvBxPkSvCl +ipkbvJ4pBnVvcX6mW5QyKhspHm5j1X5ibe9Bt9/chS/obnIobmvF8shSUgjQ0qRW +9c1aWOjvT26SxYQ1y9TmYCFwixeydGFHYKjAim+evGUccni5KMlfPoT3VTPtim78 +ufkr3E9Nco/Mobn/8APO0NmLEGWAM6ln/8J/c9h6a1QKnQyBqWfT0YnAaebafFaZ +YwOtRdDG54VbJ4xwcHbCj5cKhTABk/QtBzDvnW4bG+uSpqdHbFZEY2JpURDuj/T3 +NudKQGzn0bYNpY1XY2l0pqs/btKHnBW0fVMjABEBAAG0NEZGbXBlZyByZWxlYXNl +IHNpZ25pbmcga2V5IDxmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZz6JATgEEwECACIF +Ak22rV0CGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJELQyLwTWdljYKxUH +/1fqzl7SKie2g4t4PJbqUbkLuMsC+CP6gp0dcVZOHkuUYAoD3PM3iVxpLBVyKIXI +g7wMSTAtlIcYnzhWIpnoCBes6/O2Mrq6xHgGeTp6CDcm3LmmSYR1f5KdD8KUaA+l +c/M/1fEnwrSs/UGDk6R6iUmbqwxPsbozlOvmUHOLbDZBnKrk9XfAJdUhAuFACrSA +T+KF1jniz0OfNGd23SaHWRCphoRW9pXDc5FfkdaueBUvBvGv19ZNcDhcxT3/u6z2 +DaUFC0rLWqk8obo951jVvi/zOhB94Pw6u1SLvcTq3V1q5URWJtgSbpih9VRqxUbQ +NbXduKGzbHz6Vwpkupz4JRe5AQ0ETbatXQEIANjYrygJi/fn1nlSg5Mz0l9KHDm4 +yfWtaOrXUjJcyiGe4G0XXJLGh45qxJ0DOKzi9id+9W4jby+kKuzG9O6Vn0iDeODO +aOGnz4ua7Vu6d0AbYfNXZPWge/GCodo/ZD/qri1tPkLmRtT/sniahwy6LruPNHfF +SRoNIjwbcD/IL+EbY1pL1/IFSzEAA1ZZamgmHgB7o9pwDIkK6HuvHMR/Y5MsoMfV +fWV3ZGtA6v9z51CvnHsHPsADRSnUp7aYtR412SiAO4XodMLTA92L3LxgYhI4ma7D +XZ8jgKg4JkKO+DXmoU63HtRdq/HZjeXJKk1JGJF3zCvP3DyIzZ8LWIjN8t0AEQEA +AYkBHwQYAQIACQUCTbatXQIbDAAKCRC0Mi8E1nZY2LS8B/0bMoUAl4X9D0WQbL4l +U0czCIOKOsvbHpIxivjCnOQxU23+PV5WZdoCCpSuAHGv+2OHzhNrij++P9BNTJeQ +skxdS9FH4MZwy1IRSPrxegSxbCUpBI1rd0Zf7qb9BNPrHPTueWFV1uExOSB2Apsv +WrKo2D8mR0uZAPYfYl2ToFVoa5PR7/+ii9WiJr/flF6qm7hoLpI5Bm4VcZh2GPsJ +9Vo/8x/qOGwtdWHqBykYloKsrwD4U69rjn+d9feLoPBRgoVroXWQttt0sUnyoudz ++x8ETJgPoNK3kQoDagApj4qAt83Ayac3HzNIuEJ7LdvfINIOprujnJ9vH4n04XLg +I4EZ +=Rjbw +-----END PGP PUBLIC KEY BLOCK----- diff --git a/ffmpeg-5.spec b/ffmpeg-5.spec new file mode 100644 index 0000000..5cb703a --- /dev/null +++ b/ffmpeg-5.spec @@ -0,0 +1,857 @@ +# +# spec file for package ffmpeg-5 +# +# Copyright (c) 2022 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +# Create proper conflicts to make sure we require all from one version +# p: Conflict string, eg if you need them all for requires instead +# Default value Conflicts: +# c: copmare string ie "<" or ">=", must be defined +# v: version string ie. "< 42.3.4" or ">= 15.0.2.1", must be defined +%define devel_conflicts(p:c:v:) \ +%define preamble_string %{-p:%{-p*}}%{!-p:Conflicts:} \ +%define comparator %{-c:%{-c*}}%{!-c:%{error:Comparator not defined}} \ +%define conflicts_version %{-v:%{-v*}}%{!-v:%{error:Version not defined}} \ +\ +%preamble_string libavcodec-devel %comparator %conflicts_version \ +%preamble_string libavdevice-devel %comparator %conflicts_version \ +%preamble_string libavfilter-devel %comparator %conflicts_version \ +%preamble_string libavformat-devel %comparator %conflicts_version \ +%preamble_string libavutil-devel %comparator %conflicts_version \ +%preamble_string libpostproc-devel %comparator %conflicts_version \ +%preamble_string libswresample-devel %comparator %conflicts_version \ +%preamble_string libswscale-devel %comparator %conflicts_version \ +%preamble_string ffmpeg-private-devel %comparator %conflicts_version \ +%nil + +# nvcodec headers only present after leap15 +%bcond_with nvcodec +%if 0%{?suse_version} > 1500 +%bcond_without nvcodec +%endif +%if 0%{?BUILD_ORIG} +%bcond_with amrwb +%bcond_without cuda_sdk +%else +%bcond_with cuda_sdk +%endif +%bcond_with fdk_aac_dlopen +%bcond_with librtmp +%bcond_with opencore +%bcond_with x264 +%bcond_with x265 +%bcond_with xvid + +%if 0%{?suse_version} > 1500 +%bcond_without libaom +%bcond_without mysofa +%bcond_without vidstab +%bcond_without smbclient +%bcond_without srt +%bcond_without codec2 +%bcond_without lv2 +%bcond_without librav1e +%bcond_without rubberband +%bcond_without soxr +%bcond_without zmq +%bcond_without vulkan +%else +%bcond_with libaom +%bcond_with mysofa +%bcond_with vidstab +%bcond_with smbclient +%bcond_with srt +%bcond_with codec2 +%bcond_with lv2 +%bcond_with librav1e +%bcond_with rubberband +%bcond_with soxr +%bcond_with zmq +%bcond_with vulkan +%endif + +%if 0%{?suse_version} >= 1500 +%bcond_without zimg +%bcond_without openmpt +%else +%bcond_with zimg +%bcond_with openmpt +%endif + +%define _name ffmpeg +%define _major_version 5 +%define _major_expected 6 +Name: ffmpeg-5 +Version: 5.0 +Release: 0 +Summary: Set of libraries for working with various multimedia formats +License: GPL-3.0-or-later +Group: Productivity/Multimedia/Video/Editors and Convertors +URL: https://ffmpeg.org/ + +#Freshcode-URL: http://freshcode.club/projects/ffmpeg +#Git-Clone: git://source.ffmpeg.org/ffmpeg +Source: https://www.ffmpeg.org/releases/%_name-%version.tar.xz +Source2: https://www.ffmpeg.org/releases/%_name-%version.tar.xz.asc +Source3: %name-rpmlintrc +Source4: enable_decoders +Source5: enable_encoders +Source98: http://ffmpeg.org/ffmpeg-devel.asc#/ffmpeg-5.keyring +Source99: baselibs.conf +Patch1: ffmpeg-arm6l.diff +Patch2: ffmpeg-new-coder-errors.diff +Patch3: ffmpeg-codec-choice.diff +Patch4: ffmpeg-4.2-dlopen-fdk_aac.patch +Patch8: vmaf-trim-usr-local.patch +Patch9: ffmpeg-4.4-CVE-2020-22046.patch +BuildRequires: ladspa-devel +BuildRequires: libgsm-devel +BuildRequires: libmp3lame-devel +%if %{with mysofa} +BuildRequires: libmysofa-devel +%endif +BuildRequires: nasm +BuildRequires: pkg-config +%ifarch x86_64 +%if 0%{?suse_version} >= 1550 +BuildRequires: pkgconfig(SvtAv1Enc) >= 0.8.4 +%endif +%endif +BuildRequires: pkgconfig(alsa) +%if %{with libaom} +BuildRequires: pkgconfig(aom) +%endif +BuildRequires: pkgconfig(bzip2) +BuildRequires: pkgconfig(celt) >= 0.11.0 +%if %{with codec2} +BuildRequires: pkgconfig(codec2) +%endif +%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150200 +BuildRequires: pkgconfig(dav1d) +%endif +BuildRequires: pkgconfig(enca) +BuildRequires: pkgconfig(fontconfig) >= 2.4.2 +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(fribidi) >= 0.19.0 +BuildRequires: pkgconfig(gnutls) +BuildRequires: pkgconfig(jack) +BuildRequires: pkgconfig(libass) +BuildRequires: pkgconfig(libbluray) +BuildRequires: pkgconfig(libbs2b) +BuildRequires: pkgconfig(libcdio) +BuildRequires: pkgconfig(libcdio_paranoia) +BuildRequires: pkgconfig(libdc1394-2) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libgme) +BuildRequires: pkgconfig(libopenjp2) >= 2.1.0 +%if %{with openmpt} +BuildRequires: pkgconfig(libopenmpt) +%endif +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libraw1394) +BuildRequires: pkgconfig(libssh) +BuildRequires: pkgconfig(libv4l2) +BuildRequires: pkgconfig(libva) >= 0.35.0 +BuildRequires: pkgconfig(libva-drm) +BuildRequires: pkgconfig(libva-x11) +BuildRequires: pkgconfig(libvmaf) >= 1.3.9 +BuildRequires: pkgconfig(libwebp) >= 0.4 +BuildRequires: pkgconfig(libxml-2.0) +%if %{with zmq} +BuildRequires: pkgconfig(libzmq) +%endif +%if %{with lv2} +BuildRequires: pkgconfig(lilv-0) +%endif +BuildRequires: pkgconfig(ogg) +BuildRequires: pkgconfig(opus) +%if %{with librav1e} +BuildRequires: pkgconfig(rav1e) +%endif +%if %{with rubberband} +BuildRequires: pkgconfig(rubberband) +%endif +BuildRequires: pkgconfig(sdl2) +%if %{with smbclient} +BuildRequires: pkgconfig(smbclient) +%endif +%if %{with soxr} +BuildRequires: pkgconfig(soxr) +%endif +BuildRequires: pkgconfig(speex) +%if %{with srt} +BuildRequires: pkgconfig(srt) +%endif +BuildRequires: pkgconfig(theora) >= 1.1 +BuildRequires: pkgconfig(twolame) +BuildRequires: pkgconfig(vdpau) +%if %{with vidstab} +BuildRequires: pkgconfig(vidstab) >= 0.98 +%endif +%if %{with vulkan} +BuildRequires: pkgconfig(vulkan) +%endif +BuildRequires: pkgconfig(vorbis) +BuildRequires: pkgconfig(vpx) >= 1.4.0 +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcb) +BuildRequires: pkgconfig(xcb-render) +BuildRequires: pkgconfig(xcb-shape) +BuildRequires: pkgconfig(xcb-shm) +BuildRequires: pkgconfig(xcb-xfixes) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xfixes) +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150200 +%ifarch x86_64 +BuildRequires: pkgconfig(libmfx) +%endif +%endif +%if %{with zimg} +BuildRequires: pkgconfig(zimg) +%endif +BuildRequires: pkgconfig(zlib) +BuildRequires: pkgconfig(zvbi-0.2) >= 0.2.28 +%if %{with fdk_aac_dlopen} +BuildRequires: pkgconfig(fdk-aac) +%endif +%if %{with librtmp} +BuildRequires: pkgconfig(librtmp) +%endif +%if %{with nvcodec} +BuildRequires: pkgconfig(ffnvcodec) +%endif +%if %{with xvid} +BuildRequires: libxvidcore-devel +%endif +%if %{with opencore} +BuildRequires: pkgconfig(opencore-amrnb) +%endif +%if %{with amrwb} +BuildRequires: pkgconfig(vo-amrwbenc) +%endif +%if %{with x264} +BuildRequires: pkgconfig(x264) +%endif +%if %{with x265} +BuildRequires: pkgconfig(x265) +%endif +Provides: ffmpeg-tools = %version +Obsoletes: ffmpeg-tools < %version +Provides: ffmpeg = %version +Obsoletes: ffmpeg < %version +Requires: libavcodec59 = %version-%release +Requires: libavdevice59 = %version-%release +Requires: libavfilter8 = %version-%release +Requires: libavformat59 = %version-%release +Requires: libavutil57 = %version-%release +Requires: libpostproc56 = %version-%release +Requires: libswresample4 = %version-%release +Requires: libswscale6 = %version-%release + +%description +FFmpeg is a multimedia framework, able to decode, encode, +transcode, mux, demux, stream, filter and play several formats +that humans and machines have created. +%if !0%{?BUILD_ORIG} + +This build of ffmpeg is limited in the number of codecs supported. +%endif + +%package -n libavcodec59 +Summary: FFmpeg codec library +Group: System/Libraries +Requires: libavutil57 = %version-%release +Requires: libswresample4 = %version-%release +%if 0%{?BUILD_ORIG} +Provides: libavcodec-full = %version-%release +# This can be (and is) required by packages like vlc-codecs - +# do follow the shlib name to not get random lib providers +Provides: libavcodec59(unrestricted) +%endif +# For mozillas +Provides: libavcodec = %version-%release + +%description -n libavcodec59 +The libavcodec library provides a generic encoding/decoding framework +and contains multiple decoders and encoders for audio, video and +subtitle streams, and several bitstream filters. +%if !0%{?BUILD_ORIG} + +This build of ffmpeg is limited in the number of codecs supported. +%endif + +%package libavcodec-devel +Summary: Development files for FFmpeg's codec library +Group: Development/Libraries/C and C++ +Provides: libavcodec-devel = %version-%release +Obsoletes: libavcodec-devel < %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: libavcodec59 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libavcodec-devel +The libavcodec library provides a generic encoding/decoding framework +and contains multiple decoders and encoders for audio, video and +subtitle streams, and several bitstream filters. + +This subpackage contains the headers for FFmpeg libavcodec. + +%package -n libavdevice59 +Summary: FFmpeg device library +Group: System/Libraries +Requires: libavcodec59 = %version-%release +Requires: libavfilter8 = %version-%release +Requires: libavformat59 = %version-%release +Requires: libavutil57 = %version-%release + +%description -n libavdevice59 +The libavdevice library provides a generic framework for grabbing from +and rendering to many common multimedia input/output devices, and +supports several input and output devices, including Video4Linux2, VfW, +DShow, and ALSA. + +%package libavdevice-devel +Summary: Development files for FFmpeg's device library +Group: Development/Libraries/C and C++ +Provides: ffmpeg-devel = %version-%release +Conflicts: ffmpeg-devel +Provides: libavdevice-devel = %version-%release +Obsoletes: libavdevice-devel < %version-%release +Requires: %name-libavcodec-devel = %version-%release +Requires: %name-libavfilter-devel = %version-%release +Requires: %name-libavformat-devel = %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: %name-libpostproc-devel = %version-%release +Requires: %name-libswresample-devel = %version-%release +Requires: %name-libswscale-devel = %version-%release +Requires: libavdevice59 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libavdevice-devel +The libavdevice library provides a generic framework for grabbing from +and rendering to many common multimedia input/output devices, and +supports several input and output devices, including Video4Linux2, VfW, +DShow, and ALSA. + +This subpackage contains the headers for FFmpeg libavcodec. + +%package -n libavfilter8 +Summary: FFmpeg audio and video filtering library +Group: System/Libraries +Requires: libavcodec59 = %version-%release +Requires: libavformat59 = %version-%release +Requires: libavutil57 = %version-%release +Requires: libpostproc56 = %version-%release +Requires: libswresample4 = %version-%release +Requires: libswscale6 = %version-%release + +%description -n libavfilter8 +The libavfilter library provides a generic audio/video filtering +framework containing several filters, sources and sinks. + +%package libavfilter-devel +Summary: Development files for FFmpeg's audio/video filter library +Group: Development/Libraries/C and C++ +Provides: libavfilter-devel = %version-%release +Obsoletes: libavfilter-devel < %version-%release +Requires: %name-libavcodec-devel = %version-%release +Requires: %name-libavformat-devel = %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: %name-libpostproc-devel = %version-%release +Requires: %name-libswresample-devel = %version-%release +Requires: %name-libswscale-devel = %version-%release +Requires: libavfilter8 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libavfilter-devel +The libavfilter library provides a generic audio/video filtering +framework containing several filters, sources and sinks. + +This subpackage contains the headers for FFmpeg libavfilter. + +%package -n libavformat59 +Summary: FFmpeg's stream format library +Group: System/Libraries +Requires: libavcodec59 = %version-%release +Requires: libavutil57 = %version-%release + +%description -n libavformat59 +The libavformat library provides a generic framework for multiplexing +and demultiplexing (muxing and demuxing) audio, video and subtitle +streams. It encompasses multiple muxers and demuxers for multimedia +container formats. +%if !0%{?BUILD_ORIG} + +This build of ffmpeg is limited in the number of codecs supported. +%endif + +%package libavformat-devel +Summary: Development files for FFmpeg's stream format library +Group: Development/Libraries/C and C++ +Provides: libavformat-devel = %version-%release +Obsoletes: libavformat-devel < %version-%release +Requires: %name-libavcodec-devel = %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: %name-libswresample-devel = %version-%release +Requires: libavformat59 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libavformat-devel +The libavformat library provides a generic framework for multiplexing +and demultiplexing (muxing and demuxing) audio, video and subtitle +streams. It encompasses multiple muxers and demuxers for multimedia +container formats. + +This subpackage contains the headers for FFmpeg libavformat. + +%package -n libavutil57 +Summary: FFmpeg's utility library +Group: System/Libraries + +%description -n libavutil57 +The libavutil library is a utility library to aid portable multimedia +programming. It contains safe portable string functions, random +number generators, data structures, additional mathematics functions, +cryptography and multimedia related functionality (like enumerations +for pixel and sample formats). + +%package libavutil-devel +Summary: Development files for FFmpeg's utility library +Group: Development/Libraries/C and C++ +Provides: libavutil-devel = %version-%release +Obsoletes: libavutil-devel < %version-%release +Requires: libavutil57 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libavutil-devel +The libavutil library is a utility library to aid portable multimedia +programming. It contains safe portable string functions, random +number generators, data structures, additional mathematics functions, +cryptography and multimedia related functionality (like enumerations +for pixel and sample formats). + +This subpackage contains the headers for FFmpeg libavutil. + +%package -n libpostproc56 +Summary: FFmpeg post-processing library +Group: System/Libraries +Requires: libavutil57 = %version-%release + +%description -n libpostproc56 +A library with video postprocessing filters, such as deblocking and +deringing filters, noise reduction, automatic contrast and brightness +correction, linear/cubic interpolating deinterlacing. + +%package libpostproc-devel +Summary: Development files for the FFmpeg post-processing library +Group: Development/Libraries/C and C++ +Provides: libpostproc-devel = %version-%release +Obsoletes: libpostproc-devel < %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: libpostproc56 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libpostproc-devel +A library with video postprocessing filters, such as deblocking and +deringing filters, noise reduction, automatic contrast and brightness +correction, linear/cubic interpolating deinterlacing. + +This subpackage contains the headers for FFmpeg libpostproc. + +%package -n libswresample4 +Summary: FFmpeg software resampling library +Group: System/Libraries +Requires: libavutil57 = %version-%release + +%description -n libswresample4 +The libswresample library performs audio conversion between different +sample rates, channel layout and channel formats. + +%package libswresample-devel +Summary: Development files for the FFmpeg software resampling library +Group: Development/Libraries/C and C++ +Provides: libswresample-devel = %version-%release +Obsoletes: libswresample-devel < %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: libswresample4 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libswresample-devel +The libswresample library performs audio conversion between different +sample rates, channel layout and channel formats. + +This subpackage contains the headers for FFmpeg libswresample. + +%package -n libswscale6 +Summary: FFmpeg image scaling and colorspace/pixel conversion library +Group: System/Libraries +Requires: libavutil57 = %version-%release + +%description -n libswscale6 +The libswscale library performs image scaling and colorspace and +pixel format conversion operations. + +%package libswscale-devel +Summary: Development files for FFmpeg's image scaling and colorspace library +Group: Development/Libraries/C and C++ +Provides: libswscale-devel = %version-%release +Conflicts: libswscale-devel +Requires: %name-libavutil-devel = %version-%release +Requires: libswscale6 = %version-%release +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description libswscale-devel +The libswscale library performs image scaling and colorspace and +pixel format conversion operations. + +This subpackage contains the headers for FFmpeg libswscale. + +%package private-devel +Summary: Some FFmpeg private headers +Group: Development/Libraries/C and C++ +Requires: %name-libavcodec-devel = %version-%release +Requires: %name-libavformat-devel = %version-%release +Requires: %name-libavutil-devel = %version-%release +Provides: ffmpeg-private-devel = %version +Obsoletes: ffmpeg-private-devel < %version +%devel_conflicts -c < -v %_major_version +%devel_conflicts -c >= -v %_major_expected + +%description private-devel +FFmpeg is a multimedia framework, able to decode, encode, +transcode, mux, demux, stream, filter and play several formats +that humans and machines have created. + +This package contains some private headers for libavformat, libavcodec and +libavutil which are needed by libav-tools to build. No other package apart +from libav should depend on these private headers which are expected to +break compatibility without any notice. + +%prep +%autosetup -p1 -n %_name-%version + +%build +%ifarch %ix86 %arm +%define _lto_cflags %nil +%endif +%if "%_lto_cflags" != "" +%global _lto_cflags %_lto_cflags -ffat-lto-objects +%endif +CFLAGS="%optflags" \ +%if %suse_version > 1500 +%ifarch %ix86 +%else +LDFLAGS="%_lto_cflags" \ +%endif +%endif +./configure \ + --prefix="%_prefix" \ + --libdir="%_libdir" \ + --shlibdir="%_libdir" \ + --incdir="%_includedir/ffmpeg" \ + --extra-cflags="%optflags" \ + --optflags="%optflags" \ + --disable-htmlpages \ + --enable-pic \ + --disable-stripping \ + --enable-shared \ + --disable-static \ + --enable-gpl \ + --enable-version3 \ +%if %{with smbclient} + --enable-libsmbclient \ +%endif + --disable-openssl \ + --enable-gnutls \ + --enable-ladspa \ +%if %{with vulkan} + --enable-vulkan \ +%endif +%if ! %{with cuda_sdk} + --disable-cuda-sdk \ +%endif +%if %{with libaom} + --enable-libaom \ +%endif + --enable-libass \ + --enable-libbluray \ + --enable-libbs2b \ + --enable-libcelt \ + --enable-libcdio \ +%if %{with codec2} + --enable-libcodec2 \ +%endif +%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150200 + --enable-libdav1d \ +%endif + --enable-libdc1394 \ + --enable-libdrm \ + --enable-libfontconfig \ + --enable-libfreetype \ + --enable-libfribidi \ + --enable-libgsm \ + --enable-libjack \ + --enable-libmp3lame \ +%if %{with mysofa} + --enable-libmysofa \ +%endif + --enable-libopenjpeg \ +%if %{with openmpt} + --enable-libopenmpt \ +%endif + --enable-libopus \ + --enable-libpulse \ +%if %{with librav1e} + --enable-librav1e \ +%endif +%if %{with rubberband} + --enable-librubberband \ +%endif +%ifarch x86_64 +%if 0%{?suse_version} >= 1550 + --enable-libsvtav1 \ +%endif +%endif +%if %{with soxr} + --enable-libsoxr \ +%endif + --enable-libspeex \ + --enable-libssh \ +%if %{with srt} + --enable-libsrt \ +%endif + --enable-libtheora \ + --enable-libtwolame \ +%if %{with vidstab} + --enable-libvidstab \ +%endif + --enable-libvmaf \ + --enable-libvorbis \ + --enable-libv4l2 \ + --enable-libvpx \ + --enable-libwebp \ + --enable-libxml2 \ +%if %{with zimg} + --enable-libzimg \ +%endif +%if %{with zmq} + --enable-libzmq \ +%endif + --enable-libzvbi \ +%if 0%{?suse_version} > 1500 +%ifarch %ix86 +%else + --enable-lto \ +%endif +%endif +%if %{with lv2} + --enable-lv2 \ +%endif +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150200 +%ifarch x86_64 + --enable-libmfx \ +%endif +%endif + --enable-vaapi \ + --enable-vdpau \ + --enable-version3 \ +%if %{with fdk_aac_dlopen} + --enable-libfdk-aac-dlopen \ + --enable-nonfree \ +%endif +%if %{with opencore} + --enable-libopencore-amrnb \ + --enable-libopencore-amrwb \ +%endif +%if %{with amrwb} + --enable-libvo-amrwbenc \ +%endif +%if %{with x264} + --enable-libx264 \ +%endif +%if %{with x265} + --enable-libx265 \ +%endif +%if %{with librtmp} + --enable-librtmp \ +%endif +%if %{with xvid} + --enable-libxvid \ +%endif +%if !0%{?BUILD_ORIG} + --enable-muxers \ + --enable-demuxers \ + --disable-encoders \ + --disable-decoders \ + --disable-decoder=mpeg4,h263,h264,hevc,vc1 \ + --enable-encoder="$(perl -pe 's{^(\w*).*}{$1,}gs' <%_sourcedir/enable_encoders)" \ + --enable-decoder="$(perl -pe 's{^(\w*).*}{$1,}gs' <%_sourcedir/enable_decoders)" \ + +for i in MPEG4 H263 H264 HEVC VC1; do + grep -q "#define CONFIG_${i}_DECODER 0" config.h +done +%endif + +cat config.h +%make_build + +%global extratools aviocat cws2fws ffescape ffeval ffhash fourcc2pixfmt graph2dot ismindex pktdumper probetest qt-faststart seek_print sidxindex trasher + +for i in %extratools; do + %make_build "tools/$i" +done + +%install +b="%buildroot" +%make_install install-man +rm -Rf "$b/%_datadir/ffmpeg/examples" +for i in %extratools; do + cp -a "tools/$i" "$b/%_bindir/" +done + +# Install private headers required by libav-tools +for i in libavformat/options_table.h libavformat/os_support.h \ + libavformat/internal.h libavcodec/options_table.h libavutil/libm.h \ + libavutil/internal.h libavutil/colorspace.h libavutil/timer.h \ + libavutil/x86/emms.h libavutil/aarch64/timer.h libavutil/arm/timer.h \ + libavutil/bfin/timer.h libavutil/ppc/timer.h libavutil/x86/timer.h; do + mkdir -p "$b/%_includedir/ffmpeg/private/"`dirname $i` + cp -a $i "$b/%_includedir/ffmpeg/private/$i" +done + +%post -n libavcodec59 -p /sbin/ldconfig +%postun -n libavcodec59 -p /sbin/ldconfig +%post -n libavdevice59 -p /sbin/ldconfig +%postun -n libavdevice59 -p /sbin/ldconfig +%post -n libavfilter8 -p /sbin/ldconfig +%postun -n libavfilter8 -p /sbin/ldconfig +%post -n libavformat59 -p /sbin/ldconfig +%postun -n libavformat59 -p /sbin/ldconfig +%post -n libavutil57 -p /sbin/ldconfig +%postun -n libavutil57 -p /sbin/ldconfig +%post -n libpostproc56 -p /sbin/ldconfig +%postun -n libpostproc56 -p /sbin/ldconfig +%post -n libswresample4 -p /sbin/ldconfig +%postun -n libswresample4 -p /sbin/ldconfig +%post -n libswscale6 -p /sbin/ldconfig +%postun -n libswscale6 -p /sbin/ldconfig + +%files +%doc Changelog CREDITS README.md +%_bindir/* +%_mandir/man1/ff*.1* +%_datadir/ffmpeg/ + +%files -n libavcodec59 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavcodec.so.59* + +%files -n libavdevice59 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavdevice.so.59* + +%files -n libavfilter8 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavfilter.so.8* + +%files -n libavformat59 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavformat.so.59* + +%files -n libavutil57 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavutil.so.57* + +%files -n libpostproc56 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libpostproc.so.56* + +%files -n libswresample4 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libswresample.so.4* + +%files -n libswscale6 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libswscale.so.6* + +%files libavcodec-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libavcodec/ +%_libdir/libavcodec.so +%_libdir/pkgconfig/libavcodec.pc +%_mandir/man3/libavcodec.3* + +%files libavdevice-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libavdevice/ +%_libdir/libavdevice.so +%_libdir/pkgconfig/libavdevice.pc +%_mandir/man3/libavdevice.3* + +%files libavfilter-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libavfilter/ +%_libdir/libavfilter.so +%_libdir/pkgconfig/libavfilter.pc +%_mandir/man3/libavfilter.3* + +%files libavformat-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libavformat/ +%_libdir/libavformat.so +%_libdir/pkgconfig/libavformat.pc +%_mandir/man3/libavformat.3* + +%files libavutil-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libavutil/ +%_libdir/libavutil.so +%_libdir/pkgconfig/libavutil.pc +%_mandir/man3/libavutil.3* + +%files libpostproc-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libpostproc/ +%_libdir/libpostproc.so +%_libdir/pkgconfig/libpostproc.pc + +%files libswresample-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libswresample/ +%_libdir/libswresample.so +%_libdir/pkgconfig/libswresample.pc +%_mandir/man3/libswresample.3* + +%files libswscale-devel +%dir %_includedir/ffmpeg/ +%_includedir/ffmpeg/libswscale/ +%_libdir/libswscale.so +%_libdir/pkgconfig/libswscale.pc +%_mandir/man3/libswscale.3* + +%files private-devel +%_includedir/ffmpeg/private/ + +%changelog diff --git a/ffmpeg-arm6l.diff b/ffmpeg-arm6l.diff new file mode 100644 index 0000000..ef90b3d --- /dev/null +++ b/ffmpeg-arm6l.diff @@ -0,0 +1,17 @@ +--- + libavutil/arm/timer.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ffmpeg-4.4.1/libavutil/arm/timer.h +=================================================================== +--- ffmpeg-4.4.1.orig/libavutil/arm/timer.h ++++ ffmpeg-4.4.1/libavutil/arm/timer.h +@@ -30,7 +30,7 @@ + + #define AV_READ_TIME mach_absolute_time + +-#elif HAVE_INLINE_ASM && defined(__ARM_ARCH_7A__) ++#elif HAVE_INLINE_ASM && defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_6ZK__) + + #define AV_READ_TIME read_time + diff --git a/ffmpeg-codec-choice.diff b/ffmpeg-codec-choice.diff new file mode 100644 index 0000000..c964b14 --- /dev/null +++ b/ffmpeg-codec-choice.diff @@ -0,0 +1,57 @@ +From: Jan Engelhardt + +Edit the default codec selection such that + + ffmpeg -i youtube.blah.webm foobar.mkv + +without any further arguments can produce a result even on a +reduced codec selection list. + +--- + libavformat/matroskaenc.c | 20 ++++++++++++++------ + 1 file changed, 14 insertions(+), 6 deletions(-) + +Index: ffmpeg-5.0/libavformat/matroskaenc.c +=================================================================== +--- ffmpeg-5.0.orig/libavformat/matroskaenc.c ++++ ffmpeg-5.0/libavformat/matroskaenc.c +@@ -2887,16 +2887,25 @@ static int mkv_query_codec(enum AVCodecI + return 0; + } + ++#define PREFAUDIO \ ++ CONFIG_LIBOPUS_ENCODER ? AV_CODEC_ID_OPUS : \ ++ CONFIG_AAC_ENCODER ? AV_CODEC_ID_AAC : \ ++ CONFIG_VORBIS_ENCODER ? AV_CODEC_ID_VORBIS : \ ++ AV_CODEC_ID_AC3 ++ + const AVOutputFormat ff_matroska_muxer = { + .name = "matroska", + .long_name = NULL_IF_CONFIG_SMALL("Matroska"), + .mime_type = "video/x-matroska", + .extensions = "mkv", + .priv_data_size = sizeof(MatroskaMuxContext), +- .audio_codec = CONFIG_LIBVORBIS_ENCODER ? +- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, +- .video_codec = CONFIG_LIBX264_ENCODER ? +- AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, ++ .audio_codec = PREFAUDIO, ++ .video_codec = ++ CONFIG_LIBVPX_VP9_ENCODER ? AV_CODEC_ID_VP9 : \ ++ CONFIG_LIBX264_ENCODER ? AV_CODEC_ID_H264 : \ ++ CONFIG_LIBVPX_VP8_ENCODER ? AV_CODEC_ID_VP8 : \ ++ CONFIG_MPEG4_ENCODER ? AV_CODEC_ID_MPEG4 : \ ++ AV_CODEC_ID_THEORA, + .init = mkv_init, + .deinit = mkv_deinit, + .write_header = mkv_write_header, +@@ -2954,8 +2963,7 @@ const AVOutputFormat ff_matroska_audio_m + .mime_type = "audio/x-matroska", + .extensions = "mka", + .priv_data_size = sizeof(MatroskaMuxContext), +- .audio_codec = CONFIG_LIBVORBIS_ENCODER ? +- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, ++ .audio_codec = PREFAUDIO, + .video_codec = AV_CODEC_ID_NONE, + .init = mkv_init, + .deinit = mkv_deinit, diff --git a/ffmpeg-new-coder-errors.diff b/ffmpeg-new-coder-errors.diff new file mode 100644 index 0000000..e2f08cf --- /dev/null +++ b/ffmpeg-new-coder-errors.diff @@ -0,0 +1,60 @@ +From: Jan Engelhardt +Date: 2016-04-10 23:23:53.138440254 +0200 + +Improve the error messages a bit to say what's really going on +(in light of openSUSE's reduced build). + +--- + fftools/ffmpeg.c | 2 +- + fftools/ffmpeg_filter.c | 4 ++-- + fftools/ffmpeg_opt.c | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +Index: ffmpeg-4.4.1/fftools/ffmpeg.c +=================================================================== +--- ffmpeg-4.4.1.orig/fftools/ffmpeg.c ++++ ffmpeg-4.4.1/fftools/ffmpeg.c +@@ -2954,7 +2954,7 @@ static int init_input_stream(int ist_ind + if (ist->decoding_needed) { + const AVCodec *codec = ist->dec; + if (!codec) { +- snprintf(error, error_len, "Decoder (codec %s) not found for input stream #%d:%d", ++ snprintf(error, error_len, "This build of ffmpeg does not include a \"%s\" decoder needed for input stream #%d:%d.", + avcodec_get_name(ist->dec_ctx->codec_id), ist->file_index, ist->st->index); + return AVERROR(EINVAL); + } +Index: ffmpeg-4.4.1/fftools/ffmpeg_filter.c +=================================================================== +--- ffmpeg-4.4.1.orig/fftools/ffmpeg_filter.c ++++ ffmpeg-4.4.1/fftools/ffmpeg_filter.c +@@ -959,7 +959,7 @@ static int configure_input_filter(Filter + { + if (!ifilter->ist->dec) { + av_log(NULL, AV_LOG_ERROR, +- "No decoder for stream #%d:%d, filtering impossible\n", ++ "This build of ffmpeg does not have a suitable decoder for stream #%d:%d enabled, filtering impossible\n", + ifilter->ist->file_index, ifilter->ist->st->index); + return AVERROR_DECODER_NOT_FOUND; + } +@@ -1103,7 +1103,7 @@ int configure_filtergraph(FilterGraph *f + if (!ost->enc) { + /* identical to the same check in ffmpeg.c, needed because + complex filter graphs are initialized earlier */ +- av_log(NULL, AV_LOG_ERROR, "Encoder (codec %s) not found for output stream #%d:%d\n", ++ av_log(NULL, AV_LOG_ERROR, "This build of ffmpeg does not include a \"%s\" encoder needed for output stream #%d:%d.\n", + avcodec_get_name(ost->st->codecpar->codec_id), ost->file_index, ost->index); + ret = AVERROR(EINVAL); + goto fail; +Index: ffmpeg-4.4.1/fftools/ffmpeg_opt.c +=================================================================== +--- ffmpeg-4.4.1.orig/fftools/ffmpeg_opt.c ++++ ffmpeg-4.4.1/fftools/ffmpeg_opt.c +@@ -1400,7 +1400,7 @@ static int choose_encoder(OptionsContext + if (!ost->enc) { + av_log(NULL, AV_LOG_FATAL, "Automatic encoder selection failed for " + "output stream #%d:%d. Default encoder for format %s (codec %s) is " +- "probably disabled. Please choose an encoder manually.\n", ++ "probably disabled or this build of ffmpeg does not include that codec. Please choose an encoder manually.\n", + ost->file_index, ost->index, s->oformat->name, + avcodec_get_name(ost->st->codecpar->codec_id)); + return AVERROR_ENCODER_NOT_FOUND; diff --git a/vmaf-trim-usr-local.patch b/vmaf-trim-usr-local.patch new file mode 100644 index 0000000..5e07045 --- /dev/null +++ b/vmaf-trim-usr-local.patch @@ -0,0 +1,17 @@ +--- + libavfilter/vf_libvmaf.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ffmpeg-4.4.1/libavfilter/vf_libvmaf.c +=================================================================== +--- ffmpeg-4.4.1.orig/libavfilter/vf_libvmaf.c ++++ ffmpeg-4.4.1/libavfilter/vf_libvmaf.c +@@ -72,7 +72,7 @@ typedef struct LIBVMAFContext { + #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM + + static const AVOption libvmaf_options[] = { +- {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/local/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, ++ {"model_path", "Set the model to be used for computing vmaf.", OFFSET(model_path), AV_OPT_TYPE_STRING, {.str="/usr/share/model/vmaf_v0.6.1.pkl"}, 0, 1, FLAGS}, + {"log_path", "Set the file path to be used to store logs.", OFFSET(log_path), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, + {"log_fmt", "Set the format of the log (csv, json or xml).", OFFSET(log_fmt), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 1, FLAGS}, + {"enable_transform", "Enables transform for computing vmaf.", OFFSET(enable_transform), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS},