aboutsummaryrefslogtreecommitdiff
path: root/multimedia/libxine/files/ffmpeg8-1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/libxine/files/ffmpeg8-1.patch')
-rw-r--r--multimedia/libxine/files/ffmpeg8-1.patch114
1 files changed, 114 insertions, 0 deletions
diff --git a/multimedia/libxine/files/ffmpeg8-1.patch b/multimedia/libxine/files/ffmpeg8-1.patch
new file mode 100644
index 000000000000..be5805b82061
--- /dev/null
+++ b/multimedia/libxine/files/ffmpeg8-1.patch
@@ -0,0 +1,114 @@
+# HG changeset patch
+# User Torsten Jager <t.jager@gmx.de>
+# Date 1757753985 -7200
+# Sat Sep 13 10:59:45 2025 +0200
+# Node ID 9bb3977ea7e2b652742b3cdd200b0a4a72eb48bc
+# Parent 9e326869fe0faf21957642c8c7c5cac9ed4f445c
+FFmpeg compatibilty update.
+
+diff -r 9e326869fe0f -r 9bb3977ea7e2 src/combined/ffmpeg/ff_video_decoder.c
+--- a/src/combined/ffmpeg/ff_video_decoder.c Sat May 31 15:55:00 2025 +0200
++++ b/src/combined/ffmpeg/ff_video_decoder.c Sat Sep 13 10:59:45 2025 +0200
+@@ -60,6 +60,10 @@
+
+ #include "ffmpeg_compat.h"
+
++#if XFF_FRAME_RATE == 2
++# include <avcodec/codec_desc.h>
++#endif
++
+ #if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(59,0,100)
+ # undef HAVE_POSTPROC
+ #endif
+@@ -2289,8 +2293,8 @@
+ }
+
+ /* transfer some more frame settings for deinterlacing */
+- img->progressive_frame = !this->av_frame->interlaced_frame;
+- img->top_field_first = this->av_frame->top_field_first;
++ img->progressive_frame = !XFF_FRAME_IS_INTERLACED (this->av_frame);
++ img->top_field_first = !!XFF_FRAME_IS_TOP_FIELD_FIRST (this->av_frame);
+
+ /* get back reordered pts */
+ img->pts = ff_untag_pts (this, this->av_frame);
+@@ -2370,20 +2374,29 @@
+
+ static int ff_video_step_get (ff_video_decoder_t *this) {
+ /* use externally provided video_step or fall back to stream's time_base otherwise */
+- int step = this->video_step;
++ int step = this->video_step, num_fields;
+ if (step || !this->context->time_base.den)
+ return step;
+
++#if XFF_FRAME_RATE == 1
++ num_fields = this->context->ticks_per_frame;
++#else /* XFF_FRAME_RATE == 2 */
++ {
++ const AVCodecDescriptor *desc = avcodec_descriptor_get (this->context->codec_id);
++ if (desc)
++ num_fields = (desc->props & AV_CODEC_PROP_FIELDS) ? 2 : 1;
++ else
++ num_fields = 2;
++ }
++#endif
+ /* good: 2 * 1001 / 48000. */
+- step = (int64_t)90000 * this->context->ticks_per_frame
+- * this->context->time_base.num / this->context->time_base.den;
++ step = (int64_t)90000 * num_fields * this->context->time_base.num / this->context->time_base.den;
+ if (step >= 90)
+ return step;
+
+ /* bad: 2 * 1 / 60000. seen this once from broken h.264 video usability info (VUI).
+ * VAAPI seems to apply a similar HACK.*/
+- step = (int64_t)90000000 * this->context->ticks_per_frame
+- * this->context->time_base.num / this->context->time_base.den;
++ step = (int64_t)90000000 * num_fields * this->context->time_base.num / this->context->time_base.den;
+ return step;
+ }
+
+@@ -2680,8 +2693,8 @@
+ img->duration = video_step_to_use;
+
+ /* transfer some more frame settings for deinterlacing */
+- img->progressive_frame = !this->av_frame->interlaced_frame;
+- img->top_field_first = this->av_frame->top_field_first;
++ img->progressive_frame = !XFF_FRAME_IS_INTERLACED (this->av_frame);
++ img->top_field_first = !!XFF_FRAME_IS_TOP_FIELD_FIRST (this->av_frame);
+
+ this->skipframes = img->draw(img, this->stream);
+ this->state = STATE_FRAME_SENT;
+@@ -2894,8 +2907,8 @@
+ if (video_step_to_use <= 750)
+ video_step_to_use = 0;
+ img->duration = this->av_frame2->repeat_pict ? video_step_to_use * 3 / 2 : video_step_to_use;
+- img->progressive_frame = !this->av_frame2->interlaced_frame;
+- img->top_field_first = this->av_frame2->top_field_first;
++ img->progressive_frame = !XFF_FRAME_IS_INTERLACED (this->av_frame2);
++ img->top_field_first = !!XFF_FRAME_IS_TOP_FIELD_FIRST (this->av_frame2);
+
+ this->skipframes = img->draw (img, this->stream);
+ if (free_img)
+diff -r 9e326869fe0f -r 9bb3977ea7e2 src/combined/ffmpeg/ffmpeg_compat.h
+--- a/src/combined/ffmpeg/ffmpeg_compat.h Sat May 31 15:55:00 2025 +0200
++++ b/src/combined/ffmpeg/ffmpeg_compat.h Sat Sep 13 10:59:45 2025 +0200
+@@ -319,4 +319,20 @@
+ # error avcodec.h must be included first !
+ #endif /* defined(LIBAVCODEC_VERSION_INT) */
+
++#if LIBAVUTIL_VERSION_INT >= XFF_INT_VERSION(58,7,0)
++# define XFF_FRAME_IS_INTERLACED(_frame) ((_frame)->flags & AV_FRAME_FLAG_INTERLACED)
++# define XFF_FRAME_IS_TOP_FIELD_FIRST(_frame) ((_frame)->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST)
++# define XFF_FRAME_IS_KEY(_frame) ((_frame)->flags & AV_FRAME_FLAG_KEY)
++#else
++# define XFF_FRAME_IS_INTERLACED(_frame) ((_frame)->interlaced_frame)
++# define XFF_FRAME_IS_TOP_FIELD_FIRST(_frame) ((_frame)->top_field_first)
++# define XFF_FRAME_IS_KEY(_frame) ((_frame)->key_frame)
++#endif
++
++#if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(60,0,0)
++# define XFF_FRAME_RATE 2 /* AV_CODEC_PROP_FIELDS */
++#else
++# define XFF_FRAME_RATE 1 /* AVCodecContext.ticks_per_frame */
++#endif
++
+ #endif /* XINE_AVCODEC_COMPAT_H */