From c3ec4f21e17cfcfe66eb14cd95c4145cc40b66ef92c9b56c218d3efbaea3d0ff Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Fri, 19 Apr 2024 10:41:46 +0000 Subject: [PATCH] Accepting request 1166681 from home:jengelh:ff7 OBS-URL: https://build.opensuse.org/request/show/1166681 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-7?expand=0&rev=1 --- .gitattributes | 23 + .gitignore | 1 + _multibuild | 3 + baselibs.conf | 8 + enable_decoders | 480 +++++++++++++++++ enable_encoders | 195 +++++++ ffmpeg-4.2-dlopen-fdk_aac.patch | 195 +++++++ ffmpeg-7-rpmlintrc | 1 + ffmpeg-7.0.tar.xz | 3 + ffmpeg-7.0.tar.xz.asc | 11 + ffmpeg-7.changes | 133 +++++ ffmpeg-7.keyring | 30 ++ ffmpeg-7.spec | 929 ++++++++++++++++++++++++++++++++ ffmpeg-arm6l.diff | 17 + ffmpeg-chromium.patch | 46 ++ ffmpeg-codec-choice.diff | 57 ++ ffmpeg-dlopen-headers.tar.xz | 3 + ffmpeg-dlopen-openh264.patch | 354 ++++++++++++ ffmpeg-new-coder-errors.diff | 23 + ffmpeg_get_dlopen_headers.sh | 42 ++ work-around-abi-break.patch | 52 ++ 21 files changed, 2606 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 _multibuild 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-7-rpmlintrc create mode 100644 ffmpeg-7.0.tar.xz create mode 100644 ffmpeg-7.0.tar.xz.asc create mode 100644 ffmpeg-7.changes create mode 100644 ffmpeg-7.keyring create mode 100644 ffmpeg-7.spec create mode 100644 ffmpeg-arm6l.diff create mode 100644 ffmpeg-chromium.patch create mode 100644 ffmpeg-codec-choice.diff create mode 100644 ffmpeg-dlopen-headers.tar.xz create mode 100644 ffmpeg-dlopen-openh264.patch create mode 100644 ffmpeg-new-coder-errors.diff create mode 100644 ffmpeg_get_dlopen_headers.sh create mode 100644 work-around-abi-break.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/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..e28bf20 --- /dev/null +++ b/_multibuild @@ -0,0 +1,3 @@ + + ffmpeg-7-mini + diff --git a/baselibs.conf b/baselibs.conf new file mode 100644 index 0000000..9691a2e --- /dev/null +++ b/baselibs.conf @@ -0,0 +1,8 @@ +libavcodec61 +libavdevice61 +libavfilter10 +libavformat61 +libavutil59 +libpostproc58 +libswresample5 +libswscale8 diff --git a/enable_decoders b/enable_decoders new file mode 100644 index 0000000..38f6f03 --- /dev/null +++ b/enable_decoders @@ -0,0 +1,480 @@ +## module name # reason for enablement in ffmpeg (usually there is another package that already got legal review) +aac +aasc +ac3 +acelp_kelvin +adpcm_4xm +adpcm_adx +adpcm_afc +adpcm_agm +adpcm_aica +adpcm_argo +adpcm_ct +adpcm_dtk +adpcm_ea +adpcm_ea_maxis_xa +adpcm_ea_r1 +adpcm_ea_r2 +adpcm_ea_r3 +adpcm_ea_xas +adpcm_g722 +adpcm_g726 +adpcm_g726le +adpcm_ima_acorn +adpcm_ima_alp +adpcm_ima_amv +adpcm_ima_apc +adpcm_ima_apm +adpcm_ima_cunning +adpcm_ima_dat4 +adpcm_ima_dk3 +adpcm_ima_dk4 +adpcm_ima_ea_eacs +adpcm_ima_ea_sead +adpcm_ima_iss +adpcm_ima_moflex +adpcm_ima_mtf +adpcm_ima_oki +adpcm_ima_qt +adpcm_ima_rad +adpcm_ima_smjpeg +adpcm_ima_ssi +adpcm_ima_wav +adpcm_ima_ws +adpcm_ms +adpcm_mtaf +adpcm_psx +adpcm_sbpro_2 +adpcm_sbpro_3 +adpcm_sbpro_4 +adpcm_swf +adpcm_thp +adpcm_thp_le +adpcm_vima +adpcm_xa +adpcm_xmd +adpcm_yamaha +adpcm_zork +alac +alias_pix +amrnb # opencore-amr +amrwb # opencore-amr +amv +anm +ansi # trivial +anull +apac +ape +apng # animated png +arbc +argo +ass # trivial +asv1 +asv2 +atrac1 +atrac3 +atrac3al +atrac3p +atrac3pal +aura +aura2 +av1 # libaom +av1_nvdec # passthrough +av1_qsv # passthrough +av1_vaapi # passthrough +ayuv # trivial +bethsoftvid # trivial +bfi # trivial +bink +binkaudio_dct +binkaudio_rdft +bintext +bitpacked # trivial +bmp # trivial +bmv_audio +bmv_video +bonk +brender_pix +c93 +cbd2_dpcm +ccaption +cdgraphics +cdtoons +cdxl +cinepak +clearvideo +cljr +cook +cpia +cscd +cyuv +dca +dds +derf_dpcm +dfa +dfpwm +dirac # dirac +dnxhd +dolby_e +dpx +dsd_lsbf +dsd_msbf +dsicinaudio +dsicinvideo +dss_sp +dvaudio +dvbsub +dvdsub +dvvideo +dxa +dxtory +eacmv +eamad +eatgq +eatgv +eatqi +eightbps +eightsvx_exp +eightsvx_fib +escape124 +escape130 +evrc +exr # openEXR +ffv1 # ffmpeg +ffvhuff # ffmpeg +ffwavesynth # pseudo +fits +flac # libFLAC +flashsv +flashsv2 +flic +flv +fmvc +fourxm +ftr # fdk-aac +g723_1 +g729 +gdv +gem +gif # libpng +gremlin_dpcm +gsm # libgsm +gsm_ms +h261 +h263 +h263_v4l2m2m # passthrough +h263i +h263p +hap +hca +hcom +hdr +hnm4_video +hq_hqa +hqx +huffyuv # trivial+zlib +hymt # huffyuv-mt +iac +idcin +idf +iff_ilbm +ilbc # ilbc +imc +indeo2 +indeo3 +indeo4 +indeo5 +interplay_acm +interplay_dpcm +interplay_video +ipu +jacosub +jpeg2000 # openjpeg2 +jpegls +jv +kgv1 +kmvc +lagarith +libaom # libaom +libaom_av1 # libaom +libcodec2 # codec2 +libdav1d # av1 +libgsm # libgsm +libgsm_ms # libgsm +libjxl # libjxl +libopencore_amrnb # opencore-amr +libopencore_amrwb # opencore-amr +libopenh264 # passthrough/dlopen +libopenjpeg # openjpeg +libopus # opus +libschroedinger # schroedinger +libspeex # speex +libvorbis # libvorbis +libvpx_vp8 # libvpx +libvpx_vp9 # libvpx +libzvbi_teletext # zvbi +loco +lscr +m101 +mace3 +mace6 +mdec +media100 +metasound +microdvd +mimic +misc4 +mjpeg # mjpegtools +mjpeg_qsv # passthrough +mjpegb +mlp +mmvideo +motionpixels +mp1 # twolame/lame +mp1float # twolame/lame +mp2 # twolame +mp2float # twolame +mp3 # lame +mp3adu +mp3adufloat +mp3float # lame +mp3on4 +mp3on4float +mpc7 +mpc8 +mpeg1_cuvid # passthrough +mpeg1_v4l2m2m # passthrough +mpeg1video +mpeg2_cuvid # passthrough +mpeg2_qsv # passthrough +mpeg2_v4l2m2m # passthrough +mpeg2_vaapi # passthrough +mpeg2video +mpeg4 +mpeg4_cuvid # passthrough +mpeg4_v4l2m2m # passthrough +mpegvideo +mpl2 +msa1 +mscc +msmpeg4 +msmpeg4v1 +msmpeg4v2 +msmpeg4v3 +msnsiren +msp2 +msrle +mss1 +msvideo1 +mszh +mts2 +mv30 +mvc1 +mvc2 +mvdv +mvha +mwsc +mxpeg +nellymoser +nuv +on2avc +opus # opus +paf_audio +paf_video +pam # trivial +pbm # trivial +pcm_alaw # trivial +pcm_bluray +pcm_dvd +pcm_f16le # trivial +pcm_f24le # trivial +pcm_f32be # trivial +pcm_f32be # trivial +pcm_f32le # trivial +pcm_f64be # trivial +pcm_f64le # trivial +pcm_lxf # trivial +pcm_mulaw # trivial +pcm_s16be # trivial +pcm_s16be_planar # trivial +pcm_s16le # trivial +pcm_s16le_planar # trivial +pcm_s24be # trivial +pcm_s24daud # trivial +pcm_s24le # trivial +pcm_s24le_planar # trivial +pcm_s32be # trivial +pcm_s32le # trivial +pcm_s32le_planar # trivial +pcm_s64be # trivial +pcm_s64le # trivial +pcm_s8 # trivial +pcm_s8_planar # trivial +pcm_sga # trivial +pcm_u16be # trivial +pcm_u16le # trivial +pcm_u24be # trivial +pcm_u24le # trivial +pcm_u32be # trivial +pcm_u32le # trivial +pcm_u8 # trivial +pcm_vidc # trivial +pcx +pfm # trivial +pgm # trivial +pgmyuv # trivial +pgssub # mkvtoolnix +pgx +phm # trivial +photocd +pictor +pjs +png # libpng +ppm # trivial +prosumer +psd +ptx +qcelp +qdm2 +qdmc +qdraw +qoi +qpeg +qtrle +r10k +r210 +ra_144 +ra_288 +rasc +rawvideo # trivial +realtext +rka +rl2 +roq +roq_dpcm +rpza +rscc +rv10 +rv20 +s302m +sami +sanm +sbc +screenpresso +sdx2_dpcm +sgi # trivial +sgirle # trivial +shorten +simbiosis_imx +sipr +siren +smackaud +smacker +smc +smvjpeg +snow +sol_dpcm +sonic +sp5x +speedhq +speex # speex +srgc +srt # trivial +ssa # trivial +stl +subrip +subviewer +subviewer1 +sunrast # trivial +svq1 +svq3 +tak +targa # trivial +targa_y216 +tdsc +text # trivial +theora # libtheora +thp +tiertexseqvideo +tiff # libtiff +tmv +truehd +truemotion1 +truemotion2 +truemotion2rt +truespeech +tscc +tscc2 +tta +twinvq +txd +ulti +utvideo +v210 # trivial +v210x # trivial +v308 # trivial +v408 # trivial +v410 # trivial +vb +vble +vcr1 +vmdaudio +vmdvideo +vmnc +vnull # trivial +vorbis # libvorbis +vp3 # libav +vp4 # libav +vp5 # libav +vp5 # libav +vp6 # libav +vp6 # libav +vp6a # libav +vp6a # libav +vp6f # libav +vp6f # libav +vp7 # libav +vp8 # libvpx +vp8_qsv # passthrough +vp8_v4l2m2m # passthrough +vp9 # libvpx +vp9_qsv # passthrough +vp9_v4l2m2m # passthrough +vplayer +vqa +vqc +wady_dpcm +wavarc +wavpack # wavpack +wbmp +wcmv +webp # libwebp +webvtt # trivial +wmav1 +wmav2 +wmavoice +wmv1 +wmv2 +wnv1 +wrapped_avframe # passthrough +ws_snd1 +xan_dpcm +xan_wc3 +xan_wc4 +xbin +xbm # trivial +xface +xl +xpm +xsub +xwd # xwd +y41p # trivial +y41p # trivial +ylc +yop +yuv4 # trivial +yuv4 # trivial +zero12v +zerocodec +zlib # zlib +zmbv # dosbox diff --git a/enable_encoders b/enable_encoders new file mode 100644 index 0000000..f35ba53 --- /dev/null +++ b/enable_encoders @@ -0,0 +1,195 @@ +## module name # reason for enablement in ffmpeg (usually there is another package that already got legal review) +a64multi +a64multi5 +aac +ac3 +adpcm_adx +adpcm_argo +adpcm_g722 +adpcm_g726 +adpcm_g726le +adpcm_ima_alp +adpcm_ima_amv +adpcm_ima_apm +adpcm_ima_qt +adpcm_ima_ssi +adpcm_ima_wav +adpcm_ima_ws +adpcm_ms +adpcm_swf +adpcm_yamaha +alac +alias_pix +amv +anull +apng # libpng +ass # trivial +asv1 +asv2 +av1_nvenc +av1_vaapi +ayuv # trival +bitpacked # trivial +bmp # trivial +cinepak +cljr +dca +dfpwm +dnxhd +dpx +dvdsub +dvvideo +exr +ffv1 +ffvhuff # trivial+zlib +flac # libFLAC +flashsv +flashsv2 +flv +g723_1 +gif # libpng +h261 +h263 +h263_v4l2m2m # passthrough +h263p +hdr +huffyuv # trivial+zlib +ilbc # ilbc +jpeg2000 +jpegls +libaom # libaom +libaom_av1 # libaom +libcodec2 # codec2 +libgsm # libgsm +libgsm_ms # libgsm +libjxl # libjxl +libmp3lame # lame +libopencore_amrnb # opencore-amr +libopenh264 # passthrough/dlopen +libopenjpeg # openjpeg +libopus # opus +librav1e # rav1e +libschroedinger # schroedinger +libspeex # speex +libsvtav1 # SVT-AV1 +libtheora # libtheora +libtwolame # twolame +libvo_amrwbenc # vo-amrwbenc +libvorbis # libvorbis +libvpx_vp8 # libvpx +libvpx_vp9 # libvpx +libwebp # libwebp +libwebp_anim # libwebp +libxvid # xvidcore +mjpeg # mjpegtools +mjpeg_qsv # passthrough +mjpeg_vaapi # passthrough +mlp +mp2 # twolame +mp2fixed # twolame +mpeg1video +mpeg2_qsv +mpeg2_vaapi +mpeg2video +mpeg4 +mpeg4_v4l2m2m # passthrough +msmpeg4v1 +msmpeg4v2 +msmpeg4v3 +msnsiren +msvideo1 +nellymoser +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 +phm # trivial +png # libpng +ppm # trivial +qoi +qtrle +r10k # trivial +r210 # trivial +ra_144 +rawvideo # trivial +roq +roq_dpcm +rpza +rv10 +rv20 +s302m +sbc +sgi # trivial +siren +smc +snow +sonic +sonic_ls +speedhq +srt # trivial +ssa # trivial +subrip # trivial +sunrast # trivial +svq1 +targa # trivial +text # trivial +tiff # libtiff +truehd +tta +ttml +utvideo +v210 # trivial +v308 # trivial +v408 # trivial +v410 # trivial +vc2 # dirac +vnull # trivial +vorbis # libvorbis +vp8_qsv # passthrough +vp8_v4l2m2m # passthrough +vp8_vaapi # passthrough +vp9_qsv # passthrough +vp9_vaapi # passthough +wavpack +wbmp +webvtt # trivial +wmav1 +wmav2 +wmv1 +wmv2 +wrapped_avframe # passthrough +xbm # trivial +xface +xsub +xwd # xwd +y41p # trivial +yuv4 # trivial +zlib # zlib +zmbv # dosbox diff --git a/ffmpeg-4.2-dlopen-fdk_aac.patch b/ffmpeg-4.2-dlopen-fdk_aac.patch new file mode 100644 index 0000000..d6e887b --- /dev/null +++ b/ffmpeg-4.2-dlopen-fdk_aac.patch @@ -0,0 +1,195 @@ +From: Ismail Dönmez +Date: 2019-06-11 11:21:23 + +This is ffmpeg-4.1-dlopen-faac-mp3lame-opencore-x264-x265-xvid.patch +from OpenMandriva to optionally enable runtime enabling of +fdkaac/lame/x264/x265. + +--- + configure | 3 ++ + libavcodec/dlopen.h | 12 ++++++++++ + libavcodec/libfdk-aacdec.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ + libavcodec/libfdk-aacenc.c | 47 +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 115 insertions(+) + +Index: ffmpeg-7.0/configure +=================================================================== +--- ffmpeg-7.0.orig/configure ++++ ffmpeg-7.0/configure +@@ -230,6 +230,7 @@ External library support: + --enable-libdvdnav enable libdvdnav, needed for DVD demuxing [no] + --enable-libdvdread enable libdvdread, needed for DVD demuxing [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] +@@ -1873,6 +1874,7 @@ EXTERNAL_LIBRARY_GPL_LIST=" + EXTERNAL_LIBRARY_NONFREE_LIST=" + decklink + libfdk_aac ++ libfdk_aac_dlopen + libtls + " + +@@ -6847,6 +6849,7 @@ enabled libdvdread && 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-7.0/libavcodec/dlopen.h +=================================================================== +--- /dev/null ++++ ffmpeg-7.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-7.0/libavcodec/libfdk-aacdec.c +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/libfdk-aacdec.c ++++ ffmpeg-7.0/libavcodec/libfdk-aacdec.c +@@ -38,6 +38,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, +@@ -244,6 +292,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-7.0/libavcodec/libfdk-aacenc.c +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/libfdk-aacenc.c ++++ ffmpeg-7.0/libavcodec/libfdk-aacenc.c +@@ -37,6 +37,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; +@@ -182,6 +224,11 @@ static av_cold int aac_encode_init(AVCod + int aot = AV_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->ch_layout.nb_channels)) != AACENC_OK) { + av_log(avctx, AV_LOG_ERROR, "Unable to open the encoder: %s\n", + aac_get_error(err)); diff --git a/ffmpeg-7-rpmlintrc b/ffmpeg-7-rpmlintrc new file mode 100644 index 0000000..4e8a166 --- /dev/null +++ b/ffmpeg-7-rpmlintrc @@ -0,0 +1 @@ +addFilter("shlib-fixed-dependency") diff --git a/ffmpeg-7.0.tar.xz b/ffmpeg-7.0.tar.xz new file mode 100644 index 0000000..ba44487 --- /dev/null +++ b/ffmpeg-7.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4426a94dd2c814945456600c8adfc402bee65ec14a70e8c531ec9a2cd651da7b +size 10791240 diff --git a/ffmpeg-7.0.tar.xz.asc b/ffmpeg-7.0.tar.xz.asc new file mode 100644 index 0000000..582f690 --- /dev/null +++ b/ffmpeg-7.0.tar.xz.asc @@ -0,0 +1,11 @@ +-----BEGIN PGP SIGNATURE----- + +iQFMBAABCAA2FiEE/PmG6hXm4pOlZE8QtDIvBNZ2WNgFAmYPNtMYHGZmbXBlZy1k +ZXZlbEBmZm1wZWcub3JnAAoJELQyLwTWdljYFdUIAIOFgLplbe7CHY0G3bQuCK8N +Q+js2eLPxKNbeBhshcHDyNResAT+uHE7fQYRFUcETf5qqoPHyDptbG/o+onlGW8M +vNwu6wTC3XiFjKjJKBRwyXYS31J+R/re2w+LiEI+OnekRhaQ/vbj1bbjREEQLtOv +7086Oc6ZzMAsxjc6wGde4eJkhTQT8HYF6lU0Bsm4yeqCAcppfGv6OwZn8fyQ/L9i +PaqFJFzs4C8PdRRdSQ7VifAcAAmyHNoRY611ZCbnJvoc7oEU44SVIKsryqRBunoX +aAZ1eNwoI/Oz/uC/yK+S3oaAauZuUZFxgc0hqCxYLZF5TeRvF4Y8cPTTymTuVDM= +=Hz9R +-----END PGP SIGNATURE----- diff --git a/ffmpeg-7.changes b/ffmpeg-7.changes new file mode 100644 index 0000000..d1202c8 --- /dev/null +++ b/ffmpeg-7.changes @@ -0,0 +1,133 @@ +------------------------------------------------------------------- +Sun Apr 7 11:39:41 UTC 2024 - Jan Engelhardt + +- Copy package ffmpeg-6 to ffmpeg-7 and adjust +- Update to release 7.0.0 + * Made the CLI tool support multithreading +- Delete 0001-avcodec-tests-rename-the-bundled-Mesa-AV1-vulkan-vid.patch + (merged) + +------------------------------------------------------------------- +Fri Mar 22 09:25:28 UTC 2024 - Jan Engelhardt + +- Add 0001-avcodec-tests-rename-the-bundled-Mesa-AV1-vulkan-vid.patch + +------------------------------------------------------------------- +Thu Mar 14 18:58:31 UTC 2024 - Jan Engelhardt + +- Let the ffmpeg-6 main program be combinable with ffmpeg-6-mini-libs + +------------------------------------------------------------------- +Mon Jan 15 11:11:08 UTC 2024 - Enrico Belleri + +- Update to version 6.1.1: + * libaribcaption decoder + * Playdate video decoder and demuxer + * Extend VAAPI support for libva-win32 on Windows + * afireqsrc audio source filter + * arls filter + * ffmpeg CLI new option: -readrate_initial_burst + * zoneplate video source filter + * command support in the setpts and asetpts filters + * Vulkan decode hwaccel, supporting H264, HEVC and AV1 + * color_vulkan filter + * bwdif_vulkan filter + * nlmeans_vulkan filter + * RivaTuner video decoder + * xfade_vulkan filter + * vMix video decoder + * Essential Video Coding parser, muxer and demuxer + * Essential Video Coding frame merge bsf + * bwdif_cuda filter + * Microsoft RLE video encoder + * Raw AC-4 muxer and demuxer + * Raw VVC bitstream parser, muxer and demuxer + * Bitstream filter for editing metadata in VVC streams + * Bitstream filter for converting VVC from MP4 to Annex B + * scale_vt filter for videotoolbox + * transpose_vt filter for videotoolbox + * support for the P_SKIP hinting to speed up libx264 encoding + * Support HEVC,VP9,AV1 codec in enhanced flv format + * apsnr and asisdr audio filters + * OSQ demuxer and decoder + * Support HEVC,VP9,AV1 codec fourcclist in enhanced rtmp protocol + * CRI USM demuxer + * ffmpeg CLI '-top' option deprecated in favor of the setfield filter + * VAAPI AV1 encoder + * ffprobe XML output schema changed to account for multiple variable-fields elements within the same parent element + * ffprobe -output_format option added as an alias of -of +- Remove patch6 0001-avfilter-vf_libplacebo-remove-deprecated-field.diff +- Prefer libvpl to libmfx: the latter is deprecated +- Delete ffmpeg-6-private-devel package as it is only needed to build libav-tools + +------------------------------------------------------------------- +Wed Nov 22 15:23:54 UTC 2023 - Bjørn Lie + +- Enable more decoders and encoders explicitly: + * amrwb via bcond_without for TW only (and in + enable_decoder/encoder) + * opencore via bcond_without for TW only (and in + enable_decoder/encoder) + * xvid via bcond_without for TW only (and in + enable_decoder/encoder) + * h.263 via enable_decoder/encoder and no longer explicitly + disabling in call to configure + * MPEG4 Visual via enable_decoder/encoder and no longer + explicitly disabling in call to configure + * MPEG2 Hardware decoders via enable_decoder/encoder + * And many many more via enable_decoder/encoder. + +------------------------------------------------------------------- +Fri Nov 10 10:09:46 UTC 2023 - Bjørn Lie + +- Update to version 6.0.1: + * Updates and bugfixes to avcodecs, avformat and avfilters + mainly. +- Drop patch fixed upstream: + * 0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch + +------------------------------------------------------------------- +Wed Oct 4 07:59:01 UTC 2023 - Manfred Hollstein + +- Add 0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch + to resolve a build failure on 15.4/15.5. + +------------------------------------------------------------------- +Mon Jul 31 09:05:39 UTC 2023 - llyyr + +- Bump required libplacebo version to v6.292.0 or newer for TW +- Temporarily demote deprecation errors to deprecation warnings + for vf_libplacebo +- Add upstream patches to fix build with libplacebo v6: + * 0001-avfilter-vf_libplacebo-remove-deprecated-field.diff + +------------------------------------------------------------------- +Mon Apr 10 09:08:08 UTC 2023 - Jan Engelhardt + +- Reset fixed leftover value for BUILD_ORIG + +------------------------------------------------------------------- +Thu Mar 16 17:56:04 UTC 2023 - Jan Engelhardt + +- Conflict with otherproviders(ffmpeg-tools). + +------------------------------------------------------------------- +Thu Mar 9 09:02:01 UTC 2023 - Enrico Belleri + +- enable libplacebo filter +- clean old BuildRequires conditions +- add libjxl to enable_encoders + +------------------------------------------------------------------- +Tue Feb 28 13:23:08 UTC 2023 - Jan Engelhardt + +- Branch from ffmpeg-5.spec +- Remove ffmpeg-4.4-CVE-2020-22046.patch (inapplicable), + no-vk-video-decoding.patch (obsolete), + ffmpeg-CVE-2022-3964.patch (appears merged) +- Update to release 6.0 + * FFmpeg now runs every muxer in a separate thread and requires + threading to be enabled for compilation + * VA-API encoding and decoding support for 10/12-bit 422, + 10/12-bit 444 VP9 support + * RISC-V optimizations diff --git a/ffmpeg-7.keyring b/ffmpeg-7.keyring new file mode 100644 index 0000000..35375c8 --- /dev/null +++ b/ffmpeg-7.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-7.spec b/ffmpeg-7.spec new file mode 100644 index 0000000..30debc8 --- /dev/null +++ b/ffmpeg-7.spec @@ -0,0 +1,929 @@ +# +# spec file for package ffmpeg-7 +# +# Copyright (c) 2024 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/ +# + + +%define flavor @BUILD_FLAVOR@%nil +# +# preamble is present twice, watch out +# +%if "%flavor" != "ffmpeg-7-mini" + +# 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 \ +%nil + +%if 0%{?BUILD_ORIG} +%bcond_without amf_sdk +%bcond_without cuda_sdk +%else +# If software H264 is disabled, the hw driver must be as well: +# HW drivers can fail to initialize, namely when the hardware is absent. +# Browsers choose video formats on sites like youtube based on `ffmpeg +# -codecs` rather than the success/failure status of libav* initialization. +# This becomes a problem when a format only has a HW driver; +# the browser thinks it can do H264 but never succeeds. +%bcond_with amf_sdk +%bcond_with cuda_sdk +%endif + +%bcond_with amrwb +%bcond_with fdk_aac_dlopen +%bcond_with opencore +%bcond_with smbclient +%bcond_with x264 +%bcond_with x265 +%bcond_with xvid + +%if 0%{?suse_version} > 1500 +%bcond_without mysofa +%bcond_without vidstab +%bcond_without codec2 +%bcond_without rubberband +%bcond_without vulkan +%bcond_without amrwb +%bcond_without opencore +%bcond_without xvid +%else +%bcond_with mysofa +%bcond_with vidstab +%bcond_with codec2 +%bcond_with rubberband +%bcond_with vulkan +%endif + +%define _name ffmpeg +%define _major_version 7 +%define _major_expected 8 + +Name: ffmpeg-7 +Version: 7.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: ffmpeg-7-rpmlintrc +Source4: enable_decoders +Source5: enable_encoders +Source6: ffmpeg-dlopen-headers.tar.xz +Source92: ffmpeg_get_dlopen_headers.sh +Source98: http://ffmpeg.org/ffmpeg-devel.asc#/ffmpeg-7.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 +Patch5: work-around-abi-break.patch +Patch10: ffmpeg-chromium.patch +Patch91: ffmpeg-dlopen-openh264.patch + +BuildRequires: ladspa-devel +BuildRequires: libgsm-devel +BuildRequires: libmp3lame-devel >= 3.98.3 +BuildRequires: nasm +BuildRequires: pkgconfig +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(aom) >= 1.0.0 +BuildRequires: pkgconfig(dav1d) >= 0.5.0 +BuildRequires: pkgconfig(ffnvcodec) >= 8.1.24.15 +BuildRequires: pkgconfig(fontconfig) >= 2.4.2 +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(fribidi) >= 0.19.0 +BuildRequires: pkgconfig(gnutls) +BuildRequires: pkgconfig(jack) +BuildRequires: pkgconfig(libass) >= 0.11.0 +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 +BuildRequires: pkgconfig(libopenmpt) >= 0.2.6557 +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libraw1394) +BuildRequires: pkgconfig(libssh) >= 0.6.0 +BuildRequires: pkgconfig(libva) >= 0.35.0 +BuildRequires: pkgconfig(libva-drm) +BuildRequires: pkgconfig(libva-x11) +BuildRequires: pkgconfig(libvmaf) >= 2.0.0 +BuildRequires: pkgconfig(libwebp) >= 0.4 +BuildRequires: pkgconfig(libwebpmux) >= 0.4.0 +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(libzmq) >= 4.2.1 +BuildRequires: pkgconfig(lilv-0) +BuildRequires: pkgconfig(ogg) +BuildRequires: pkgconfig(opus) +BuildRequires: pkgconfig(sdl2) >= 2.0.1 +BuildRequires: pkgconfig(soxr) +BuildRequires: pkgconfig(speex) +BuildRequires: pkgconfig(srt) >= 1.3.0 +BuildRequires: pkgconfig(theora) >= 1.1 +BuildRequires: pkgconfig(twolame) >= 0.3.10 +BuildRequires: pkgconfig(vdpau) +BuildRequires: pkgconfig(vorbis) +BuildRequires: pkgconfig(vpx) >= 1.4.0 +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcb) +BuildRequires: pkgconfig(xcb-shape) +BuildRequires: pkgconfig(xcb-shm) +BuildRequires: pkgconfig(xcb-xfixes) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(zimg) >= 2.7.0 +BuildRequires: pkgconfig(zlib) +BuildRequires: pkgconfig(zvbi-0.2) >= 0.2.28 + +%if %{with amf_sdk} +BuildRequires: AMF-devel +%endif +%if %{with mysofa} +BuildRequires: libmysofa-devel +%endif +%if %{with codec2} +BuildRequires: pkgconfig(codec2) +%endif +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150700 +BuildRequires: pkgconfig(libjxl) >= 0.7.0 +BuildRequires: pkgconfig(libjxl_threads) >= 0.7.0 +BuildRequires: pkgconfig(librist) >= 0.2.7 +%endif +%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150400 +BuildRequires: pkgconfig(rav1e) >= 0.5.0 +%endif +%if %{with rubberband} +BuildRequires: pkgconfig(rubberband) >= 1.8.1 +%endif +%if %{with smbclient} +BuildRequires: pkgconfig(smbclient) +%endif +%if %{with vidstab} +BuildRequires: pkgconfig(vidstab) >= 0.98 +%endif +%if %{with fdk_aac_dlopen} +BuildRequires: pkgconfig(fdk-aac) +%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 + +%ifarch x86_64 %x86_64 aarch64 +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150500 +BuildRequires: pkgconfig(SvtAv1Enc) >= 0.9.0 +%endif +%endif + +%if %{with vulkan} +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150600 +BuildRequires: pkgconfig(libplacebo) >= 6.292.0 +%else +BuildRequires: (pkgconfig(libplacebo) >= 4.192.0 with pkgconfig (libplacebo) < 6.292.0) +%endif +BuildRequires: pkgconfig(shaderc) >= 2019.1 +BuildRequires: pkgconfig(vulkan) >= 1.3.255 +%endif + +%if 0%{?suse_version} < 1550 && 0%{?sle_version} >= 150200 && 0%{?sle_version} < 150600 +%ifarch x86_64 %x86_64 +BuildRequires: pkgconfig(libmfx) +%endif +%else +%ifarch x86_64 %x86_64 +BuildRequires: pkgconfig(vpl) >= 2.6 +%endif +%endif + +Provides: ffmpeg-tools = %version +Conflicts: ffmpeg-tools +Provides: ffmpeg = %version +Obsoletes: ffmpeg < %version +Requires: (libavcodec61 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libavdevice61 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libavfilter10 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libavformat61 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libavutil59 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libpostproc58 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libswresample5 = %version-%release or ffmpeg-7-mini-libs = %version-%release) +Requires: (libswscale8 = %version-%release or ffmpeg-7-mini-libs = %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 libavcodec61 +Summary: FFmpeg codec library +Group: System/Libraries +Requires: libavutil59 = %version-%release +Requires: libswresample5 = %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: libavcodec61(unrestricted) +%endif +# For mozillas +Provides: libavcodec = %version-%release + +%description -n libavcodec61 +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: libavcodec61 = %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 libavdevice61 +Summary: FFmpeg device library +Group: System/Libraries +Requires: libavcodec61 = %version-%release +Requires: libavfilter10 = %version-%release +Requires: libavformat61 = %version-%release +Requires: libavutil59 = %version-%release + +%description -n libavdevice61 +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: libavdevice61 = %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 libavfilter10 +Summary: FFmpeg audio and video filtering library +Group: System/Libraries +Requires: libavcodec61 = %version-%release +Requires: libavformat61 = %version-%release +Requires: libavutil59 = %version-%release +Requires: libpostproc58 = %version-%release +Requires: libswresample5 = %version-%release +Requires: libswscale8 = %version-%release + +%description -n libavfilter10 +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: libavfilter10 = %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 libavformat61 +Summary: FFmpeg's stream format library +Group: System/Libraries +Requires: libavcodec61 = %version-%release +Requires: libavutil59 = %version-%release + +%description -n libavformat61 +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: libavformat61 = %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 libavutil59 +Summary: FFmpeg's utility library +Group: System/Libraries + +%description -n libavutil59 +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: libavutil59 = %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 libpostproc58 +Summary: FFmpeg post-processing library +Group: System/Libraries +Requires: libavutil59 = %version-%release + +%description -n libpostproc58 +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: libpostproc58 = %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 libswresample5 +Summary: FFmpeg software resampling library +Group: System/Libraries +Requires: libavutil59 = %version-%release + +%description -n libswresample5 +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: libswresample5 = %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 libswscale8 +Summary: FFmpeg image scaling and colorspace/pixel conversion library +Group: System/Libraries +Requires: libavutil59 = %version-%release + +%description -n libswscale8 +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++ +Conflicts: libswscale-devel +Provides: libswscale-devel = %version-%release +Requires: %name-libavutil-devel = %version-%release +Requires: libswscale8 = %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. + +%prep +%autosetup -p1 -a6 -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 0%{?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-libshaderc \ + --enable-vulkan \ + --enable-libplacebo \ +%endif +%if %{with amf} + --enable-amf \ +%endif +%if !%{with cuda_sdk} + --disable-cuda-sdk \ +%endif + --enable-libaom \ + --enable-libass \ + --enable-libbluray \ + --enable-libbs2b \ + --enable-libcdio \ +%if %{with codec2} + --enable-libcodec2 \ +%endif + --enable-libdav1d \ + --enable-libdc1394 \ + --enable-libdrm \ + --enable-libfontconfig \ + --enable-libfreetype \ + --enable-libfribidi \ + --enable-libgsm \ + --enable-libjack \ +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150700 + --enable-libjxl \ + --enable-librist \ +%endif + --enable-libmp3lame \ +%if %{with mysofa} + --enable-libmysofa \ +%endif + --enable-libopenjpeg \ + --enable-libopenmpt \ + --enable-libopenh264-dlopen \ + --enable-libopus \ + --enable-libpulse \ +%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150400 + --enable-librav1e \ +%endif +%if %{with rubberband} + --enable-librubberband \ +%endif +%ifarch x86_64 %x86_64 aarch64 +%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150500 + --enable-libsvtav1 \ +%endif +%endif + --enable-libsoxr \ + --enable-libspeex \ + --enable-libssh \ + --enable-libsrt \ + --enable-libtheora \ + --enable-libtwolame \ +%if %{with vidstab} + --enable-libvidstab \ +%endif + --enable-libvmaf \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libwebp \ + --enable-libxml2 \ + --enable-libzimg \ + --enable-libzmq \ + --enable-libzvbi \ +%if 0%{?suse_version} > 1500 +%ifarch %ix86 +%else + --enable-lto \ +%endif +%endif + --enable-lv2 \ +%if 0%{?suse_version} < 1550 && 0%{?sle_version} >= 150200 && 0%{?sle_version} < 150600 +%ifarch x86_64 %x86_64 + --enable-libmfx \ +%endif +%else +%ifarch x86_64 %x86_64 + --enable-libvpl \ +%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 xvid} + --enable-libxvid \ +%endif +%if !0%{?BUILD_ORIG} + --enable-muxers \ + --enable-demuxers \ + --disable-encoders \ + --disable-decoders \ + --disable-decoder=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 H264 HEVC VC1; do + grep -q "#define CONFIG_${i}_DECODER 0" config_components.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 + +%post -n libavcodec61 -p /sbin/ldconfig +%postun -n libavcodec61 -p /sbin/ldconfig +%post -n libavdevice61 -p /sbin/ldconfig +%postun -n libavdevice61 -p /sbin/ldconfig +%post -n libavfilter10 -p /sbin/ldconfig +%postun -n libavfilter10 -p /sbin/ldconfig +%post -n libavformat61 -p /sbin/ldconfig +%postun -n libavformat61 -p /sbin/ldconfig +%post -n libavutil59 -p /sbin/ldconfig +%postun -n libavutil59 -p /sbin/ldconfig +%post -n libpostproc58 -p /sbin/ldconfig +%postun -n libpostproc58 -p /sbin/ldconfig +%post -n libswresample5 -p /sbin/ldconfig +%postun -n libswresample5 -p /sbin/ldconfig +%post -n libswscale8 -p /sbin/ldconfig +%postun -n libswscale8 -p /sbin/ldconfig + +%files +%doc Changelog CREDITS README.md +%_bindir/* +%_mandir/man1/ff*.1* +%_datadir/ffmpeg/ + +%files -n libavcodec61 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavcodec.so.* + +%files -n libavdevice61 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavdevice.so.* + +%files -n libavfilter10 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavfilter.so.* + +%files -n libavformat61 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavformat.so.* + +%files -n libavutil59 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libavutil.so.* + +%files -n libpostproc58 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libpostproc.so.* + +%files -n libswresample5 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libswresample.so.* + +%files -n libswscale8 +%license COPYING.GPLv2 LICENSE.md +%_libdir/libswscale.so.* + +%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* + +%else +%define _name ffmpeg +Name: ffmpeg-7-mini +Version: 7.0 +Release: 0 +Summary: Set of libraries for working with various multimedia formats +License: GPL-3.0-or-later +URL: https://ffmpeg.org/ +#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: ffmpeg-7-rpmlintrc +Source98: http://ffmpeg.org/ffmpeg-devel.asc#/ffmpeg-7.keyring +Patch1: ffmpeg-arm6l.diff +Patch3: ffmpeg-codec-choice.diff +Patch4: ffmpeg-4.2-dlopen-fdk_aac.patch +Patch5: work-around-abi-break.patch +Patch10: ffmpeg-chromium.patch +Patch91: ffmpeg-dlopen-openh264.patch +BuildRequires: c_compiler +Requires: this-is-only-for-build-envs + +%description +FFmpeg is a multimedia framework. +This package merely builds the API for the sake of other packages. + +%package libs +# Even with mini, we want ff5 libs to be coinstallable to ff4-devel(!), +# hence mini-libs and mini-devel are still separated. +Summary: Feature-reduced build of FFmpeg, a multimedia framework +Conflicts: libavcodec61 +Conflicts: libavdevice61 +Conflicts: libavfilter10 +Conflicts: libavformat61 +Conflicts: libavutil59 +Conflicts: libpostproc58 +Conflicts: libswresample5 +Conflicts: libswscale8 +Requires: this-is-only-for-build-envs + +%description libs +FFmpeg is a multimedia framework. +This package contains a cut-down version for building other packages. + +%package devel +Summary: Header files for feature-reduced FFmpeg build +Provides: libavcodec-devel = %version-%release +Conflicts: libavcodec-devel +Provides: libavdevice-devel = %version-%release +Conflicts: libavdevice-devel +Provides: libavfilter-devel = %version-%release +Conflicts: libavfilter-devel +Provides: libavformat-devel = %version-%release +Conflicts: libavformat-devel +Provides: libavutil-devel = %version-%release +Conflicts: libavutil-devel +Provides: libpostproc-devel = %version-%release +Conflicts: libpostproc-devel +Provides: libswresample-devel = %version-%release +Conflicts: libswresample-devel +Provides: libswscale-devel = %version-%release +Conflicts: libswscale-devel +Requires: %name-libs = %version-%release +Requires: this-is-only-for-build-envs + +%description devel +FFmpeg is a multimedia framework. +This package contains the headers accompanying %name. + +%prep +%autosetup -p1 -n %_name-%version + +%build +%define _lto_cflags %nil +CFLAGS="%optflags" \ +./configure \ + --prefix="%_prefix" \ + --libdir="%_libdir" \ + --shlibdir="%_libdir" \ + --incdir="%_includedir/ffmpeg" \ + --extra-cflags="%optflags" \ + --optflags="%optflags" \ + --disable-htmlpages --disable-stripping --disable-x86asm \ + --disable-static --enable-shared --enable-pic \ + --enable-gpl --enable-version3 \ + --disable-muxers --disable-demuxers \ + --disable-encoders --disable-decoders \ + --disable-programs --disable-doc +for i in H264 HEVC VC1; do + grep -q "#define CONFIG_${i}_DECODER 0" config_components.h +done +cat config.h +%make_build + +%install +b="%buildroot" +%make_install +rm -Rf "$b/%_datadir/ffmpeg/examples" + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%files libs +%_libdir/libavcodec.so.* +%_libdir/libavdevice.so.* +%_libdir/libavfilter.so.* +%_libdir/libavformat.so.* +%_libdir/libavutil.so.* +%_libdir/libpostproc.so.* +%_libdir/libswresample.so.* +%_libdir/libswscale.so.* + +%files devel +%license COPYING.GPLv2 LICENSE.md +%_libdir/*.so +%_libdir/pkgconfig/*.pc +%_includedir/ffmpeg/ + +%endif + +%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-chromium.patch b/ffmpeg-chromium.patch new file mode 100644 index 0000000..fe6947a --- /dev/null +++ b/ffmpeg-chromium.patch @@ -0,0 +1,46 @@ +commit 95aab0fd83619408995720ce53d7a74790580220 +author liberato@chromium.org Thu Jul 08 02:01:22 2021 +committer liberato@chromium.org Thu Jul 08 02:01:22 2021 +tree ac725b5e2c548c8142aa7096d8184d87d3876a49 +parent e073b7a22e4993e0a7cab80a42a21524e5349f95 + +Add av_stream_get_first_dts for Chromium + +--- + libavformat/avformat.h | 4 ++++ + libavformat/utils.c | 7 +++++++ + 2 files changed, 11 insertions(+) + +Index: ffmpeg-7.0/libavformat/avformat.h +=================================================================== +--- ffmpeg-7.0.orig/libavformat/avformat.h ++++ ffmpeg-7.0/libavformat/avformat.h +@@ -1170,6 +1170,10 @@ typedef struct AVStreamGroup { + + struct AVCodecParserContext *av_stream_get_parser(const AVStream *s); + ++// Chromium: We use the internal field first_dts vvv ++int64_t av_stream_get_first_dts(const AVStream *st); ++// Chromium: We use the internal field first_dts ^^^ ++ + #define AV_PROGRAM_RUNNING 1 + + /** +Index: ffmpeg-7.0/libavformat/utils.c +=================================================================== +--- ffmpeg-7.0.orig/libavformat/utils.c ++++ ffmpeg-7.0/libavformat/utils.c +@@ -56,6 +56,13 @@ int ff_unlock_avformat(void) + return ff_mutex_unlock(&avformat_mutex) ? -1 : 0; + } + ++// Chromium: We use the internal field first_dts vvv ++int64_t av_stream_get_first_dts(const AVStream *st) ++{ ++ return cffstream(st)->first_dts; ++} ++// Chromium: We use the internal field first_dts ^^^ ++ + /* an arbitrarily chosen "sane" max packet size -- 50M */ + #define SANE_CHUNK_SIZE (50000000) + diff --git a/ffmpeg-codec-choice.diff b/ffmpeg-codec-choice.diff new file mode 100644 index 0000000..01ab372 --- /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-6.1.1/libavformat/matroskaenc.c +=================================================================== +--- ffmpeg-6.1.1.orig/libavformat/matroskaenc.c ++++ ffmpeg-6.1.1/libavformat/matroskaenc.c +@@ -3538,16 +3538,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 FFOutputFormat ff_matroska_muxer = { + .p.name = "matroska", + .p.long_name = NULL_IF_CONFIG_SMALL("Matroska"), + .p.mime_type = "video/x-matroska", + .p.extensions = "mkv", + .priv_data_size = sizeof(MatroskaMuxContext), +- .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ? +- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, +- .p.video_codec = CONFIG_LIBX264_ENCODER ? +- AV_CODEC_ID_H264 : AV_CODEC_ID_MPEG4, ++ .p.audio_codec = PREFAUDIO, ++ .p.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, +@@ -3615,8 +3624,7 @@ const FFOutputFormat ff_matroska_audio_m + .p.mime_type = "audio/x-matroska", + .p.extensions = "mka", + .priv_data_size = sizeof(MatroskaMuxContext), +- .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ? +- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3, ++ .p.audio_codec = PREFAUDIO, + .p.video_codec = AV_CODEC_ID_NONE, + .init = mkv_init, + .deinit = mkv_deinit, diff --git a/ffmpeg-dlopen-headers.tar.xz b/ffmpeg-dlopen-headers.tar.xz new file mode 100644 index 0000000..c72db64 --- /dev/null +++ b/ffmpeg-dlopen-headers.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cc860a1940704082c81502fe9245aaefeeee9a1674797ccd74a123ab054cf77 +size 15532 diff --git a/ffmpeg-dlopen-openh264.patch b/ffmpeg-dlopen-openh264.patch new file mode 100644 index 0000000..85e7b89 --- /dev/null +++ b/ffmpeg-dlopen-openh264.patch @@ -0,0 +1,354 @@ +From 4739b0c97b3378bdaf737171777fe9a71a53eff1 Mon Sep 17 00:00:00 2001 +From: Neal Gompa +Date: Wed, 12 Oct 2022 09:41:27 -0400 +Subject: [PATCH] avcodec/openh264: Add the ability to dlopen() OpenH264 + +We can't directly depend on OpenH264, but we can weakly link to it +and gracefully expose the capability. + +Co-authored-by: Andreas Schneider +Co-authored-by: Neal Gompa + +Signed-off-by: Andreas Schneider +Signed-off-by: Neal Gompa +--- + configure | 3 + libavcodec/Makefile | 1 + libavcodec/libopenh264.c | 5 + + libavcodec/libopenh264_dlopen.c | 147 ++++++++++++++++++++++++++++++++++++++++ + libavcodec/libopenh264_dlopen.h | 58 +++++++++++++++ + libavcodec/libopenh264dec.c | 8 ++ + libavcodec/libopenh264enc.c | 8 ++ + 7 files changed, 230 insertions(+) + create mode 100644 libavcodec/libopenh264_dlopen.c + create mode 100644 libavcodec/libopenh264_dlopen.h + +Index: ffmpeg-7.0/configure +=================================================================== +--- ffmpeg-7.0.orig/configure ++++ ffmpeg-7.0/configure +@@ -252,6 +252,7 @@ External library support: + --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] + --enable-libopencv enable video filtering via libopencv [no] + --enable-libopenh264 enable H.264 encoding via OpenH264 [no] ++ --enable-libopenh264-dlopen enable H.264 encoding via dlopen()'ed OpenH264 [no] + --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] + --enable-libopenmpt enable decoding tracked files via libopenmpt [no] + --enable-libopenvino enable OpenVINO as a DNN module backend +@@ -1933,6 +1934,7 @@ EXTERNAL_LIBRARY_LIST=" + libmysofa + libopencv + libopenh264 ++ libopenh264_dlopen + libopenjpeg + libopenmpt + libopenvino +@@ -6921,6 +6923,7 @@ enabled libopencv && { check_hea + require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } || + require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; } + enabled libopenh264 && require_pkg_config libopenh264 "openh264 >= 1.3.0" wels/codec_api.h WelsGetCodecVersion ++enabled libopenh264_dlopen && enable libopenh264 && add_cppflags "-I$(dirname $(readlink -f "$0"))/ffdlopenhdrs/include -DCONFIG_LIBOPENH264_DLOPEN=1" + enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version || + { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } } + enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++" +Index: ffmpeg-7.0/libavcodec/Makefile +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/Makefile ++++ ffmpeg-7.0/libavcodec/Makefile +@@ -1128,6 +1128,7 @@ OBJS-$(CONFIG_LIBMP3LAME_ENCODER) + OBJS-$(CONFIG_LIBOPENCORE_AMRNB_DECODER) += libopencore-amr.o + OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER) += libopencore-amr.o + OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER) += libopencore-amr.o ++OBJS-$(CONFIG_LIBOPENH264_DLOPEN) += libopenh264_dlopen.o + OBJS-$(CONFIG_LIBOPENH264_DECODER) += libopenh264dec.o libopenh264.o + OBJS-$(CONFIG_LIBOPENH264_ENCODER) += libopenh264enc.o libopenh264.o + OBJS-$(CONFIG_LIBOPENJPEG_ENCODER) += libopenjpegenc.o +Index: ffmpeg-7.0/libavcodec/libopenh264.c +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/libopenh264.c ++++ ffmpeg-7.0/libavcodec/libopenh264.c +@@ -20,8 +20,13 @@ + */ + + #include ++ ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++#include "libopenh264_dlopen.h" ++#else + #include + #include ++#endif + + #include "libavutil/error.h" + #include "libavutil/log.h" +Index: ffmpeg-7.0/libavcodec/libopenh264_dlopen.c +=================================================================== +--- /dev/null ++++ ffmpeg-7.0/libavcodec/libopenh264_dlopen.c +@@ -0,0 +1,147 @@ ++/* ++ * OpenH264 dlopen code ++ * ++ * Copyright (C) 2022 Andreas Schneider ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#include ++ ++#include "libopenh264_dlopen.h" ++ ++/* ++ * The symbol binding makes sure we do not run into strict aliasing issues which ++ * can lead into segfaults. ++ */ ++typedef int (*__oh264_WelsCreateSVCEncoder)(ISVCEncoder **); ++typedef void (*__oh264_WelsDestroySVCEncoder)(ISVCEncoder *); ++typedef int (*__oh264_WelsGetDecoderCapability)(SDecoderCapability *); ++typedef long (*__oh264_WelsCreateDecoder)(ISVCDecoder **); ++typedef void (*__oh264_WelsDestroyDecoder)(ISVCDecoder *); ++typedef OpenH264Version (*__oh264_WelsGetCodecVersion)(void); ++typedef void (*__oh264_WelsGetCodecVersionEx)(OpenH264Version *); ++ ++#define OH264_SYMBOL_ENTRY(i) \ ++ union { \ ++ __oh264_##i f; \ ++ void *obj; \ ++ } _oh264_##i ++ ++struct oh264_symbols { ++ OH264_SYMBOL_ENTRY(WelsCreateSVCEncoder); ++ OH264_SYMBOL_ENTRY(WelsDestroySVCEncoder); ++ OH264_SYMBOL_ENTRY(WelsGetDecoderCapability); ++ OH264_SYMBOL_ENTRY(WelsCreateDecoder); ++ OH264_SYMBOL_ENTRY(WelsDestroyDecoder); ++ OH264_SYMBOL_ENTRY(WelsGetCodecVersion); ++ OH264_SYMBOL_ENTRY(WelsGetCodecVersionEx); ++}; ++ ++/* Symbols are bound by loadLibOpenH264() */ ++static struct oh264_symbols openh264_symbols; ++ ++int oh264_WelsCreateSVCEncoder(ISVCEncoder **ppEncoder) { ++ return openh264_symbols._oh264_WelsCreateSVCEncoder.f(ppEncoder); ++} ++ ++void oh264_WelsDestroySVCEncoder(ISVCEncoder *pEncoder) { ++ return openh264_symbols._oh264_WelsDestroySVCEncoder.f(pEncoder); ++} ++ ++int oh264_WelsGetDecoderCapability(SDecoderCapability *pDecCapability) { ++ return openh264_symbols._oh264_WelsGetDecoderCapability.f(pDecCapability); ++} ++ ++long oh264_WelsCreateDecoder(ISVCDecoder **ppDecoder) { ++ return openh264_symbols._oh264_WelsCreateDecoder.f(ppDecoder); ++} ++ ++void oh264_WelsDestroyDecoder(ISVCDecoder *pDecoder) { ++ return openh264_symbols._oh264_WelsDestroyDecoder.f(pDecoder); ++} ++ ++OpenH264Version oh264_WelsGetCodecVersion(void) { ++ return openh264_symbols._oh264_WelsGetCodecVersion.f(); ++} ++ ++void oh264_WelsGetCodecVersionEx(OpenH264Version *pVersion) { ++ openh264_symbols._oh264_WelsGetCodecVersionEx.f(pVersion); ++} ++ ++static void *_oh264_bind_symbol(AVCodecContext *avctx, ++ void *handle, ++ const char *sym_name) { ++ void *sym = NULL; ++ ++ sym = dlsym(handle, sym_name); ++ if (sym == NULL) { ++ const char *err = dlerror(); ++ av_log(avctx, ++ AV_LOG_WARNING, ++ "%s: Failed to bind %s\n", ++ err, ++ sym_name); ++ return NULL; ++ } ++ ++ return sym; ++} ++ ++#define oh264_bind_symbol(avctx, handle, sym_name) \ ++ if (openh264_symbols._oh264_##sym_name.obj == NULL) { \ ++ openh264_symbols._oh264_##sym_name.obj = _oh264_bind_symbol(avctx, handle, #sym_name); \ ++ if (openh264_symbols._oh264_##sym_name.obj == NULL) { \ ++ return 1; \ ++ } \ ++ } ++ ++int loadLibOpenH264(AVCodecContext *avctx) { ++ static bool initialized = false; ++ void *libopenh264 = NULL; ++ const char *err = NULL; ++ ++ if (initialized) { ++ return 0; ++ } ++ ++#define OPENH264_LIB "libopenh264.so.7" ++ libopenh264 = dlopen(OPENH264_LIB, RTLD_LAZY); ++ err = dlerror(); ++ if (err != NULL) { ++ av_log(avctx, AV_LOG_WARNING, ++ "%s: %s is missing, openh264 support will be disabled\n", err, ++ OPENH264_LIB); ++ ++ if (libopenh264 != NULL) { ++ dlclose(libopenh264); ++ } ++ return 1; ++ } ++ ++ oh264_bind_symbol(avctx, libopenh264, WelsCreateSVCEncoder); ++ oh264_bind_symbol(avctx, libopenh264, WelsDestroySVCEncoder); ++ oh264_bind_symbol(avctx, libopenh264, WelsGetDecoderCapability); ++ oh264_bind_symbol(avctx, libopenh264, WelsCreateDecoder); ++ oh264_bind_symbol(avctx, libopenh264, WelsDestroyDecoder); ++ oh264_bind_symbol(avctx, libopenh264, WelsGetCodecVersion); ++ oh264_bind_symbol(avctx, libopenh264, WelsGetCodecVersionEx); ++ ++ initialized = true; ++ ++ return 0; ++} +Index: ffmpeg-7.0/libavcodec/libopenh264_dlopen.h +=================================================================== +--- /dev/null ++++ ffmpeg-7.0/libavcodec/libopenh264_dlopen.h +@@ -0,0 +1,58 @@ ++/* ++ * OpenH264 dlopen code ++ * ++ * Copyright (C) 2022 Andreas Schneider ++ * ++ * This file is part of FFmpeg. ++ * ++ * FFmpeg is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * FFmpeg is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with FFmpeg; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ++ */ ++ ++#ifndef HAVE_LIBOPENH264_DLOPEN_H ++#define HAVE_LIBOPENH264_DLOPEN_H ++ ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++ ++#include ++#include ++ ++#include "avcodec.h" ++ ++int oh264_WelsCreateSVCEncoder(ISVCEncoder **ppEncoder); ++#define WelsCreateSVCEncoder oh264_WelsCreateSVCEncoder ++ ++void oh264_WelsDestroySVCEncoder(ISVCEncoder *pEncoder); ++#define WelsDestroySVCEncoder oh264_WelsDestroySVCEncoder ++ ++int oh264_WelsGetDecoderCapability(SDecoderCapability *pDecCapability); ++#define WelsGetDecoderCapability oh264_WelsGetDecoderCapability ++ ++long oh264_WelsCreateDecoder(ISVCDecoder **ppDecoder); ++#define WelsCreateDecoder oh264_WelsCreateDecoder ++ ++void oh264_WelsDestroyDecoder(ISVCDecoder *pDecoder); ++#define WelsDestroyDecoder oh264_WelsDestroyDecoder ++ ++OpenH264Version oh264_WelsGetCodecVersion(void); ++#define WelsGetCodecVersion oh264_WelsGetCodecVersion ++ ++void oh264_WelsGetCodecVersionEx(OpenH264Version *pVersion); ++#define WelsGetCodecVersionEx oh264_WelsGetCodecVersionEx ++ ++int loadLibOpenH264(AVCodecContext *avctx); ++ ++#endif /* CONFIG_LIBOPENH264_DLOPEN */ ++ ++#endif /* HAVE_LIBOPENH264_DLOPEN_H */ +Index: ffmpeg-7.0/libavcodec/libopenh264dec.c +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/libopenh264dec.c ++++ ffmpeg-7.0/libavcodec/libopenh264dec.c +@@ -19,8 +19,12 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++#include "libopenh264_dlopen.h" ++#else + #include + #include ++#endif + + #include "libavutil/common.h" + #include "libavutil/fifo.h" +@@ -55,6 +59,10 @@ static av_cold int svc_decode_init(AVCod + int log_level; + WelsTraceCallback callback_function; + ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++ if (loadLibOpenH264(avctx)) ++ return AVERROR_DECODER_NOT_FOUND; ++#endif + if (WelsCreateDecoder(&s->decoder)) { + av_log(avctx, AV_LOG_ERROR, "Unable to create decoder\n"); + return AVERROR_UNKNOWN; +Index: ffmpeg-7.0/libavcodec/libopenh264enc.c +=================================================================== +--- ffmpeg-7.0.orig/libavcodec/libopenh264enc.c ++++ ffmpeg-7.0/libavcodec/libopenh264enc.c +@@ -19,8 +19,12 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++#include "libopenh264_dlopen.h" ++#else + #include + #include ++#endif + + #include "libavutil/attributes.h" + #include "libavutil/common.h" +@@ -114,6 +118,10 @@ static av_cold int svc_encode_init(AVCod + WelsTraceCallback callback_function; + AVCPBProperties *props; + ++#ifdef CONFIG_LIBOPENH264_DLOPEN ++ if (loadLibOpenH264(avctx)) ++ return AVERROR_ENCODER_NOT_FOUND; ++#endif + if (WelsCreateSVCEncoder(&s->encoder)) { + av_log(avctx, AV_LOG_ERROR, "Unable to create encoder\n"); + return AVERROR_UNKNOWN; diff --git a/ffmpeg-new-coder-errors.diff b/ffmpeg-new-coder-errors.diff new file mode 100644 index 0000000..9d48442 --- /dev/null +++ b/ffmpeg-new-coder-errors.diff @@ -0,0 +1,23 @@ +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_demux.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ffmpeg-7.0/fftools/ffmpeg_demux.c +=================================================================== +--- ffmpeg-7.0.orig/fftools/ffmpeg_demux.c ++++ ffmpeg-7.0/fftools/ffmpeg_demux.c +@@ -884,7 +884,7 @@ static int ist_use(InputStream *ist, int + + if (decoding_needed && !ist->dec) { + av_log(ist, AV_LOG_ERROR, +- "Decoding requested, but no decoder found for: %s\n", ++ "Decoding was requested, but this build of ffmpeg does not include a \"%s\" decoder\n", + avcodec_get_name(ist->par->codec_id)); + return AVERROR(EINVAL); + } diff --git a/ffmpeg_get_dlopen_headers.sh b/ffmpeg_get_dlopen_headers.sh new file mode 100644 index 0000000..6e0f419 --- /dev/null +++ b/ffmpeg_get_dlopen_headers.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Script to grab headers from existing packages to support dlopen() codec libraries +# Requires: bash, coreutils, curl, bsdtar, dnf, dnf-plugins-core, tar, xz +# Author: Neal Gompa +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +echo "Setting up..." +# Get local directory +LOCALDIR=$(realpath $(dirname $0)) + +# Create working area +TMPDIR=$(mktemp -d /tmp/mmheadersXXXXXX) +mkdir -pv $TMPDIR + +echo "Fetching headers..." +# Get OpenH264 headers +OPENH264_DEVEL=$(dnf -q download --url 'pkgconfig(openh264)') +curl -L $OPENH264_DEVEL | bsdtar -xvf - --include "./usr/include/*" -C $TMPDIR + +echo "Generating tarball..." +# Prep tarball tree +mv -v ${TMPDIR}/usr ${TMPDIR}/ffdlopenhdrs +# Generate tarball +tar --transform "s|^${TMPDIR#?}/||" -cJvf ${LOCALDIR}/ffmpeg-dlopen-headers.tar.xz ${TMPDIR}/ffdlopenhdrs +# Clean up +echo "Cleaning up..." +rm -rfv ${TMPDIR} + +echo "Tarball created: ${LOCALDIR}/ffmpeg-dlopen-headers.tar.xz" diff --git a/work-around-abi-break.patch b/work-around-abi-break.patch new file mode 100644 index 0000000..edb250a --- /dev/null +++ b/work-around-abi-break.patch @@ -0,0 +1,52 @@ +From: Jan Engelhardt +Date: 2020-07-04 23:56:54.411950316 +0200 +References: http://ffmpeg.org/pipermail/ffmpeg-devel/2020-July/265694.html + +User frispete wrote on 2020-6-26 22:13+0000 at +https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-4#comment-1257440 +: """Unfortunately, this version is binary incompatible to 4.2.3 in some +aspects. [...]""" + +Further discussion on the mailing list explored this topic, and +revealed that ELF symbol versioning is lacklusterly implemented in +ffmpeg, which can cause inadvertent mixing of library versions on +openSUSE, and precompiled Linux distributions in general. + +Upstream says "we only add new functions" - which is ok in its own +right. verdefs, if you have them, *must*not* change under any +circumstances, but that is what they broke: the set of symbols +included in the "LIBAVFORMAT_59" verdef changed between 5.0 and 5.1. + +$ abidiff abidiff /usr/lib64/libavformat.so.59.16.100 usr/lib64/libavformat.so.59.27.100 +Functions changes summary: 0 Removed, 0 Changed, 0 Added function +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable +Function symbols changes summary: 0 Removed, 1 Added function symbol not referenced by debug info +Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info + +1 Added function symbol not referenced by debug info: + + [A] avio_vprintf@@LIBAVFORMAT_59 + +] + +Henceforth, we're changing the .v files such that the symbol set in +any one verdef we will ever emit is never modified in future +releases. + +--- + ffbuild/library.mak | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: ffmpeg-5.1/ffbuild/library.mak +=================================================================== +--- ffmpeg-5.1.orig/ffbuild/library.mak ++++ ffmpeg-5.1/ffbuild/library.mak +@@ -59,7 +59,7 @@ $(SUBDIR)lib$(FULLNAME).pc: $(SUBDIR)ver + $$(M) $$(SRC_PATH)/ffbuild/pkgconfig_generate.sh $(NAME) "$(DESC)" + + $(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS) +- $$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@ ++ $$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR).$(lib$(NAME)_VERSION_MINOR)_SUSE/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@ + + $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) + $(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)