Compare commits

..

No commits in common. "rawhide" and "f37" have entirely different histories.
rawhide ... f37

15 changed files with 782 additions and 1137 deletions

2
.gitignore vendored
View File

@ -2,5 +2,3 @@ ffmpeg-*.asc
ffmpeg-*.rpm
ffmpeg-*.tar.xz
/ffmpeg.keyring
/results_*
/*.rpm

View File

@ -1,137 +0,0 @@
From 5176821735c397de2a108cd266a6c6759a5e0ffe Mon Sep 17 00:00:00 2001
From: David Rosca <nowrep@gmail.com>
Date: Wed, 8 May 2024 09:11:11 +0200
Subject: [PATCH 1/2] lavc/vaapi_decode: Make it possible to send multiple
slice params buffers
Reviewed-by: Neal Gompa <ngompa13@gmail.com>
Signed-off-by: David Rosca <nowrep@gmail.com>
Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
(cherry picked from commit fe9d889dcd79ea18d4dfaa39df4ddbd4c8c3b15c)
[modified to drop h264/hevc/vc1 parts stripped in Fedora Linux]
---
libavcodec/vaapi_av1.c | 2 +-
libavcodec/vaapi_decode.c | 3 ++-
libavcodec/vaapi_decode.h | 1 +
libavcodec/vaapi_mjpeg.c | 2 +-
libavcodec/vaapi_mpeg2.c | 2 +-
libavcodec/vaapi_mpeg4.c | 2 +-
libavcodec/vaapi_vp8.c | 2 +-
libavcodec/vaapi_vp9.c | 2 +-
8 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c
index 1f9a6071ba..03771dd3e0 100644
--- a/libavcodec/vaapi_av1.c
+++ b/libavcodec/vaapi_av1.c
@@ -409,7 +409,7 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx,
.tg_end = s->tg_end,
};
- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &slice_param,
+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &slice_param, 1,
sizeof(VASliceParameterBufferAV1),
buffer,
size);
diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
index ceac769c52..9344c21fd2 100644
--- a/libavcodec/vaapi_decode.c
+++ b/libavcodec/vaapi_decode.c
@@ -62,6 +62,7 @@ int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx,
int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx,
VAAPIDecodePicture *pic,
const void *params_data,
+ int nb_params,
size_t params_size,
const void *slice_data,
size_t slice_size)
@@ -90,7 +91,7 @@ int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx,
vas = vaCreateBuffer(ctx->hwctx->display, ctx->va_context,
VASliceParameterBufferType,
- params_size, 1, (void*)params_data,
+ params_size, nb_params, (void*)params_data,
&pic->slice_buffers[index]);
if (vas != VA_STATUS_SUCCESS) {
av_log(avctx, AV_LOG_ERROR, "Failed to create slice "
diff --git a/libavcodec/vaapi_decode.h b/libavcodec/vaapi_decode.h
index 6beda14e52..702171e108 100644
--- a/libavcodec/vaapi_decode.h
+++ b/libavcodec/vaapi_decode.h
@@ -73,6 +73,7 @@ int ff_vaapi_decode_make_param_buffer(AVCodecContext *avctx,
int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx,
VAAPIDecodePicture *pic,
const void *params_data,
+ int nb_params,
size_t params_size,
const void *slice_data,
size_t slice_size);
diff --git a/libavcodec/vaapi_mjpeg.c b/libavcodec/vaapi_mjpeg.c
index 5b8d47bb2a..9557cf5f9b 100644
--- a/libavcodec/vaapi_mjpeg.c
+++ b/libavcodec/vaapi_mjpeg.c
@@ -131,7 +131,7 @@ static int vaapi_mjpeg_decode_slice(AVCodecContext *avctx,
sp.components[i].ac_table_selector = s->ac_index[i];
}
- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, sizeof(sp), buffer, size);
+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, 1, sizeof(sp), buffer, size);
if (err)
goto fail;
diff --git a/libavcodec/vaapi_mpeg2.c b/libavcodec/vaapi_mpeg2.c
index eeb4e87321..171a742c7f 100644
--- a/libavcodec/vaapi_mpeg2.c
+++ b/libavcodec/vaapi_mpeg2.c
@@ -162,7 +162,7 @@ static int vaapi_mpeg2_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
};
err = ff_vaapi_decode_make_slice_buffer(avctx, pic,
- &slice_param, sizeof(slice_param),
+ &slice_param, 1, sizeof(slice_param),
buffer, size);
if (err < 0) {
ff_vaapi_decode_cancel(avctx, pic);
diff --git a/libavcodec/vaapi_mpeg4.c b/libavcodec/vaapi_mpeg4.c
index 363b686e42..612de10cd7 100644
--- a/libavcodec/vaapi_mpeg4.c
+++ b/libavcodec/vaapi_mpeg4.c
@@ -169,7 +169,7 @@ static int vaapi_mpeg4_decode_slice(AVCodecContext *avctx, const uint8_t *buffer
};
err = ff_vaapi_decode_make_slice_buffer(avctx, pic,
- &slice_param, sizeof(slice_param),
+ &slice_param, 1, sizeof(slice_param),
buffer, size);
if (err < 0) {
ff_vaapi_decode_cancel(avctx, pic);
diff --git a/libavcodec/vaapi_vp8.c b/libavcodec/vaapi_vp8.c
index 31137a45bd..66fdde1f39 100644
--- a/libavcodec/vaapi_vp8.c
+++ b/libavcodec/vaapi_vp8.c
@@ -209,7 +209,7 @@ static int vaapi_vp8_decode_slice(AVCodecContext *avctx,
for (i = 0; i < 8; i++)
sp.partition_size[i+1] = s->coeff_partition_size[i];
- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, sizeof(sp), data, data_size);
+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &sp, 1, sizeof(sp), data, data_size);
if (err)
goto fail;
diff --git a/libavcodec/vaapi_vp9.c b/libavcodec/vaapi_vp9.c
index 9dc7d5e72b..ff11022db7 100644
--- a/libavcodec/vaapi_vp9.c
+++ b/libavcodec/vaapi_vp9.c
@@ -158,7 +158,7 @@ static int vaapi_vp9_decode_slice(AVCodecContext *avctx,
}
err = ff_vaapi_decode_make_slice_buffer(avctx, pic,
- &slice_param, sizeof(slice_param),
+ &slice_param, 1, sizeof(slice_param),
buffer, size);
if (err) {
ff_vaapi_decode_cancel(avctx, pic);
--
2.45.1

View File

@ -1,112 +0,0 @@
From 1740980b070897fd147b2d1a5259c9d7957d58a8 Mon Sep 17 00:00:00 2001
From: David Rosca <nowrep@gmail.com>
Date: Wed, 8 May 2024 09:11:13 +0200
Subject: [PATCH 2/2] lavc/vaapi_av1: Avoid sending the same slice buffer
multiple times
When there are multiple tiles in one slice buffer, use multiple slice
params to avoid sending the same slice buffer multiple times and thus
increasing the bitstream size the driver will need to upload to hw.
Reviewed-by: Neal Gompa <ngompa13@gmail.com>
Signed-off-by: David Rosca <nowrep@gmail.com>
Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
(cherry picked from commit d2d911eb9a2fc6eb8d86b3ae025a56c1a2692fba)
---
libavcodec/vaapi_av1.c | 47 +++++++++++++++++++++++++++++-------------
1 file changed, 33 insertions(+), 14 deletions(-)
diff --git a/libavcodec/vaapi_av1.c b/libavcodec/vaapi_av1.c
index 03771dd3e0..ea8dd4d93d 100644
--- a/libavcodec/vaapi_av1.c
+++ b/libavcodec/vaapi_av1.c
@@ -19,6 +19,7 @@
*/
#include "libavutil/frame.h"
+#include "libavutil/mem.h"
#include "hwaccel_internal.h"
#include "vaapi_decode.h"
#include "internal.h"
@@ -42,6 +43,9 @@ typedef struct VAAPIAV1DecContext {
*/
VAAPIAV1FrameRef ref_tab[AV1_NUM_REF_FRAMES];
AVFrame *tmp_frame;
+
+ int nb_slice_params;
+ VASliceParameterBufferAV1 *slice_params;
} VAAPIAV1DecContext;
static VASurfaceID vaapi_av1_surface_id(AV1Frame *vf)
@@ -97,6 +101,8 @@ static int vaapi_av1_decode_uninit(AVCodecContext *avctx)
for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++)
av_frame_free(&ctx->ref_tab[i].frame);
+ av_freep(&ctx->slice_params);
+
return ff_vaapi_decode_uninit(avctx);
}
@@ -393,13 +399,24 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx,
{
const AV1DecContext *s = avctx->priv_data;
VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private;
- VASliceParameterBufferAV1 slice_param;
- int err = 0;
+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data;
+ int err, nb_params;
+
+ nb_params = s->tg_end - s->tg_start + 1;
+ if (ctx->nb_slice_params < nb_params) {
+ ctx->slice_params = av_realloc_array(ctx->slice_params,
+ nb_params,
+ sizeof(*ctx->slice_params));
+ if (!ctx->slice_params) {
+ ctx->nb_slice_params = 0;
+ err = AVERROR(ENOMEM);
+ goto fail;
+ }
+ ctx->nb_slice_params = nb_params;
+ }
for (int i = s->tg_start; i <= s->tg_end; i++) {
- memset(&slice_param, 0, sizeof(VASliceParameterBufferAV1));
-
- slice_param = (VASliceParameterBufferAV1) {
+ ctx->slice_params[i - s->tg_start] = (VASliceParameterBufferAV1) {
.slice_data_size = s->tile_group_info[i].tile_size,
.slice_data_offset = s->tile_group_info[i].tile_offset,
.slice_data_flag = VA_SLICE_DATA_FLAG_ALL,
@@ -408,18 +425,20 @@ static int vaapi_av1_decode_slice(AVCodecContext *avctx,
.tg_start = s->tg_start,
.tg_end = s->tg_end,
};
-
- err = ff_vaapi_decode_make_slice_buffer(avctx, pic, &slice_param, 1,
- sizeof(VASliceParameterBufferAV1),
- buffer,
- size);
- if (err) {
- ff_vaapi_decode_cancel(avctx, pic);
- return err;
- }
}
+ err = ff_vaapi_decode_make_slice_buffer(avctx, pic, ctx->slice_params, nb_params,
+ sizeof(VASliceParameterBufferAV1),
+ buffer,
+ size);
+ if (err)
+ goto fail;
+
return 0;
+
+fail:
+ ff_vaapi_decode_cancel(avctx, pic);
+ return err;
}
const FFHWAccel ff_av1_vaapi_hwaccel = {
--
2.45.1

View File

@ -12,7 +12,7 @@ community or a corporation.
2. Set the `Release` to 0 in the spec file.
3. Set `pkg_suffix` to `%nil`
4. Do a full build locally: `fedpkg mockbuild --with full_build`
5. Run `./ffmpeg_update_free_sources.sh results_ffmpeg/7.0/0.fc40/build.log`
5. Run `./ffmpeg_update_free_sources.sh results_ffmpeg/5.0/0.fc35/build.log`
This will update the `ffmpeg_free_sources` file list.
Note that header files will need to be manually added
to the `ffmpeg_free_sources` file list.

View File

@ -1,4 +1,5 @@
## module name # reason for enablement in ffmpeg (usually there is another package that already got legal review)
aac
aasc
libfdk_aac # fdk-aac-free
ac3
@ -53,7 +54,6 @@ adpcm_thp
adpcm_thp_le
adpcm_vima
adpcm_xa
adpcm_xmd
adpcm_yamaha
adpcm_zork
alac
@ -63,8 +63,6 @@ amrwb
amv
anm
ansi # trivial
anull
apac
ape
apng # animated png
arbc
@ -81,6 +79,7 @@ aura
aura2
av1 # libaom
av1_qsv # libaom
ayuv # trivial
bethsoftvid # trivial
bfi # trivial
bink
@ -91,10 +90,8 @@ bitpacked # trivial
bmp # trivial
bmv_audio
bmv_video
bonk
brender_pix
c93
cbd2_dpcm
ccaption
cdgraphics
cdtoons
@ -149,7 +146,6 @@ flic
flv
fmvc
fourxm
ftr # fdk-aac
g723_1
g729
gdv
@ -161,13 +157,12 @@ gsm_ms
gsm_ms_at
h261
h263
h263_v4l2m2m # hardware
h263_v4l2m2m
h263i
h263p
hap
hca
hcom
hdr
hnm4_video
hq_hqa
hqx
@ -194,8 +189,6 @@ jv
kgv1
kmvc
lagarith
libaribb24 # aribb24
libaribcaption # libaribcaption
libaom # libaom
libaom_av1 # libaom
libcodec2 # codec2
@ -222,11 +215,9 @@ m101
mace3
mace6
mdec
media100
metasound
microdvd
mimic
misc4
mjpeg # mjpegtools
mjpeg_qsv # mjpegtools
mjpegb
@ -245,13 +236,13 @@ mp3on4
mp3on4float
mpc7
mpc8
mpeg1_v4l2m2m
mpeg1video
mpeg1_v4l2m2m
mpeg2video
mpeg2_qsv
mpeg2_v4l2m2m
mpeg2video
mpeg4
mpeg4_v4l2m2m # hardware
mpeg4_v4l2m2m
mpegvideo
mpl2
msa1
@ -336,7 +327,6 @@ qcelp
qdm2
qdmc
qdraw
qoa
qoi
qpeg
qtrle
@ -347,7 +337,6 @@ ra_288
rasc
rawvideo # trivial
realtext
rka
rl2
roq
roq_dpcm
@ -420,7 +409,6 @@ vcr1
vmdaudio
vmdvideo
vmnc
vnull
vorbis # libvorbis
vp3 # libav
vp4 # libav
@ -437,11 +425,7 @@ vp9_qsv # libvpx
vp9_v4l2m2m # libvpx
vplayer
vqa
vqc
wady_dpcm
wavarc
wavpack
wbmp
wcmv
webp # libwebp
webvtt # trivial

View File

@ -22,15 +22,11 @@ adpcm_yamaha
alac
alias_pix
amv
anull
apng # libpng
ass # trivial
asv1
asv2
av1_amf
av1_nvenc
av1_qsv
av1_vaapi
ayuv # trival
bitpacked # trivial
bmp # trivial
cinepak
@ -61,7 +57,6 @@ h264_qsv # hardware
h264_v4l2m2m # hardware
h264_vaapi # hardware
hap
hdr
hevc_amf # hardware
hevc_nvenc # hardware
hevc_qsv # hardware
@ -69,9 +64,9 @@ hevc_v4l2m2m # hardware
hevc_vaapi # hardware
huffyuv # trivial+zlib
ilbc # ilbc
jpeg2000
jpegls
libaom
jpeg2000
libaom # libaom
libaom_av1 # libaom
libcodec2 # codec2
libgsm # libgsm
@ -84,6 +79,7 @@ libopenh264 # openh264_dlopen
libopenjpeg # openjpeg
libopus # opus
librav1e # rav1e
libschroedinger # schroedinger
libspeex # speex
libsvtav1
libtheora # libtheora
@ -102,9 +98,9 @@ mlp
mp2 # twolame
mp2fixed # twolame
mpeg1video
mpeg2video
mpeg2_qsv
mpeg2_vaapi
mpeg2video
mpeg4
mpeg4_v4l2m2m # hardware
msmpeg4v2
@ -183,7 +179,6 @@ v410 # trivial
vc1_qsv # hardware
vc1_v4l2m2m # hardware
vc2 # dirac
vnull
vorbis # libvorbis
vp8_qsv # libvpx
vp8_v4l2m2m # libvpx
@ -191,7 +186,6 @@ vp8_vaapi # libvpx
vp9_qsv # libvpx
vp9_vaapi # libvpx
wavpack
wbmp
webvtt # trivial
wmav1
wmav2

View File

@ -1,27 +1,24 @@
From: Andreas Schneider <asn@cryptomilk.org>
fdk-aac-free-devel is GPL compatible
See https://bugzilla.redhat.com/show_bug.cgi?id=1501522#c112
Index: ffmpeg-7.0/configure
Index: ffmpeg-5.0/configure
===================================================================
--- ffmpeg-7.0.orig/configure 2022-02-09 20:07:49.490888877 +0100
+++ ffmpeg-7.0/configure 2022-02-09 20:08:30.102854308 +0100
@@ -1872,7 +1872,6 @@ EXTERNAL_LIBRARY_GPL_LIST="
--- ffmpeg-5.0.orig/configure 2022-02-09 20:07:49.490888877 +0100
+++ ffmpeg-5.0/configure 2022-02-09 20:08:30.102854308 +0100
@@ -1783,7 +1783,6 @@ EXTERNAL_LIBRARY_GPL_LIST="
EXTERNAL_LIBRARY_NONFREE_LIST="
decklink
- libfdk_aac
libtls
"
@@ -1912,6 +1911,7 @@ EXTERNAL_LIBRARY_LIST="
libcodec2
@@ -1822,6 +1821,7 @@ EXTERNAL_LIBRARY_LIST="
libdav1d
libdc1394
libdrm
+ libfdk_aac
libflite
libfontconfig
libfreetype

View File

@ -1,46 +0,0 @@
From d32aacab65a322b66d6a1b48f6cdb03e42bde0f9 Mon Sep 17 00:00:00 2001
From: Frank Liberato <liberato@chromium.org>
Date: Wed, 7 Jul 2021 19:01:22 -0700
Subject: [PATCH] Add av_stream_get_first_dts for Chromium
---
libavformat/avformat.h | 4 ++++
libavformat/utils.c | 7 +++++++
2 files changed, 11 insertions(+)
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 1916aa2dc5..e6682849fa 100644
--- a/libavformat/avformat.h
+++ b/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
/**
diff --git a/libavformat/utils.c b/libavformat/utils.c
index cf4d68bff9..7d750abf88 100644
--- a/libavformat/utils.c
+++ b/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)
--
2.41.0

View File

@ -2,57 +2,55 @@ From: Jan Engelhardt <jengelh@inai.de>
Edit the default codec selection such that
ffmpeg -i youtube.blah.webm foobar.mkv
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(-)
libavformat/matroskaenc.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
Index: ffmpeg-7.0/libavformat/matroskaenc.c
Index: ffmpeg-5.0/libavformat/matroskaenc.c
===================================================================
--- ffmpeg-7.0.orig/libavformat/matroskaenc.c
+++ ffmpeg-7.0/libavformat/matroskaenc.c
@@ -3540,16 +3540,25 @@ static int mkv_query_codec(enum AVCodecI
--- ffmpeg-5.0.orig/libavformat/matroskaenc.c 2022-01-14 19:45:40.000000000 +0100
+++ ffmpeg-5.0/libavformat/matroskaenc.c 2022-02-04 08:29:14.582130919 +0100
@@ -2887,16 +2887,24 @@ 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",
const AVOutputFormat ff_matroska_muxer = {
.name = "matroska",
.long_name = NULL_IF_CONFIG_SMALL("Matroska"),
.mime_type = "video/x-matroska",
.extensions = "mkv",
.priv_data_size = sizeof(MatroskaMuxContext),
- .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
- .audio_codec = CONFIG_LIBVORBIS_ENCODER ?
- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3,
- .p.video_codec = CONFIG_LIBX264_ENCODER ?
- .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,
+ .audio_codec = PREFAUDIO,
+ .video_codec =
+ CONFIG_LIBVPX_VP9_ENCODER ? AV_CODEC_ID_VP9 : \
+ CONFIG_LIBX264_ENCODER ? AV_CODEC_ID_H264 : \
+ CONFIG_LIBVPX_VP8_ENCODER ? AV_CODEC_ID_VP8 : \
+ CONFIG_MPEG4_ENCODER ? AV_CODEC_ID_MPEG4 : \
+ AV_CODEC_ID_THEORA,
.init = mkv_init,
.deinit = mkv_deinit,
.write_header = mkv_write_header,
@@ -3617,8 +3626,7 @@ const FFOutputFormat ff_matroska_audio_m
.p.mime_type = "audio/x-matroska",
.p.extensions = "mka",
@@ -2954,8 +2962,7 @@ const AVOutputFormat ff_matroska_audio_m
.mime_type = "audio/x-matroska",
.extensions = "mka",
.priv_data_size = sizeof(MatroskaMuxContext),
- .p.audio_codec = CONFIG_LIBVORBIS_ENCODER ?
- .audio_codec = CONFIG_LIBVORBIS_ENCODER ?
- AV_CODEC_ID_VORBIS : AV_CODEC_ID_AC3,
+ .p.audio_codec = PREFAUDIO,
.p.video_codec = AV_CODEC_ID_NONE,
+ .audio_codec = PREFAUDIO,
.video_codec = AV_CODEC_ID_NONE,
.init = mkv_init,
.deinit = mkv_deinit,

View 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

View File

@ -0,0 +1,60 @@
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 a reduced build).
---
fftools/ffmpeg.c | 2 +-
fftools/ffmpeg_filter.c | 4 ++--
fftools/ffmpeg_opt.c | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
Index: ffmpeg-5.0/fftools/ffmpeg.c
===================================================================
--- ffmpeg-5.0.orig/fftools/ffmpeg.c 2022-01-14 19:45:39.000000000 +0100
+++ ffmpeg-5.0/fftools/ffmpeg.c 2022-02-04 08:16:14.606621540 +0100
@@ -2871,7 +2871,7 @@ static int init_input_stream(int ist_ind
if (ist->decoding_needed) {
const AVCodec *codec = ist->dec;
if (!codec) {
- snprintf(error, error_len, "Decoder (codec %s) not found for input stream #%d:%d",
+ snprintf(error, error_len, "This build of ffmpeg does not include a \"%s\" decoder needed for input stream #%d:%d.",
avcodec_get_name(ist->dec_ctx->codec_id), ist->file_index, ist->st->index);
return AVERROR(EINVAL);
}
Index: ffmpeg-5.0/fftools/ffmpeg_filter.c
===================================================================
--- ffmpeg-5.0.orig/fftools/ffmpeg_filter.c 2022-01-14 19:45:39.000000000 +0100
+++ ffmpeg-5.0/fftools/ffmpeg_filter.c 2022-02-04 08:16:14.607621538 +0100
@@ -925,7 +925,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;
}
@@ -1094,7 +1094,7 @@ int configure_filtergraph(FilterGraph *f
if (!ost->enc) {
/* identical to the same check in ffmpeg.c, needed because
complex filter graphs are initialized earlier */
- av_log(NULL, AV_LOG_ERROR, "Encoder (codec %s) not found for output stream #%d:%d\n",
+ av_log(NULL, AV_LOG_ERROR, "This build of ffmpeg does not include a \"%s\" encoder needed for output stream #%d:%d.\n",
avcodec_get_name(ost->st->codecpar->codec_id), ost->file_index, ost->index);
ret = AVERROR(EINVAL);
goto fail;
Index: ffmpeg-5.0/fftools/ffmpeg_opt.c
===================================================================
--- ffmpeg-5.0.orig/fftools/ffmpeg_opt.c 2022-01-14 19:45:39.000000000 +0100
+++ ffmpeg-5.0/fftools/ffmpeg_opt.c 2022-02-04 08:16:14.607621538 +0100
@@ -1406,7 +1406,7 @@ static int choose_encoder(OptionsContext
if (!ost->enc) {
av_log(NULL, AV_LOG_FATAL, "Automatic encoder selection failed for "
"output stream #%d:%d. Default encoder for format %s (codec %s) is "
- "probably disabled. Please choose an encoder manually.\n",
+ "probably disabled or this build of ffmpeg does not include that codec. Please choose an encoder manually.\n",
ost->file_index, ost->index, s->oformat->name,
avcodec_get_name(ost->st->codecpar->codec_id));
return AVERROR_ENCODER_NOT_FOUND;

View File

@ -0,0 +1,32 @@
From: Lynne <dev@lynne.ee>
Date: Sun, 25 Dec 2022 00:03:30 +0000 (+0100)
Subject: hwcontext_vulkan: remove optional encode/decode extensions from the list
X-Git-Url: http://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff_plain/eb0455d64690eed0068e5cb202f72ecdf899837c
hwcontext_vulkan: remove optional encode/decode extensions from the list
They're not currently used, so they don't need to be there.
Vulkan stabilized the decode extensions less than a week ago, and their
name prefixes were changed from EXT to KHR. It's a bit too soon to be
depending on it, so rather than bumping, just remove these for now.
---
diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c
index f1db1c7291..2a9b5f4aac 100644
--- a/libavutil/hwcontext_vulkan.c
+++ b/libavutil/hwcontext_vulkan.c
@@ -358,14 +358,6 @@ static const VulkanOptExtension optional_device_exts[] = {
{ VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_MEMORY },
{ VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME, FF_VK_EXT_EXTERNAL_WIN32_SEM },
#endif
-
- /* Video encoding/decoding */
- { VK_KHR_VIDEO_QUEUE_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
- { VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
- { VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
- { VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
- { VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
- { VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME, FF_VK_EXT_NO_FLAG },
};
/* Converts return values to strings */

View File

@ -1,9 +1,9 @@
# For a complete build enable these two
%bcond upstream_tarball 0
%bcond all_codecs 0
%bcond_with upstream_tarball
%bcond_with all_codecs
# Break dependency cycles by disabling certain optional dependencies.
%bcond bootstrap 0
%bcond_with bootstrap
# If you want to do a build with the upstream source tarball, then set the
# pkg_suffix to %%nil. We can't handle this with a conditional, as srpm
@ -12,81 +12,102 @@
# Fails due to asm issue
%ifarch %{ix86} %{arm}
%bcond lto 0
%bcond_with lto
%else
%bcond lto 1
%bcond_without lto
%endif
%ifarch x86_64
%bcond vpl 1
%bcond vmaf 1
%bcond_without svtav1
%bcond_without mfx
%bcond_without vmaf
%else
%bcond vpl 0
%bcond vmaf 0
%bcond_with svtav1
%bcond_with mfx
%bcond_with vmaf
%endif
%ifarch s390 s390x
%bcond dc1394 0
%bcond_with dc1394
%else
%bcond dc1394 1
%bcond_without dc1394
%endif
%if 0%{?rhel}
# Disable dependencies not available or wanted on RHEL/EPEL
%bcond chromaprint 0
%bcond flite 0
# Disable dependencies not offered in RHEL/EPEL
%bcond_with crystalhd
%bcond_with omxil
%else
# Disable some features because RHEL 9 packages are too old
%if 0%{?rhel} && 0%{?rhel} <= 9
%bcond_with flite
%bcond_with lcms2
%bcond_with placebo
%else
%bcond_without flite
%bcond_without lcms2
%bcond_without placebo
%endif
# crystalhd isn't available on IBM Z
%ifarch s390 s390x
%bcond_with crystalhd
%else
%bcond_without crystalhd
%endif
%bcond_without omxil
%endif
# Break chromaprint dependency cycle (Fedora-only):
# ffmpeg (libavcodec-free) → chromaprint → ffmpeg
%bcond chromaprint %{?_with_bootstrap:0}%{!?_with_bootstrap:1}
%bcond flite 1
%if %{with bootstrap}
%bcond_with chromaprint
%else
%bcond_without chromaprint
%endif
%if 0%{?rhel} && 0%{?rhel} <= 9
# Disable some features because RHEL 9 packages are too old
%bcond lcms2 0
%bcond placebo 0
%else
%bcond lcms2 1
%bcond placebo 1
%endif
%if %{with all_codecs}
%bcond evc 1
%bcond rtmp 1
%bcond vvc 1
%bcond x264 1
%bcond x265 1
%bcond_without rtmp
%bcond_without x264
%bcond_without x265
%else
%bcond evc 0
%bcond rtmp 0
%bcond vvc 0
%bcond x264 0
%bcond x265 0
%bcond_with rtmp
%bcond_with x264
%bcond_with x265
%endif
%if %{without lto}
%global _lto_cflags %{nil}
%endif
%global av_codec_soversion 61
%global av_device_soversion 61
%global av_filter_soversion 10
%global av_format_soversion 61
%global av_util_soversion 59
%global postproc_soversion 58
%global swresample_soversion 5
%global swscale_soversion 8
%if "%{__isa_bits}" == "64"
%global lib64_suffix ()(64bit)
%endif
%global openh264_soversion 7
%global av_codec_soversion 59
%global av_device_soversion 59
%global av_filter_soversion 8
%global av_format_soversion 59
%global av_util_soversion 57
%global postproc_soversion 56
%global swresample_soversion 4
%global swscale_soversion 6
Name: ffmpeg
%global pkg_name %{name}%{?pkg_suffix}
Version: 7.0.2
Release: 8%{?dist}
Version: 5.1.2
Release: 12%{?dist}
Summary: A complete solution to record, convert and stream audio and video
License: GPL-3.0-or-later
License: GPLv3+
URL: https://ffmpeg.org/
Source0: ffmpeg%{?pkg_suffix}-%{version}.tar.xz
Source1: ffmpeg-dlopen-headers.tar.xz
Source2: https://ffmpeg.org/releases/ffmpeg-%{version}.tar.xz.asc
# https://ffmpeg.org/ffmpeg-devel.asc
# gpg2 --import --import-options import-export,import-minimal ffmpeg-devel.asc > ./ffmpeg.keyring
@ -97,21 +118,21 @@ Source21: enable_encoders
# Scripts for generating tarballs
Source90: ffmpeg_update_free_sources.sh
Source91: ffmpeg_gen_free_tarball.sh
Source92: ffmpeg_get_dlopen_headers.sh
Source93: ffmpeg_find_free_source_headers.sh
# Fixes for reduced codec selection on free build
Patch1: ffmpeg-codec-choice.patch
# Better error messages for free build
Patch2: ffmpeg-new-coder-errors.patch
# Allow to build with fdk-aac-free
# See https://bugzilla.redhat.com/show_bug.cgi?id=1501522#c112
Patch2: ffmpeg-allow-fdk-aac-free.patch
# Fixes for Mesa 24.0.6+ / 24.1.4+ VA-API
Patch9: 0001-lavc-vaapi_decode-Make-it-possible-to-send-multiple-.patch
Patch10: 0002-lavc-vaapi_av1-Avoid-sending-the-same-slice-buffer-m.patch
# Add first_dts getter to libavformat for Chromium
# See: https://bugzilla.redhat.com/show_bug.cgi?id=2240127
# Reference: https://crbug.com/1306560
Patch1002: ffmpeg-chromium.patch
Patch3: ffmpeg-allow-fdk-aac-free.patch
# Upstream fix for vulkan-headers 1.3.236.0+
Patch4: ffmpeg-vulkan-headers.patch
# Set up dlopen for openh264
Patch1001: ffmpeg-dlopen-openh264.patch
Requires: libavcodec%{?pkg_suffix}%{_isa} = %{version}-%{release}
Requires: libavdevice%{?pkg_suffix}%{_isa} = %{version}-%{release}
@ -129,11 +150,13 @@ BuildRequires: flite-devel >= 2.2
%endif
BuildRequires: game-music-emu-devel
BuildRequires: gcc
BuildRequires: git-core
BuildRequires: gnupg2
BuildRequires: gsm-devel
BuildRequires: ladspa-devel
BuildRequires: lame-devel
%if %{with crystalhd}
BuildRequires: libcrystalhd-devel
%endif
BuildRequires: libgcrypt-devel
BuildRequires: libmysofa-devel
BuildRequires: libX11-devel
@ -144,13 +167,10 @@ BuildRequires: nasm
BuildRequires: perl(Pod::Man)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(aom)
BuildRequires: pkgconfig(aribb24) >= 1.0.3
BuildRequires: pkgconfig(bzip2)
BuildRequires: pkgconfig(caca)
BuildRequires: pkgconfig(codec2)
BuildRequires: pkgconfig(dav1d)
BuildRequires: pkgconfig(dvdnav)
BuildRequires: pkgconfig(dvdread)
BuildRequires: pkgconfig(ffnvcodec)
BuildRequires: pkgconfig(flac)
BuildRequires: pkgconfig(fontconfig)
@ -159,13 +179,11 @@ BuildRequires: pkgconfig(frei0r)
BuildRequires: pkgconfig(fribidi)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(gnutls)
BuildRequires: pkgconfig(harfbuzz)
BuildRequires: pkgconfig(libilbc)
BuildRequires: pkgconfig(jack)
%if %{with lcms2}
BuildRequires: pkgconfig(lcms2) >= 2.13
%endif
BuildRequires: pkgconfig(libaribcaption) >= 1.1.1
BuildRequires: pkgconfig(libass)
BuildRequires: pkgconfig(libbluray)
BuildRequires: pkgconfig(libbs2b)
@ -177,13 +195,15 @@ BuildRequires: pkgconfig(libchromaprint)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(libjxl) >= 0.7.0
BuildRequires: pkgconfig(libmodplug)
%if %{with omxil}
BuildRequires: pkgconfig(libomxil-bellagio)
%endif
BuildRequires: pkgconfig(libopenjp2)
BuildRequires: pkgconfig(libopenmpt)
%if %{with placebo}
BuildRequires: pkgconfig(libplacebo) >= 4.192.0
%endif
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libqrencode)
BuildRequires: pkgconfig(librabbitmq)
BuildRequires: pkgconfig(librist)
BuildRequires: pkgconfig(librsvg-2.0)
@ -197,14 +217,15 @@ BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(libzmq)
BuildRequires: pkgconfig(lilv-0)
BuildRequires: pkgconfig(lv2)
BuildRequires: pkgconfig(netcdf)
BuildRequires: pkgconfig(ogg)
BuildRequires: pkgconfig(openal)
BuildRequires: pkgconfig(opencore-amrnb)
BuildRequires: pkgconfig(OpenCL)
BuildRequires: pkgconfig(openh264)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(rav1e)
BuildRequires: pkgconfig(rubberband)
BuildRequires: pkgconfig(schroedinger-1.0)
BuildRequires: pkgconfig(sdl2)
BuildRequires: pkgconfig(shaderc) >= 2019.1
BuildRequires: pkgconfig(smbclient)
@ -212,7 +233,6 @@ BuildRequires: pkgconfig(snappy)
BuildRequires: pkgconfig(soxr)
BuildRequires: pkgconfig(speex)
BuildRequires: pkgconfig(srt)
BuildRequires: pkgconfig(SvtAv1Enc) >= 0.9.0
BuildRequires: pkgconfig(tesseract)
BuildRequires: pkgconfig(theora)
BuildRequires: pkgconfig(twolame)
@ -222,7 +242,7 @@ BuildRequires: pkgconfig(vidstab)
BuildRequires: pkgconfig(vorbis)
BuildRequires: pkgconfig(vo-amrwbenc)
BuildRequires: pkgconfig(vpx)
BuildRequires: pkgconfig(vulkan) >= 1.3.255
BuildRequires: pkgconfig(vulkan)
BuildRequires: pkgconfig(wavpack)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-render)
@ -243,12 +263,11 @@ BuildRequires: pkgconfig(libiec61883)
%if %{with rtmp}
BuildRequires: librtmp-devel
%endif
%if %{with vpl}
BuildRequires: pkgconfig(vpl) >= 2.6
%if %{with mfx}
BuildRequires: pkgconfig(libmfx) < 2.0
%endif
%if %{with evc}
BuildRequires: pkgconfig(libxevd)
BuildRequires: pkgconfig(libxeve)
%if %{with svtav1}
BuildRequires: pkgconfig(SvtAv1Enc) >= 0.9.0
%endif
%if %{with x264}
BuildRequires: pkgconfig(x264)
@ -322,9 +341,10 @@ community or a corporation.
Summary: FFmpeg codec library
Requires: libavutil%{?pkg_suffix}%{_isa} = %{version}-%{release}
Requires: libswresample%{?pkg_suffix}%{_isa} = %{version}-%{release}
# We require libopenh264 library, which has a dummy implementation and a real one
# In the event that this is being installed, we want to prefer openh264 if available
Suggests: openh264%{_isa}
# We dlopen() openh264, so weak-depend on it...
## Note, we can do this because openh264 is provided in a default-enabled
## third party repository provided by Cisco.
Recommends: libopenh264.so.%{openh264_soversion}%{?lib64_suffix}
%description -n libavcodec%{?pkg_suffix}
The libavcodec library provides a generic encoding/decoding framework
@ -531,10 +551,10 @@ This subpackage contains the headers for FFmpeg libswscale.
%prep
%if %{with upstream_tarball}
%{gpgverify} --keyring='%{SOURCE3}' --signature='%{SOURCE2}' --data='%{SOURCE0}'
gpgv2 --quiet --keyring %{SOURCE3} %{SOURCE2} %{SOURCE0}
%endif
%autosetup -S git_am
%autosetup -a1 -p1
install -m 0644 %{SOURCE20} enable_decoders
install -m 0644 %{SOURCE21} enable_encoders
# fix -O3 -g in host_cflags
@ -583,8 +603,6 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-vulkan \
--disable-cuda-sdk \
--enable-libaom \
--enable-libaribb24 \
--enable-libaribcaption \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
@ -595,8 +613,7 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
%if %{with dc1394}
--enable-libdc1394 \
%endif
--enable-libdvdnav \
--enable-libdvdread \
--enable-libdrm \
--enable-libfdk-aac \
%if %{with flite}
--enable-libflite \
@ -604,7 +621,6 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libharfbuzz \
--enable-libgme \
--enable-libgsm \
%if %{with dc1394}
@ -616,7 +632,7 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-libmodplug \
--enable-libmp3lame \
--enable-libmysofa \
--enable-libopenh264 \
--enable-libopenh264-dlopen \
--enable-libopenjpeg \
--enable-libopenmpt \
--enable-libopus \
@ -624,14 +640,15 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-libplacebo \
%endif
--enable-libpulse \
--enable-libqrencode \
--enable-librabbitmq \
--enable-librav1e \
--enable-librist \
--enable-librsvg \
--enable-librubberband \
--enable-libsnappy \
%if %{with svtav1}
--enable-libsvtav1 \
%endif
--enable-libsoxr \
--enable-libspeex \
--enable-libssh \
@ -654,8 +671,8 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
%if %{with lto}
--enable-lto \
%endif
%if %{with vpl}
--enable-libvpl \
%if %{with mfx}
--enable-libmfx \
%endif
--enable-lv2 \
--enable-vaapi \
@ -663,10 +680,6 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libvo-amrwbenc \
%if %{with evc}
--enable-libxeve \
--enable-libxevd \
%endif
%if %{with x264}
--enable-libx264 \
%endif
@ -688,7 +701,7 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-hwaccels \
--disable-encoders \
--disable-decoders \
--disable-decoder="h264,hevc,libxevd,vc1,vvc" \
--disable-decoder="h264,hevc,vc1" \
--enable-encoder="$(perl -pe 's{^(\w*).*}{$1,}gs' <enable_encoders)" \
--enable-decoder="$(perl -pe 's{^(\w*).*}{$1,}gs' <enable_decoders)" \
%endif
@ -729,7 +742,7 @@ cat config_components.h
# Paranoia check
%if %{without all_codecs}
# DECODER
for i in H264 HEVC HEVC_RKMPP VC1 VVC; do
for i in H264 HEVC HEVC_RKMPP VC1; do
grep -q "#define CONFIG_${i}_DECODER 0" config_components.h
done
@ -857,161 +870,6 @@ rm -rf %{buildroot}%{_datadir}/%{name}/examples
%{_mandir}/man3/libswscale.3*
%changelog
* Tue Nov 12 2024 Sandro Mani <manisandro@gmail.com> - 7.0.2-8
- Rebuild (tesseract)
* Mon Oct 07 2024 Yaakov Selkowitz <yselkowi@redhat.com> - 7.0.2-7
- Properly enable aribb24/libaribcaption
- Disable VANC dependency as it depends on decklink
* Mon Oct 07 2024 Neal Gompa <ngompa@fedoraproject.org> - 7.0.2-6
- Enable SDI data processing (Kernel Labs VANC) processing
- Enable Japanese DVD subtitles/teletext (aribb24/libaribcaption)
* Mon Oct 07 2024 Yaakov Selkowitz <yselkowi@redhat.com> - 7.0.2-5
- Properly enable noopenh264
* Wed Oct 02 2024 Neal Gompa <ngompa@fedoraproject.org> - 7.0.2-4
- Fix chromaprint bcond
* Wed Sep 25 2024 Michel Lind <salimma@fedoraproject.org> - 7.0.2-3
- Disable omxil completely, it's now retired
- Rebuild for tesseract-5.4.1-3 (soversion change from 5.4.1 to just 5.4)
* Fri Sep 20 2024 Neal Gompa <ngompa@fedoraproject.org> - 7.0.2-2
- Rebuild for newer ffnvcodec
* Fri Sep 06 2024 Neal Gompa <ngompa@fedoraproject.org> - 7.0.2-1
- Rebase to 7.0.2 (rhbz#2273572)
- Drop OpenH264 dlopen headers as we use noopenh264 now
- Use modern bconds
* Sat Aug 24 2024 Fabio Valentini <decathorpe@gmail.com> - 6.1.2-1
- Update to 6.1.2
* Sat Jul 20 2024 Neal Gompa <ngompa@fedoraproject.org> - 6.1.1-19
- Backport fixes for Mesa 24.0.6+ / 21.1.4+ changes for VA-API
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 6.1.1-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Tue Jul 16 2024 Nicolas Chauvet <kwizart@gmail.com> - 6.1.1-17
- Rebuilt for libplacebo/vmaf
* Wed Jun 19 2024 Dominik Mierzejewski <dominik@greysector.net> - 6.1.1-16
- Backport fix for CVE-2023-49528
* Thu Jun 13 2024 Sandro Mani <manisandro@gmail.com> - 6.1.1-15
- Rebuild for tesseract-5.4.1
* Wed May 29 2024 Robert-André Mauchin <zebob.m@gmail.com> - 6.1.1-14
- Rebuild for svt-av1 2.1.0
* Wed May 22 2024 Simone Caronni <negativo17@gmail.com> - 6.1.1-13
- Rebuild for updated VapourSynth.
* Tue Apr 23 2024 Kalev Lember <klember@redhat.com> - 6.1.1-12
- Stop using bundled openh264 headers in F40+ and build against noopenh264
- Backport a fix to build with Vulkan headers >= 1.3.280.0
* Wed Mar 13 2024 Sérgio Basto <sergio@serjux.com> - 6.1.1-11
- Rebuild for jpegxl (libjxl) 0.10.2
* Tue Mar 12 2024 Dominik Mierzejewski <dominik@greysector.net> - 6.1.1-10
- Enable drawtext filter (requires libharfbuzz)
* Wed Feb 14 2024 Sérgio Basto <sergio@serjux.com> - 6.1.1-9
- Rebuild for jpegxl (libjxl) 0.9.2 with soname bump
* Wed Feb 07 2024 Pete Walter <pwalter@fedoraproject.org> - 6.1.1-8
- Rebuild for libvpx 1.14.x
* Sun Jan 28 2024 Sandro Mani <manisandro@gmail.com> - 6.1.1-7
- Rebuild (tesseract)
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 6.1.1-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 6.1.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Jan 15 2024 Neal Gompa <ngompa@fedoraproject.org> - 6.1.1-4
- Add missing files for some of the libraries to fix riscv64 builds
* Fri Jan 12 2024 Fabio Valentini <decathorpe@gmail.com> - 6.1.1-3
- Rebuild for dav1d 1.3.0
* Fri Jan 05 2024 Florian Weimer <fweimer@redhat.com> - 6.1.1-2
- Backport upstream patch to fix C compatibility issues
* Thu Jan 04 2024 Neal Gompa <ngompa@fedoraproject.org> - 6.1.1-1
- Update to 6.1.1
* Thu Jan 04 2024 Neal Gompa <ngompa@fedoraproject.org> - 6.1-1
- Rebase to 6.1
* Wed Dec 06 2023 Kalev Lember <klember@redhat.com> - 6.0.1-2
- Prefer openh264 over noopenh264
- Backport upstream patch to drop openh264 runtime version checks
* Sat Nov 11 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.0.1-1
- Update to 6.0.1
- Add ffmpeg chromium support patch (#2240127)
- Use git to apply patches
* Fri Nov 10 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.0-16
- Add patches to support enhanced RTMP and AV1 encoding through VA-API
- Force AAC decoding through fdk-aac-free
* Sun Oct 08 2023 Dominik Mierzejewski <dominik@greysector.net> - 6.0-15
- Backport upstream patch to fix segfault when passing non-existent filter
option (rfbz#6773)
* Sat Oct 07 2023 Sandro Mani <manisandro@gmail.com> - 6.0-14
- Rebuild (tesseract)
* Fri Sep 29 2023 Nicolas Chauvet <nchauvet@linagora.com> - 6.0-13
- Rebuilt for libplacebo
* Fri Aug 25 2023 Dominik Mierzejewski <dominik@greysector.net> - 6.0-12
- Backport upstream patch to fix assembly with binutils 2.41.
* Sat Aug 05 2023 Richard Shaw <hobbes1069@gmail.com> - 6.0-11
- Rebuild for codec2.
* Fri Jul 28 2023 Dominik Mierzejewski <dominik@greysector.net> - 6.0-10
- Rebuild for libplacebo
* Wed Jul 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 6.0-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Fri Jul 14 2023 Sandro Mani <manisandro@gmail.com> - 6.0-8
- Rebuild (tesseract)
* Sun Jun 18 2023 Sérgio Basto <sergio@serjux.com> - 6.0-7
- Mass rebuild for jpegxl-0.8.1
* Mon Jun 12 2023 Dominik Mierzejewski <dominik@greysector.net> - 6.0-6
- Rebuild for libdc1394
* Thu Apr 06 2023 Adam Williamson <awilliam@redhat.com> - 6.0-5
- Rebuild (tesseract) again
* Mon Apr 03 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.0-4
- Include RISC-V support sources in the tarball
* Mon Apr 03 2023 Sandro Mani <manisandro@gmail.com> - 6.0-3
- Rebuild (tesseract)
* Wed Mar 22 2023 Nicolas Chauvet <kwizart@gmail.com> - 6.0-2
- Backport upstream patches for libplacebo support
* Sun Mar 12 2023 Neal Gompa <ngompa@fedoraproject.org> - 6.0-1
- Rebase to version 6.0
- Enable SVT-AV1 on all architectures
- Use oneVPL for QSV
- Switch to SPDX license identifiers
* Wed Feb 15 2023 Neal Gompa <ngompa@fedoraproject.org> - 5.1.2-12
- Enable support for the RIST protocol through librist

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
SHA512 (ffmpeg-free-7.0.2.tar.xz) = 062ba768efda367b973250895147efb928f954321ab8a8de395da8b167262cea26cefda186a404e0be9f2080e02f436d2b9c8bf9508cbba0f325a31d697f9a8b
SHA512 (ffmpeg-7.0.2.tar.xz.asc) = b41eeb8044754bfcf2cf67a3ed4a4e74194ee6e5f4ed5f03aa03bb68772f6bacd7a1839d8e9740573889230a71d3bc7d52b4625542f4c892e8de8c61deda2c51
SHA512 (ffmpeg-free-5.1.2.tar.xz) = 8dfb1b8a7d60357abbb21b38526ece67efec38cb52c01ed03b540d350ac82576ce68de3294a4cc6f166c36defa3933e2f9d4652b290e167bf8b6f220921e1e50
SHA512 (ffmpeg-5.1.2.tar.xz.asc) = 6afc898e3898a7d34e21f0f0bd0553765a46257332c6ece6226e3e043b842275a8d885b9ccca34bc90a2f008ae5fa14515276d23f921a518a63a47f6504af115
SHA512 (ffmpeg-dlopen-headers.tar.xz) = 97e6986fc2bb9dfa4516135a76b04d27ceb52ff96f0af21a6169919aeefefb4d2e2e24a771959689cdbec385f5d71614ba661223c67c0e94089a6dd823a30099
SHA512 (ffmpeg.keyring) = 9b36506835db36f776b7ddb53ad6fa9e915e6ca2f9c7cfebe8eb45513e1036a985283590a840ca313a111bf35dc3731f68885aaafb1fb7011ec433cc119e5165