commit:     7cd6043dc0be451bd447b3b523812ff5b5b58878
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 24 02:30:34 2025 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Fri Oct 24 02:41:47 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7cd6043d

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 <AT> gentoo.org>

 media-video/gpac/files/gpac-2.4.0-ffmpeg8.patch | 146 ++++++++++++++++++++++++
 media-video/gpac/gpac-2.4.0-r1.ebuild           |   1 +
 2 files changed, 147 insertions(+)

diff --git a/media-video/gpac/files/gpac-2.4.0-ffmpeg8.patch 
b/media-video/gpac/files/gpac-2.4.0-ffmpeg8.patch
new file mode 100644
index 000000000000..a01049fd382e
--- /dev/null
+++ b/media-video/gpac/files/gpac-2.4.0-ffmpeg8.patch
@@ -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);

diff --git a/media-video/gpac/gpac-2.4.0-r1.ebuild 
b/media-video/gpac/gpac-2.4.0-r1.ebuild
index a965a7588604..aa90461ee82d 100644
--- a/media-video/gpac/gpac-2.4.0-r1.ebuild
+++ b/media-video/gpac/gpac-2.4.0-r1.ebuild
@@ -65,6 +65,7 @@ PATCHES=(
        "${FILESDIR}"/${P}-configure-stddef.patch
        "${FILESDIR}"/${P}-ffmpeg6.patch
        "${FILESDIR}"/${P}-ffmpeg7.patch
+       "${FILESDIR}"/${P}-ffmpeg8.patch
 )
 
 src_prepare() {

Reply via email to