Accepting request 1068213 from home:jengelh:branches:multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/1068213 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/ffmpeg-6?expand=0&rev=1
This commit is contained in:
commit
7640806ca7
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -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
|
3
_multibuild
Normal file
3
_multibuild
Normal file
@ -0,0 +1,3 @@
|
||||
<multibuild>
|
||||
<package>ffmpeg-6-mini</package>
|
||||
</multibuild>
|
8
baselibs.conf
Normal file
8
baselibs.conf
Normal file
@ -0,0 +1,8 @@
|
||||
libavcodec60
|
||||
libavdevice60
|
||||
libavfilter9
|
||||
libavformat60
|
||||
libavutil58
|
||||
libpostproc57
|
||||
libswresample4
|
||||
libswscale7
|
107
enable_decoders
Normal file
107
enable_decoders
Normal file
@ -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
|
||||
libcodec2 # codec2
|
||||
libdav1d # av1
|
||||
libgsm # libgsm
|
||||
libopenh264 # libopenh264_dlopen
|
||||
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
|
89
enable_encoders
Normal file
89
enable_encoders
Normal file
@ -0,0 +1,89 @@
|
||||
## 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
|
||||
libopenh264 # libopenh264_dlopen
|
||||
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
|
195
ffmpeg-4.2-dlopen-fdk_aac.patch
Normal file
195
ffmpeg-4.2-dlopen-fdk_aac.patch
Normal file
@ -0,0 +1,195 @@
|
||||
From: Ismail Dönmez <ismail@i10z.com>
|
||||
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-5.1/configure
|
||||
===================================================================
|
||||
--- ffmpeg-5.1.orig/configure
|
||||
+++ ffmpeg-5.1/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]
|
||||
@@ -1787,6 +1788,7 @@ EXTERNAL_LIBRARY_GPL_LIST="
|
||||
EXTERNAL_LIBRARY_NONFREE_LIST="
|
||||
decklink
|
||||
libfdk_aac
|
||||
+ libfdk_aac_dlopen
|
||||
libtls
|
||||
"
|
||||
|
||||
@@ -6544,6 +6546,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.1/libavcodec/dlopen.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ ffmpeg-5.1/libavcodec/dlopen.h
|
||||
@@ -0,0 +1,12 @@
|
||||
+#ifndef LOCALINC_DLOPEN_H
|
||||
+#define LOCALINC_DLOPEN_H
|
||||
+#include <dlfcn.h>
|
||||
+#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.1/libavcodec/libfdk-aacdec.c
|
||||
===================================================================
|
||||
--- ffmpeg-5.1.orig/libavcodec/libfdk-aacdec.c
|
||||
+++ ffmpeg-5.1/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-5.1/libavcodec/libfdk-aacenc.c
|
||||
===================================================================
|
||||
--- ffmpeg-5.1.orig/libavcodec/libfdk-aacenc.c
|
||||
+++ ffmpeg-5.1/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 <fdk-aac/aacdecoder_lib.h>
|
||||
+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->ch_layout.nb_channels)) != AACENC_OK) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unable to open the encoder: %s\n",
|
||||
aac_get_error(err));
|
1
ffmpeg-6-rpmlintrc
Normal file
1
ffmpeg-6-rpmlintrc
Normal file
@ -0,0 +1 @@
|
||||
addFilter("shlib-fixed-dependency")
|
3
ffmpeg-6.0.tar.xz
Normal file
3
ffmpeg-6.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082
|
||||
size 10234012
|
11
ffmpeg-6.0.tar.xz.asc
Normal file
11
ffmpeg-6.0.tar.xz.asc
Normal file
@ -0,0 +1,11 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQFMBAABCAA2FiEE/PmG6hXm4pOlZE8QtDIvBNZ2WNgFAmP9FsUYHGZmbXBlZy1k
|
||||
ZXZlbEBmZm1wZWcub3JnAAoJELQyLwTWdljYLVcIAItlwTpkDPwv8WwoQFPeh4J0
|
||||
ydHN31+6A6KqHwCa8CT8sUH3yILXUh5/4zNFgHsXEdOsnGmxoMmE+jLuz68CKDEF
|
||||
esPwamBGcilEK1MNSQcZ1M/7bn2DMJDyC276Q2wxISNocusUe+1+bPoCw7IbXUON
|
||||
qqXTU0Ale4l88WoTgWQiFX01oTlfPTqmDfl0h6uYftpw49fyrkYK0D5dnsslQht4
|
||||
yhvZ0+8KAO+ahR0YnmI4BeCQvJDcD9JD3bePJ3cIoiH9P3xz7GaiIroxpm5lr3z4
|
||||
gdH8xQkBhZkmCQ0HpPg4Zhv42rvE7qDAZkJcr3x2yodrrrEgBzu5gQ9yjESgdFo=
|
||||
=gTpy
|
||||
-----END PGP SIGNATURE-----
|
13
ffmpeg-6.changes
Normal file
13
ffmpeg-6.changes
Normal file
@ -0,0 +1,13 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Feb 28 13:23:08 UTC 2023 - Jan Engelhardt <jengelh@inai.de>
|
||||
|
||||
- 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
|
30
ffmpeg-6.keyring
Normal file
30
ffmpeg-6.keyring
Normal file
@ -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-----
|
945
ffmpeg-6.spec
Normal file
945
ffmpeg-6.spec
Normal file
@ -0,0 +1,945 @@
|
||||
#
|
||||
# spec file for package ffmpeg-6
|
||||
#
|
||||
# Copyright (c) 2023 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}
|
||||
%if "%{flavor}" != "ffmpeg-6-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 \
|
||||
%preamble_string ffmpeg-private-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
|
||||
%else
|
||||
%bcond_with mysofa
|
||||
%bcond_with vidstab
|
||||
%bcond_with codec2
|
||||
%bcond_with rubberband
|
||||
%bcond_with vulkan
|
||||
%endif
|
||||
|
||||
%define _name ffmpeg
|
||||
%define _major_version 6
|
||||
%define _major_expected 7
|
||||
|
||||
Name: ffmpeg-6
|
||||
Version: 6.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-6-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-6.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
|
||||
|
||||
%if %{with amf_sdk}
|
||||
BuildRequires: AMF-devel
|
||||
%endif
|
||||
BuildRequires: ladspa-devel
|
||||
BuildRequires: libgsm-devel
|
||||
BuildRequires: libmp3lame-devel
|
||||
%if %{with mysofa}
|
||||
BuildRequires: libmysofa-devel
|
||||
%endif
|
||||
BuildRequires: nasm
|
||||
BuildRequires: pkg-config
|
||||
%ifarch x86_64 %x86_64
|
||||
%if 0%{?suse_version} >= 1550
|
||||
BuildRequires: pkgconfig(SvtAv1Enc) >= 0.8.4
|
||||
%endif
|
||||
%endif
|
||||
BuildRequires: pkgconfig(alsa)
|
||||
BuildRequires: pkgconfig(aom)
|
||||
BuildRequires: pkgconfig(bzip2)
|
||||
%if %{with codec2}
|
||||
BuildRequires: pkgconfig(codec2)
|
||||
%endif
|
||||
%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150200
|
||||
BuildRequires: pkgconfig(dav1d)
|
||||
%endif
|
||||
BuildRequires: pkgconfig(ffnvcodec)
|
||||
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
|
||||
BuildRequires: pkgconfig(libopenmpt)
|
||||
BuildRequires: pkgconfig(libpng)
|
||||
BuildRequires: pkgconfig(libpulse)
|
||||
BuildRequires: pkgconfig(libraw1394)
|
||||
BuildRequires: pkgconfig(libssh)
|
||||
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)
|
||||
BuildRequires: pkgconfig(libzmq)
|
||||
BuildRequires: pkgconfig(lilv-0)
|
||||
BuildRequires: pkgconfig(ogg)
|
||||
BuildRequires: pkgconfig(opus)
|
||||
%if 0%{?suse_version} >= 1550
|
||||
BuildRequires: pkgconfig(libjxl)
|
||||
BuildRequires: pkgconfig(librist)
|
||||
%endif
|
||||
%if 0%{?suse_version} > 1500 || 0%{?sle_version} >= 150400
|
||||
BuildRequires: pkgconfig(rav1e)
|
||||
%endif
|
||||
%if %{with rubberband}
|
||||
BuildRequires: pkgconfig(rubberband)
|
||||
%endif
|
||||
BuildRequires: pkgconfig(sdl2)
|
||||
%if %{with smbclient}
|
||||
BuildRequires: pkgconfig(smbclient)
|
||||
%endif
|
||||
BuildRequires: pkgconfig(soxr)
|
||||
BuildRequires: pkgconfig(speex)
|
||||
BuildRequires: pkgconfig(srt)
|
||||
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(shaderc)
|
||||
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 %x86_64
|
||||
BuildRequires: pkgconfig(libmfx)
|
||||
%endif
|
||||
%endif
|
||||
BuildRequires: pkgconfig(zimg)
|
||||
BuildRequires: pkgconfig(zlib)
|
||||
BuildRequires: pkgconfig(zvbi-0.2) >= 0.2.28
|
||||
%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
|
||||
Provides: ffmpeg-tools = %version
|
||||
Obsoletes: ffmpeg-tools < %version
|
||||
Provides: ffmpeg = %version
|
||||
Obsoletes: ffmpeg < %version
|
||||
Requires: libavcodec60 = %version-%release
|
||||
Requires: libavdevice60 = %version-%release
|
||||
Requires: libavfilter9 = %version-%release
|
||||
Requires: libavformat60 = %version-%release
|
||||
Requires: libavutil58 = %version-%release
|
||||
Requires: libpostproc57 = %version-%release
|
||||
Requires: libswresample4 = %version-%release
|
||||
Requires: libswscale7 = %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 libavcodec60
|
||||
Summary: FFmpeg codec library
|
||||
Group: System/Libraries
|
||||
Requires: libavutil58 = %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: libavcodec60(unrestricted)
|
||||
%endif
|
||||
# For mozillas
|
||||
Provides: libavcodec = %version-%release
|
||||
|
||||
%description -n libavcodec60
|
||||
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: libavcodec60 = %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 libavdevice60
|
||||
Summary: FFmpeg device library
|
||||
Group: System/Libraries
|
||||
Requires: libavcodec60 = %version-%release
|
||||
Requires: libavfilter9 = %version-%release
|
||||
Requires: libavformat60 = %version-%release
|
||||
Requires: libavutil58 = %version-%release
|
||||
|
||||
%description -n libavdevice60
|
||||
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: libavdevice60 = %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 libavfilter9
|
||||
Summary: FFmpeg audio and video filtering library
|
||||
Group: System/Libraries
|
||||
Requires: libavcodec60 = %version-%release
|
||||
Requires: libavformat60 = %version-%release
|
||||
Requires: libavutil58 = %version-%release
|
||||
Requires: libpostproc57 = %version-%release
|
||||
Requires: libswresample4 = %version-%release
|
||||
Requires: libswscale7 = %version-%release
|
||||
|
||||
%description -n libavfilter9
|
||||
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: libavfilter9 = %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 libavformat60
|
||||
Summary: FFmpeg's stream format library
|
||||
Group: System/Libraries
|
||||
Requires: libavcodec60 = %version-%release
|
||||
Requires: libavutil58 = %version-%release
|
||||
|
||||
%description -n libavformat60
|
||||
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: libavformat60 = %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 libavutil58
|
||||
Summary: FFmpeg's utility library
|
||||
Group: System/Libraries
|
||||
|
||||
%description -n libavutil58
|
||||
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: libavutil58 = %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 libpostproc57
|
||||
Summary: FFmpeg post-processing library
|
||||
Group: System/Libraries
|
||||
Requires: libavutil58 = %version-%release
|
||||
|
||||
%description -n libpostproc57
|
||||
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: libpostproc57 = %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: libavutil58 = %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 libswscale7
|
||||
Summary: FFmpeg image scaling and colorspace/pixel conversion library
|
||||
Group: System/Libraries
|
||||
Requires: libavutil58 = %version-%release
|
||||
|
||||
%description -n libswscale7
|
||||
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: libswscale7 = %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 -a6 -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-libshaderc --enable-vulkan \
|
||||
%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
|
||||
%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 \
|
||||
%if 0%{?suse_version} >= 1550
|
||||
--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
|
||||
%if 0%{?suse_version} >= 1550
|
||||
--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
|
||||
%ifarch x86_64 %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 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_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
|
||||
|
||||
# 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 libavcodec60 -p /sbin/ldconfig
|
||||
%postun -n libavcodec60 -p /sbin/ldconfig
|
||||
%post -n libavdevice60 -p /sbin/ldconfig
|
||||
%postun -n libavdevice60 -p /sbin/ldconfig
|
||||
%post -n libavfilter9 -p /sbin/ldconfig
|
||||
%postun -n libavfilter9 -p /sbin/ldconfig
|
||||
%post -n libavformat60 -p /sbin/ldconfig
|
||||
%postun -n libavformat60 -p /sbin/ldconfig
|
||||
%post -n libavutil58 -p /sbin/ldconfig
|
||||
%postun -n libavutil58 -p /sbin/ldconfig
|
||||
%post -n libpostproc57 -p /sbin/ldconfig
|
||||
%postun -n libpostproc57 -p /sbin/ldconfig
|
||||
%post -n libswresample4 -p /sbin/ldconfig
|
||||
%postun -n libswresample4 -p /sbin/ldconfig
|
||||
%post -n libswscale7 -p /sbin/ldconfig
|
||||
%postun -n libswscale7 -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%doc Changelog CREDITS README.md
|
||||
%_bindir/*
|
||||
%_mandir/man1/ff*.1*
|
||||
%_datadir/ffmpeg/
|
||||
|
||||
%files -n libavcodec60
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libavcodec.so.*
|
||||
|
||||
%files -n libavdevice60
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libavdevice.so.*
|
||||
|
||||
%files -n libavfilter9
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libavfilter.so.*
|
||||
|
||||
%files -n libavformat60
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libavformat.so.*
|
||||
|
||||
%files -n libavutil58
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libavutil.so.*
|
||||
|
||||
%files -n libpostproc57
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libpostproc.so.*
|
||||
|
||||
%files -n libswresample4
|
||||
%license COPYING.GPLv2 LICENSE.md
|
||||
%_libdir/libswresample.so.*
|
||||
|
||||
%files -n libswscale7
|
||||
%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*
|
||||
|
||||
%files private-devel
|
||||
%_includedir/ffmpeg/private/
|
||||
|
||||
%else # "flavor" == "ffmpeg-6-mini"
|
||||
|
||||
%define _name ffmpeg
|
||||
|
||||
Name: ffmpeg-6-mini
|
||||
Version: 6.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-6-rpmlintrc
|
||||
Source98: http://ffmpeg.org/ffmpeg-devel.asc#/ffmpeg-6.keyring
|
||||
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: 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: libavcodec60
|
||||
Conflicts: libavdevice60
|
||||
Conflicts: libavfilter9
|
||||
Conflicts: libavformat60
|
||||
Conflicts: libavutil58
|
||||
Conflicts: libpostproc57
|
||||
Conflicts: libswresample4
|
||||
Conflicts: libswscale7
|
||||
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 MPEG4 H263 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 # "flavor" == "ffmpeg-6-mini"
|
||||
|
||||
%changelog
|
17
ffmpeg-arm6l.diff
Normal file
17
ffmpeg-arm6l.diff
Normal file
@ -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
|
||||
|
46
ffmpeg-chromium.patch
Normal file
46
ffmpeg-chromium.patch
Normal file
@ -0,0 +1,46 @@
|
||||
commit 95aab0fd83619408995720ce53d7a74790580220
|
||||
author liberato@chromium.org <liberato@chromium.org> Thu Jul 08 02:01:22 2021
|
||||
committer liberato@chromium.org <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-6.0/libavformat/avformat.h
|
||||
===================================================================
|
||||
--- ffmpeg-6.0.orig/libavformat/avformat.h
|
||||
+++ ffmpeg-6.0/libavformat/avformat.h
|
||||
@@ -1019,6 +1019,10 @@ attribute_deprecated
|
||||
int64_t av_stream_get_end_pts(const AVStream *st);
|
||||
#endif
|
||||
|
||||
+// 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-6.0/libavformat/utils.c
|
||||
===================================================================
|
||||
--- ffmpeg-6.0.orig/libavformat/utils.c
|
||||
+++ ffmpeg-6.0/libavformat/utils.c
|
||||
@@ -55,6 +55,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)
|
||||
|
57
ffmpeg-codec-choice.diff
Normal file
57
ffmpeg-codec-choice.diff
Normal file
@ -0,0 +1,57 @@
|
||||
From: Jan Engelhardt <jengelh@inai.de>
|
||||
|
||||
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.0/libavformat/matroskaenc.c
|
||||
===================================================================
|
||||
--- ffmpeg-6.0.orig/libavformat/matroskaenc.c
|
||||
+++ ffmpeg-6.0/libavformat/matroskaenc.c
|
||||
@@ -3321,16 +3321,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,
|
||||
@@ -3388,8 +3397,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,
|
BIN
ffmpeg-dlopen-headers.tar.xz
(Stored with Git LFS)
Normal file
BIN
ffmpeg-dlopen-headers.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
383
ffmpeg-dlopen-openh264.patch
Normal file
383
ffmpeg-dlopen-openh264.patch
Normal file
@ -0,0 +1,383 @@
|
||||
From 4739b0c97b3378bdaf737171777fe9a71a53eff1 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Gompa <ngompa@fedoraproject.org>
|
||||
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 <asn@cryptomilk.org>
|
||||
Co-authored-by: Neal Gompa <ngompa@fedoraproject.org>
|
||||
|
||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
|
||||
Signed-off-by: Neal Gompa <ngompa@fedoraproject.org>
|
||||
---
|
||||
configure | 3 +
|
||||
libavcodec/Makefile | 1 +
|
||||
libavcodec/libopenh264.c | 18 +++-
|
||||
libavcodec/libopenh264_dlopen.c | 147 ++++++++++++++++++++++++++++++++
|
||||
libavcodec/libopenh264_dlopen.h | 58 +++++++++++++
|
||||
libavcodec/libopenh264dec.c | 10 +++
|
||||
libavcodec/libopenh264enc.c | 10 +++
|
||||
7 files changed, 245 insertions(+), 2 deletions(-)
|
||||
create mode 100644 libavcodec/libopenh264_dlopen.c
|
||||
create mode 100644 libavcodec/libopenh264_dlopen.h
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index ba5793b2ff..8855c1a908 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -251,6 +251,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
|
||||
@@ -1844,6 +1845,7 @@ EXTERNAL_LIBRARY_LIST="
|
||||
libmysofa
|
||||
libopencv
|
||||
libopenh264
|
||||
+ libopenh264_dlopen
|
||||
libopenjpeg
|
||||
libopenmpt
|
||||
libopenvino
|
||||
@@ -6596,6 +6598,7 @@ enabled libopencv && { check_headers opencv2/core/core_c.h &&
|
||||
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 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++"
|
||||
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
|
||||
index 457ec58377..08a26fba5f 100644
|
||||
--- a/libavcodec/Makefile
|
||||
+++ b/libavcodec/Makefile
|
||||
@@ -1075,6 +1075,7 @@ OBJS-$(CONFIG_LIBMP3LAME_ENCODER) += libmp3lame.o
|
||||
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_DECODER) += libopenjpegdec.o
|
||||
diff --git a/libavcodec/libopenh264.c b/libavcodec/libopenh264.c
|
||||
index 0f6d28ed88..a124c3fa1e 100644
|
||||
--- a/libavcodec/libopenh264.c
|
||||
+++ b/libavcodec/libopenh264.c
|
||||
@@ -20,8 +20,13 @@
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
+
|
||||
+#ifdef CONFIG_LIBOPENH264_DLOPEN
|
||||
+#include "libopenh264_dlopen.h"
|
||||
+#else
|
||||
#include <wels/codec_api.h>
|
||||
#include <wels/codec_ver.h>
|
||||
+#endif
|
||||
|
||||
#include "libavutil/error.h"
|
||||
#include "libavutil/log.h"
|
||||
@@ -52,8 +57,17 @@ int ff_libopenh264_check_version(void *logctx)
|
||||
// Mingw GCC < 4.7 on x86_32 uses an incorrect/buggy ABI for the WelsGetCodecVersion
|
||||
// function (for functions returning larger structs), thus skip the check in those
|
||||
// configurations.
|
||||
-#if !defined(_WIN32) || !defined(__GNUC__) || !ARCH_X86_32 || AV_GCC_VERSION_AT_LEAST(4, 7)
|
||||
- OpenH264Version libver = WelsGetCodecVersion();
|
||||
+ // Also, for dlopened OpenH264, we should not do the version check. It's too punitive.
|
||||
+#if !defined(_WIN32) || !defined(__GNUC__) || !ARCH_X86_32 || AV_GCC_VERSION_AT_LEAST(4, 7) || !defined(CONFIG_LIBOPENH264_DLOPEN)
|
||||
+ OpenH264Version libver;
|
||||
+
|
||||
+#ifdef CONFIG_LIBOPENH264_DLOPEN
|
||||
+ if (loadLibOpenH264(logctx)) {
|
||||
+ return AVERROR_EXTERNAL;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ libver = WelsGetCodecVersion();
|
||||
if (memcmp(&libver, &g_stCodecVersion, sizeof(libver))) {
|
||||
av_log(logctx, AV_LOG_ERROR, "Incorrect library version loaded\n");
|
||||
return AVERROR(EINVAL);
|
||||
diff --git a/libavcodec/libopenh264_dlopen.c b/libavcodec/libopenh264_dlopen.c
|
||||
new file mode 100644
|
||||
index 0000000000..49ea8ff44f
|
||||
--- /dev/null
|
||||
+++ b/libavcodec/libopenh264_dlopen.c
|
||||
@@ -0,0 +1,147 @@
|
||||
+/*
|
||||
+ * OpenH264 dlopen code
|
||||
+ *
|
||||
+ * Copyright (C) 2022 Andreas Schneider <asn@cryptomilk.org>
|
||||
+ *
|
||||
+ * 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 <dlfcn.h>
|
||||
+
|
||||
+#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;
|
||||
+}
|
||||
diff --git a/libavcodec/libopenh264_dlopen.h b/libavcodec/libopenh264_dlopen.h
|
||||
new file mode 100644
|
||||
index 0000000000..d7d8bb7cad
|
||||
--- /dev/null
|
||||
+++ b/libavcodec/libopenh264_dlopen.h
|
||||
@@ -0,0 +1,58 @@
|
||||
+/*
|
||||
+ * OpenH264 dlopen code
|
||||
+ *
|
||||
+ * Copyright (C) 2022 Andreas Schneider <asn@cryptomilk.org>
|
||||
+ *
|
||||
+ * 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 <wels/codec_api.h>
|
||||
+#include <wels/codec_ver.h>
|
||||
+
|
||||
+#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 */
|
||||
diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c
|
||||
index 007f86b619..57aa3bc1d1 100644
|
||||
--- a/libavcodec/libopenh264dec.c
|
||||
+++ b/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 <wels/codec_api.h>
|
||||
#include <wels/codec_ver.h>
|
||||
+#endif
|
||||
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/fifo.h"
|
||||
@@ -56,6 +60,12 @@ static av_cold int svc_decode_init(AVCodecContext *avctx)
|
||||
int log_level;
|
||||
WelsTraceCallback callback_function;
|
||||
|
||||
+#ifdef CONFIG_LIBOPENH264_DLOPEN
|
||||
+ if (loadLibOpenH264(avctx)) {
|
||||
+ return AVERROR_DECODER_NOT_FOUND;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if ((err = ff_libopenh264_check_version(avctx)) < 0)
|
||||
return AVERROR_DECODER_NOT_FOUND;
|
||||
|
||||
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
|
||||
index db252aace1..75289678da 100644
|
||||
--- a/libavcodec/libopenh264enc.c
|
||||
+++ b/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 <wels/codec_api.h>
|
||||
#include <wels/codec_ver.h>
|
||||
+#endif
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/common.h"
|
||||
@@ -137,6 +141,12 @@ static av_cold int svc_encode_init(AVCodecContext *avctx)
|
||||
WelsTraceCallback callback_function;
|
||||
AVCPBProperties *props;
|
||||
|
||||
+#ifdef CONFIG_LIBOPENH264_DLOPEN
|
||||
+ if (loadLibOpenH264(avctx)) {
|
||||
+ return AVERROR_ENCODER_NOT_FOUND;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if ((err = ff_libopenh264_check_version(avctx)) < 0)
|
||||
return AVERROR_ENCODER_NOT_FOUND;
|
||||
|
||||
--
|
||||
2.36.1
|
||||
|
37
ffmpeg-new-coder-errors.diff
Normal file
37
ffmpeg-new-coder-errors.diff
Normal file
@ -0,0 +1,37 @@
|
||||
From: Jan Engelhardt <jengelh@inai.de>
|
||||
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 | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: ffmpeg-6.0/fftools/ffmpeg.c
|
||||
===================================================================
|
||||
--- ffmpeg-6.0.orig/fftools/ffmpeg.c
|
||||
+++ ffmpeg-6.0/fftools/ffmpeg.c
|
||||
@@ -2797,7 +2797,7 @@ static int init_input_stream(InputStream
|
||||
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-6.0/fftools/ffmpeg_filter.c
|
||||
===================================================================
|
||||
--- ffmpeg-6.0.orig/fftools/ffmpeg_filter.c
|
||||
+++ ffmpeg-6.0/fftools/ffmpeg_filter.c
|
||||
@@ -1064,7 +1064,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;
|
||||
}
|
42
ffmpeg_get_dlopen_headers.sh
Normal file
42
ffmpeg_get_dlopen_headers.sh
Normal file
@ -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 <ngompa@fedoraproject.org>
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
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"
|
52
work-around-abi-break.patch
Normal file
52
work-around-abi-break.patch
Normal file
@ -0,0 +1,52 @@
|
||||
From: Jan Engelhardt <jengelh@inai.de>
|
||||
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)
|
Loading…
Reference in New Issue
Block a user