media-video/gpac: backport fixes for ffmpeg-8

Debated doing a -r2 to ~arch but most of the changes are guarded
behind version checks and the rest seems safe. Not really tested
at runtime though.

Closes: https://bugs.gentoo.org/965045
Signed-off-by: Ionen Wolkens <ionen@gentoo.org>
This commit is contained in:
Ionen Wolkens
2025-10-23 22:30:34 -04:00
parent 50332404f4
commit 7cd6043dc0
2 changed files with 147 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
https://bugs.gentoo.org/965045
https://github.com/gpac/gpac/pull/3317
--- a/src/filters/ff_avf.c
+++ b/src/filters/ff_avf.c
@@ -723,7 +723,11 @@
}
}
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
if (frame->interlaced_frame)
gf_filter_pck_set_interlaced(pck, frame->top_field_first ? 1 : 2);
-
+#else
+ if (frame->flags & AV_FRAME_FLAG_INTERLACED)
+ gf_filter_pck_set_interlaced(pck, frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST ? 1 : 2);
+#endif
gf_filter_pck_set_sap(pck, GF_FILTER_SAP_1);
gf_filter_pck_set_cts(pck, frame->pts * opid->tb_num);
--- a/src/filters/ff_dec.c
+++ b/src/filters/ff_dec.c
@@ -536,6 +536,11 @@
gf_filter_pck_set_seek_flag(dst_pck, GF_FALSE);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
if (frame->interlaced_frame)
gf_filter_pck_set_interlaced(dst_pck, frame->top_field_first ? 2 : 1);
+#else
+ if (frame->flags & AV_FRAME_FLAG_INTERLACED)
+ gf_filter_pck_set_interlaced(dst_pck, frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST ? 2 : 1);
+#endif
gf_filter_pck_send(dst_pck);
--- a/src/filters/ff_dmx.c
+++ b/src/filters/ff_dmx.c
@@ -1256,7 +1256,13 @@
gf_filter_pid_set_property(pid, GF_PROP_PID_MUX_INDEX, &PROP_UINT(i+1));
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
for (j=0; j<(u32) stream->nb_side_data; j++) {
ffdmx_parse_side_data(&stream->side_data[j], pid);
}
+#else
+ for (j=0; j<(u32) stream->codecpar->nb_coded_side_data; j++) {
+ ffdmx_parse_side_data(&stream->codecpar->coded_side_data[j], pid);
+ }
+#endif
if (ctx->demuxer->nb_chapters) {
--- a/src/filters/ff_enc.c
+++ b/src/filters/ff_enc.c
@@ -589,4 +589,5 @@
if (pck) {
ilaced = gf_filter_pck_get_interlaced(pck);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
if (!ilaced) {
ctx->frame->interlaced_frame = 0;
@@ -595,4 +596,16 @@
ctx->frame->top_field_first = (ilaced==2) ? 1 : 0;
}
+#else
+ if (!ilaced) {
+ ctx->frame->flags &= ~AV_FRAME_FLAG_INTERLACED;
+ } else {
+ ctx->frame->flags |= AV_FRAME_FLAG_INTERLACED;
+ if (ilaced==2) {
+ ctx->frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
+ } else {
+ ctx->frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST;
+ }
+ }
+#endif
ctx->frame->pts = ffenc_get_cts(ctx, pck);
ctx->frame->_avf_dur = gf_filter_pck_get_duration(pck);
@@ -707,5 +720,5 @@
ctx->force_reconfig = GF_FALSE;
GF_LOG(GF_LOG_DEBUG, GF_LOG_CODEC, ("[FFEnc] codec flush done, triggering reconfiguration\n"));
- avcodec_close(ctx->encoder);
+ avcodec_free_context(&ctx->encoder);
ctx->encoder = NULL;
ctx->setup_failed = 0;
--- a/src/filters/ff_mx.c
+++ b/src/filters/ff_mx.c
@@ -1331,5 +1331,12 @@
if (data) {
memcpy(data, p->value.uint_list.vals, sizeof(u32)*9);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
av_stream_add_side_data(st->stream, AV_PKT_DATA_DISPLAYMATRIX, data, 32*9);
+#else
+ av_packet_side_data_add(&st->stream->codecpar->coded_side_data,
+ &st->stream->codecpar->nb_coded_side_data,
+ AV_PKT_DATA_DISPLAYMATRIX,
+ data, 32 * 9, 0);
+#endif
}
}
@@ -1341,5 +1348,12 @@
if (data) {
memcpy(data, p->value.data.ptr, p->value.data.size);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
av_stream_add_side_data(st->stream, AV_PKT_DATA_ICC_PROFILE, data, p->value.data.size);
+#else
+ av_packet_side_data_add(&st->stream->codecpar->coded_side_data,
+ &st->stream->codecpar->nb_coded_side_data,
+ AV_PKT_DATA_ICC_PROFILE,
+ data, p->value.data.size, 0);
+#endif
}
}
@@ -1352,5 +1366,12 @@
data->MaxCLL = gf_bs_read_u16(bs);
data->MaxFALL = gf_bs_read_u16(bs);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
av_stream_add_side_data(st->stream, AV_PKT_DATA_CONTENT_LIGHT_LEVEL, (u8*) data, sizeof(AVContentLightMetadata));
+#else
+ av_packet_side_data_add(&st->stream->codecpar->coded_side_data,
+ &st->stream->codecpar->nb_coded_side_data,
+ AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
+ (u8*) data, sizeof(AVContentLightMetadata), 0);
+#endif
}
gf_bs_del(bs);
@@ -1386,5 +1407,12 @@
data->min_luminance.num = gf_bs_read_u32(bs);
data->min_luminance.den = luma_den;
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
av_stream_add_side_data(st->stream, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, (u8*) data, sizeof(AVMasteringDisplayMetadata));
+#else
+ av_packet_side_data_add(&st->stream->codecpar->coded_side_data,
+ &st->stream->codecpar->nb_coded_side_data,
+ AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
+ (u8*) data, sizeof(AVMasteringDisplayMetadata), 0);
+#endif
}
gf_bs_del(bs);
@@ -1404,5 +1432,12 @@
data->bl_present_flag = gf_bs_read_int(bs, 1);
data->dv_bl_signal_compatibility_id = gf_bs_read_int(bs, 4);
+#if (LIBAVFORMAT_VERSION_MAJOR < 62)
av_stream_add_side_data(st->stream, AV_PKT_DATA_DOVI_CONF, (u8*) data, sizeof(Ref_FFAVDoviRecord));
+#else
+ av_packet_side_data_add(&st->stream->codecpar->coded_side_data,
+ &st->stream->codecpar->nb_coded_side_data,
+ AV_PKT_DATA_DOVI_CONF,
+ (u8*) data, sizeof(Ref_FFAVDoviRecord), 0);
+#endif
}
gf_bs_del(bs);

View File

@@ -65,6 +65,7 @@ PATCHES=(
"${FILESDIR}"/${P}-configure-stddef.patch
"${FILESDIR}"/${P}-ffmpeg6.patch
"${FILESDIR}"/${P}-ffmpeg7.patch
"${FILESDIR}"/${P}-ffmpeg8.patch
)
src_prepare() {