Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1f48720efe | ||
|
e88dba6c2e | ||
|
fc1834bfb9 | ||
|
05b4a7f596 | ||
|
bacd9126e2 | ||
|
4558856309 | ||
|
315c057d47 | ||
|
ac9527abbc | ||
|
43b312a619 | ||
|
b22f497ee3 | ||
|
4a975777a0 | ||
|
6485375a82 | ||
|
8fc8302c8d | ||
|
30df5ec749 | ||
|
db2aa192a6 | ||
|
778d088338 |
475
xine-lib-1.2.13-ffmpeg6-compatibility_2.patch
Normal file
475
xine-lib-1.2.13-ffmpeg6-compatibility_2.patch
Normal file
@ -0,0 +1,475 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User Torsten Jager <t.jager@gmx.de>
|
||||||
|
# Date 1715025355 -7200
|
||||||
|
# Mon May 06 21:55:55 2024 +0200
|
||||||
|
# Node ID 1e7b184008860c8be2289c3cefd9dee57f06193a
|
||||||
|
# Parent d1954d852980ddc887a67a9f1a26626909561ff5
|
||||||
|
ffmpeg compatibility update 1.
|
||||||
|
|
||||||
|
diff -r d1954d852980 -r 1e7b18400886 src/combined/ffmpeg/ff_audio_decoder.c
|
||||||
|
--- a/src/combined/ffmpeg/ff_audio_decoder.c Mon Apr 08 13:25:10 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ff_audio_decoder.c Mon May 06 21:55:55 2024 +0200
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (C) 2001-2023 the xine project
|
||||||
|
+ * Copyright (C) 2001-2024 the xine project
|
||||||
|
*
|
||||||
|
* This file is part of xine, a free video player.
|
||||||
|
*
|
||||||
|
@@ -67,6 +67,7 @@
|
||||||
|
|
||||||
|
xine_t *xine;
|
||||||
|
float gain;
|
||||||
|
+ int bitexact;
|
||||||
|
} ff_audio_class_t;
|
||||||
|
|
||||||
|
typedef struct ff_audio_decoder_s {
|
||||||
|
@@ -188,14 +189,25 @@
|
||||||
|
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
|
||||||
|
"ffmpeg_audio_dec: found AAC ADTS syncword after %d bytes\n", i);
|
||||||
|
if (this->buftype == BUF_AUDIO_AAC_LATM) {
|
||||||
|
+ uint8_t *ed = NULL;
|
||||||
|
+ int es = 0;
|
||||||
|
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
|
||||||
|
"ffmpeg_audio_dec: stream says LATM but is ADTS -> switching decoders\n");
|
||||||
|
- if (this->decoder_ok) {
|
||||||
|
- pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
- avcodec_close (this->context);
|
||||||
|
- pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
- this->decoder_ok = 0;
|
||||||
|
+ pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
+ if (this->context) {
|
||||||
|
+ ed = this->context->extradata;
|
||||||
|
+ es = this->context->extradata_size;
|
||||||
|
+ this->context->extradata = NULL;
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
}
|
||||||
|
+ this->decoder_ok = 0;
|
||||||
|
+ this->context = XFF_ALLOC_CONTEXT ();
|
||||||
|
+ if (this->context) {
|
||||||
|
+ this->context->extradata = ed;
|
||||||
|
+ this->context->extradata_size = es;
|
||||||
|
+ }
|
||||||
|
+ pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
this->codec = NULL;
|
||||||
|
ff_audio_open_codec (this, BUF_AUDIO_AAC);
|
||||||
|
}
|
||||||
|
@@ -349,6 +361,11 @@
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (this->class->bitexact)
|
||||||
|
+ this->context->flags |= CODEC_FLAG_BITEXACT;
|
||||||
|
+ else
|
||||||
|
+ this->context->flags &= ~CODEC_FLAG_BITEXACT;
|
||||||
|
+
|
||||||
|
pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
if (XFF_AVCODEC_OPEN (this->context, this->codec) < 0) {
|
||||||
|
pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
@@ -1377,9 +1394,21 @@
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
- avcodec_close (this->context);
|
||||||
|
- if (XFF_AVCODEC_OPEN (this->context, this->codec) < 0)
|
||||||
|
+ {
|
||||||
|
+ uint8_t *ed = this->context->extradata;
|
||||||
|
+ int es = this->context->extradata_size;
|
||||||
|
+ this->context->extradata = NULL;
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
this->decoder_ok = 0;
|
||||||
|
+ this->context = XFF_ALLOC_CONTEXT ();
|
||||||
|
+ if (this->context) {
|
||||||
|
+ this->context->extradata = ed;
|
||||||
|
+ this->context->extradata_size = es;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (XFF_AVCODEC_OPEN (this->context, this->codec) >= 0)
|
||||||
|
+ this->decoder_ok = 1;
|
||||||
|
pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1418,20 +1447,20 @@
|
||||||
|
XFF_FREE_FRAME (this->av_frame);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
- pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
- avcodec_close (this->context);
|
||||||
|
- pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
}
|
||||||
|
+ pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
+ if (this->context) {
|
||||||
|
+ _x_freep (&this->context->extradata);
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
+ }
|
||||||
|
+ pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
|
||||||
|
ff_audio_output_close(this);
|
||||||
|
|
||||||
|
xine_free_aligned (this->buf);
|
||||||
|
xine_free_aligned (this->decode_buffer);
|
||||||
|
|
||||||
|
- _x_freep (&this->context->extradata);
|
||||||
|
- this->context->extradata_size = 0;
|
||||||
|
- XFF_FREE_CONTEXT (this->context);
|
||||||
|
-
|
||||||
|
XFF_PACKET_UNREF (this->avpkt);
|
||||||
|
|
||||||
|
xine_pts_queue_delete (&this->pts_queue);
|
||||||
|
@@ -1513,6 +1542,12 @@
|
||||||
|
free (this);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void ff_bitexact_cb (void *user_data, xine_cfg_entry_t *entry) {
|
||||||
|
+ ff_audio_class_t *class = (ff_audio_class_t *)user_data;
|
||||||
|
+
|
||||||
|
+ class->bitexact = entry->num_value;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void *init_audio_plugin (xine_t *xine, const void *data) {
|
||||||
|
|
||||||
|
ff_audio_class_t *this ;
|
||||||
|
@@ -1540,5 +1575,12 @@
|
||||||
|
10, ff_gain_cb, this)
|
||||||
|
/ (float)20);
|
||||||
|
|
||||||
|
+ this->bitexact = xine->config->register_bool (xine->config,
|
||||||
|
+ "audio.processing.ffmpeg_bitexact", 0,
|
||||||
|
+ _("Let FFmpeg use precise but slower math"),
|
||||||
|
+ _("Get slightly better sound, at the expense of speed.\n"
|
||||||
|
+ "Takes effect with next stream."),
|
||||||
|
+ 10, ff_bitexact_cb, this);
|
||||||
|
+
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
diff -r d1954d852980 -r 1e7b18400886 src/combined/ffmpeg/ff_video_decoder.c
|
||||||
|
--- a/src/combined/ffmpeg/ff_video_decoder.c Mon Apr 08 13:25:10 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ff_video_decoder.c Mon May 06 21:55:55 2024 +0200
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (C) 2001-2022 the xine project
|
||||||
|
+ * Copyright (C) 2001-2024 the xine project
|
||||||
|
*
|
||||||
|
* This file is part of xine, a free video player.
|
||||||
|
*
|
||||||
|
@@ -128,6 +128,7 @@
|
||||||
|
|
||||||
|
int64_t pts;
|
||||||
|
int64_t last_pts;
|
||||||
|
+ int64_t tagged_pts;
|
||||||
|
int video_step;
|
||||||
|
int reported_video_step;
|
||||||
|
uint8_t pts_tag_pass;
|
||||||
|
@@ -551,7 +552,9 @@
|
||||||
|
# ifdef XFF_FRAME_AGE
|
||||||
|
av_frame->age = 1;
|
||||||
|
# endif
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
av_frame->reordered_opaque = context->reordered_opaque;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
ffsf = ffsf_new (this);
|
||||||
|
if (!ffsf)
|
||||||
|
@@ -862,7 +865,9 @@
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/* take over pts for this frame to have it reordered */
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
av_frame->reordered_opaque = context->reordered_opaque;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1142,9 +1147,13 @@
|
||||||
|
if (this->codec->id == CODEC_ID_VC1 &&
|
||||||
|
(!this->bih.biWidth || !this->bih.biHeight)) {
|
||||||
|
/* VC1 codec must be re-opened with correct width and height. */
|
||||||
|
- avcodec_close(this->context);
|
||||||
|
-
|
||||||
|
- if (XFF_AVCODEC_OPEN (this->context, this->codec) < 0) {
|
||||||
|
+ if (this->context) {
|
||||||
|
+ _x_freep (&this->context->extradata);
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
+ }
|
||||||
|
+ this->context = XFF_ALLOC_CONTEXT ();
|
||||||
|
+ if (!(this->context && XFF_AVCODEC_OPEN (this->context, this->codec) >= 0)) {
|
||||||
|
pthread_mutex_unlock(&ffmpeg_lock);
|
||||||
|
xprintf (this->stream->xine, XINE_VERBOSITY_LOG,
|
||||||
|
_("ffmpeg_video_dec: couldn't open decoder (pass 2)\n"));
|
||||||
|
@@ -1211,6 +1220,11 @@
|
||||||
|
/* dont want initial AV_NOPTS_VALUE here */
|
||||||
|
this->context->reordered_opaque = 0;
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+#ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
+ this->context->time_base.num = 1;
|
||||||
|
+ this->context->time_base.den = 90000 << 8;
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_VAAPI
|
||||||
|
@@ -1959,7 +1973,26 @@
|
||||||
|
return (pts * 256) | this->pts_tag_pass;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int64_t ff_untag_pts (ff_video_decoder_t *this, int64_t pts) {
|
||||||
|
+static int64_t ff_untag_pts (ff_video_decoder_t *this, AVFrame *av_frame) {
|
||||||
|
+ int64_t pts;
|
||||||
|
+#if defined(XFF_AVCODEC_FRAME_PTS)
|
||||||
|
+ pts = (av_frame->pts != AV_NOPTS_VALUE) ? av_frame->pts : 0;
|
||||||
|
+# if defined(XFF_AVCODEC_REORDERED_OPAQUE)
|
||||||
|
+ /* paranoia !!! */
|
||||||
|
+ if (pts != av_frame->reordered_opaque) {
|
||||||
|
+ xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
|
||||||
|
+ LOG_MODULE ": WARNING: frame pts %" PRId64 " != reordered_opaque %" PRId64 ".\n",
|
||||||
|
+ pts, av_frame->reordered_opaque);
|
||||||
|
+ pts = av_frame->reordered_opaque;
|
||||||
|
+ }
|
||||||
|
+ av_frame->reordered_opaque = 0;
|
||||||
|
+# endif
|
||||||
|
+#elif defined(XFF_AVCODEC_REORDERED_OPAQUE)
|
||||||
|
+ pts = av_frame->reordered_opaque;
|
||||||
|
+ av_frame->reordered_opaque = 0;
|
||||||
|
+#else
|
||||||
|
+ pts = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
if ((uint8_t)(pts & 0xff) == this->pts_tag_pass) {
|
||||||
|
/* restore sign. */
|
||||||
|
return pts >> 8;
|
||||||
|
@@ -1984,7 +2017,9 @@
|
||||||
|
this->avpkt->data = buf;
|
||||||
|
this->avpkt->size = buf_size;
|
||||||
|
this->avpkt->flags = AV_PKT_FLAG_KEY;
|
||||||
|
-
|
||||||
|
+# ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
+ this->avpkt->pts = this->tagged_pts;
|
||||||
|
+# endif
|
||||||
|
# if XFF_PALETTE == 2 || XFF_PALETTE == 3
|
||||||
|
if (buf && this->palette_changed) {
|
||||||
|
uint8_t *sd = av_packet_new_side_data (this->avpkt, AV_PKT_DATA_PALETTE, 256 * 4);
|
||||||
|
@@ -2094,9 +2129,14 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* apply valid pts to first frame _starting_ thereafter only */
|
||||||
|
- if (this->pts && !this->context->reordered_opaque) {
|
||||||
|
- this->context->reordered_opaque =
|
||||||
|
- this->av_frame->reordered_opaque = ff_tag_pts (this, this->pts);
|
||||||
|
+ if (this->pts && !this->tagged_pts) {
|
||||||
|
+ this->tagged_pts = ff_tag_pts (this, this->pts);
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+ this->context->reordered_opaque = this->av_frame->reordered_opaque = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
+#ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
+ this->av_frame->pts = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
this->pts = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2207,9 +2247,11 @@
|
||||||
|
img->top_field_first = this->av_frame->top_field_first;
|
||||||
|
|
||||||
|
/* get back reordered pts */
|
||||||
|
- img->pts = ff_untag_pts (this, this->av_frame->reordered_opaque);
|
||||||
|
- this->av_frame->reordered_opaque = 0;
|
||||||
|
+ img->pts = ff_untag_pts (this, this->av_frame);
|
||||||
|
+ this->tagged_pts = 0;
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
this->context->reordered_opaque = 0;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (this->av_frame->repeat_pict)
|
||||||
|
img->duration = this->video_step * 3 / 2;
|
||||||
|
@@ -2330,9 +2372,14 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->size == 0) {
|
||||||
|
+ this->tagged_pts = ff_tag_pts (this, this->pts);
|
||||||
|
/* take over pts when we are about to buffer a frame */
|
||||||
|
- this->av_frame->reordered_opaque = ff_tag_pts(this, this->pts);
|
||||||
|
- this->context->reordered_opaque = ff_tag_pts(this, this->pts);
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+ this->av_frame->reordered_opaque = this->context->reordered_opaque = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
+#ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
+ this->av_frame->pts = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
this->pts = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -2405,7 +2452,10 @@
|
||||||
|
need_unref = 1;
|
||||||
|
#endif
|
||||||
|
/* reset consumed pts value */
|
||||||
|
- this->context->reordered_opaque = ff_tag_pts(this, 0);
|
||||||
|
+ this->tagged_pts = ff_tag_pts (this, 0);
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+ this->context->reordered_opaque = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
|
||||||
|
@@ -2439,10 +2489,14 @@
|
||||||
|
ff_check_bufsize(this, this->size);
|
||||||
|
memmove (this->buf, &chunk_buf[offset], this->size);
|
||||||
|
chunk_buf = this->buf;
|
||||||
|
-
|
||||||
|
/* take over pts for next access unit */
|
||||||
|
- this->av_frame->reordered_opaque = ff_tag_pts(this, this->pts);
|
||||||
|
- this->context->reordered_opaque = ff_tag_pts(this, this->pts);
|
||||||
|
+ this->tagged_pts = ff_tag_pts (this, this->pts);
|
||||||
|
+#ifdef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+ this->av_frame->reordered_opaque = this->context->reordered_opaque = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
+#ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
+ this->av_frame->pts = this->tagged_pts;
|
||||||
|
+#endif
|
||||||
|
this->pts = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2559,8 +2613,7 @@
|
||||||
|
ff_convert_frame(this, img, this->av_frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
- img->pts = ff_untag_pts(this, this->av_frame->reordered_opaque);
|
||||||
|
- this->av_frame->reordered_opaque = 0;
|
||||||
|
+ img->pts = ff_untag_pts(this, this->av_frame);
|
||||||
|
|
||||||
|
/* workaround for weird 120fps streams */
|
||||||
|
if( video_step_to_use == 750 ) {
|
||||||
|
@@ -2600,8 +2653,7 @@
|
||||||
|
this->output_format,
|
||||||
|
VO_BOTH_FIELDS|this->frame_flags);
|
||||||
|
/* set PTS to allow early syncing */
|
||||||
|
- img->pts = ff_untag_pts(this, this->av_frame->reordered_opaque);
|
||||||
|
- this->av_frame->reordered_opaque = 0;
|
||||||
|
+ img->pts = ff_untag_pts(this, this->av_frame);
|
||||||
|
|
||||||
|
img->duration = video_step_to_use;
|
||||||
|
|
||||||
|
@@ -2783,7 +2835,7 @@
|
||||||
|
ff_convert_frame (this, img, this->av_frame2);
|
||||||
|
}
|
||||||
|
|
||||||
|
- img->pts = ff_untag_pts (this, this->av_frame2->reordered_opaque);
|
||||||
|
+ img->pts = ff_untag_pts (this, this->av_frame2);
|
||||||
|
|
||||||
|
if (video_step_to_use == 750)
|
||||||
|
video_step_to_use = 0;
|
||||||
|
@@ -2903,7 +2955,9 @@
|
||||||
|
if (this->decoder_ok) {
|
||||||
|
|
||||||
|
pthread_mutex_lock(&ffmpeg_lock);
|
||||||
|
- avcodec_close (this->context);
|
||||||
|
+ _x_freep (&this->context->extradata);
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
pthread_mutex_unlock(&ffmpeg_lock);
|
||||||
|
|
||||||
|
#ifdef ENABLE_DIRECT_RENDERING
|
||||||
|
@@ -2912,16 +2966,15 @@
|
||||||
|
|
||||||
|
this->stream->video_out->close(this->stream->video_out, this->stream);
|
||||||
|
this->decoder_ok = 0;
|
||||||
|
+ } else if (this->context) {
|
||||||
|
+ _x_freep (&this->context->extradata);
|
||||||
|
+ this->context->extradata_size = 0;
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this->slice_offset_table)
|
||||||
|
free (this->slice_offset_table);
|
||||||
|
|
||||||
|
- if (this->context) {
|
||||||
|
- _x_freep (&this->context->extradata);
|
||||||
|
- this->context->extradata_size = 0;
|
||||||
|
- XFF_FREE_CONTEXT (this->context);
|
||||||
|
- }
|
||||||
|
|
||||||
|
#if XFF_VIDEO > 1
|
||||||
|
XFF_PACKET_UNREF (this->avpkt);
|
||||||
|
diff -r d1954d852980 -r 1e7b18400886 src/combined/ffmpeg/ffmpeg_compat.h
|
||||||
|
--- a/src/combined/ffmpeg/ffmpeg_compat.h Mon Apr 08 13:25:10 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ffmpeg_compat.h Mon May 06 21:55:55 2024 +0200
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (C) 2000-2022 the xine project
|
||||||
|
+ * Copyright (C) 2000-2024 the xine project
|
||||||
|
*
|
||||||
|
* This file is part of xine, a unix video player.
|
||||||
|
*
|
||||||
|
@@ -54,9 +54,16 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* reordered_opaque appeared in libavcodec 51.68.0 */
|
||||||
|
-#define XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
-#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(51,68,0)
|
||||||
|
-# undef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+#if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(51,68,0) && LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(60,0,0)
|
||||||
|
+# define XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+#else
|
||||||
|
+# undef XFF_AVCODEC_REORDERED_OPAQUE
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+#if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(58,33,100)
|
||||||
|
+# define XFF_AVCODEC_FRAME_PTS
|
||||||
|
+#else
|
||||||
|
+# undef XFF_AVCODEC_FRAME_PTS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* colorspace and color_range were added before 52.29.0 */
|
||||||
|
@@ -210,9 +217,11 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(55,63,100)
|
||||||
|
-# define XFF_FREE_CONTEXT(pp) do {av_free(pp); pp = NULL;} while (0)
|
||||||
|
+# define XFF_FREE_CONTEXT(pp) do {if (pp) avcodec_close (pp); av_free (pp); pp = NULL;} while (0)
|
||||||
|
+#elif LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(58,33,100)
|
||||||
|
+# define XFF_FREE_CONTEXT(pp) do {if (pp) avcodec_close (pp); avcodec_free_context (&(pp));} while (0)
|
||||||
|
#else
|
||||||
|
-# define XFF_FREE_CONTEXT(pp) avcodec_free_context(&(pp))
|
||||||
|
+# define XFF_FREE_CONTEXT(pp) avcodec_free_context (&(pp))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(54,59,100)
|
||||||
|
@@ -303,4 +312,3 @@
|
||||||
|
#endif /* defined(LIBAVCODEC_VERSION_INT) */
|
||||||
|
|
||||||
|
#endif /* XINE_AVCODEC_COMPAT_H */
|
||||||
|
-
|
||||||
|
diff -r d1954d852980 -r 1e7b18400886 src/dxr3/ffmpeg_encoder.c
|
||||||
|
--- a/src/dxr3/ffmpeg_encoder.c Mon Apr 08 13:25:10 2024 +0200
|
||||||
|
+++ b/src/dxr3/ffmpeg_encoder.c Mon May 06 21:55:55 2024 +0200
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (C) 2000-2022 the xine project
|
||||||
|
+ * Copyright (C) 2000-2024 the xine project
|
||||||
|
*
|
||||||
|
* This file is part of xine, a unix video player.
|
||||||
|
*
|
||||||
|
@@ -127,10 +127,8 @@
|
||||||
|
unsigned char use_quantizer;
|
||||||
|
|
||||||
|
if (this->context) {
|
||||||
|
- avcodec_close(this->context);
|
||||||
|
- free(this->context);
|
||||||
|
+ XFF_FREE_CONTEXT (this->context);
|
||||||
|
free(this->picture);
|
||||||
|
- this->context = NULL;
|
||||||
|
this->picture = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -344,10 +342,8 @@
|
||||||
|
#if XFF_ENCVIDEO > 1
|
||||||
|
XFF_PACKET_UNREF (this->pkt);
|
||||||
|
#endif
|
||||||
|
- avcodec_close(this->context);
|
||||||
|
XFF_FREE_CONTEXT (this->context);
|
||||||
|
free(this->picture);
|
||||||
|
- this->context = NULL;
|
||||||
|
this->picture = NULL;
|
||||||
|
}
|
||||||
|
return 1;
|
318
xine-lib-1.2.13-ffmpeg7-compatibility.patch
Normal file
318
xine-lib-1.2.13-ffmpeg7-compatibility.patch
Normal file
@ -0,0 +1,318 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User Torsten Jager <t.jager@gmx.de>
|
||||||
|
# Date 1715160885 -7200
|
||||||
|
# Wed May 08 11:34:45 2024 +0200
|
||||||
|
# Node ID 73b833e7fe356cd2d9490dda4ebc9bfe16fce958
|
||||||
|
# Parent 1e7b184008860c8be2289c3cefd9dee57f06193a
|
||||||
|
ffmpeg compatibility update 2.
|
||||||
|
|
||||||
|
diff -r 1e7b18400886 -r 73b833e7fe35 src/combined/ffmpeg/ff_audio_decoder.c
|
||||||
|
--- a/src/combined/ffmpeg/ff_audio_decoder.c Mon May 06 21:55:55 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ff_audio_decoder.c Wed May 08 11:34:45 2024 +0200
|
||||||
|
@@ -1393,6 +1393,9 @@
|
||||||
|
XFF_FREE_FRAME (this->av_frame);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
+#if 1
|
||||||
|
+ avcodec_flush_buffers (this->context);
|
||||||
|
+#else
|
||||||
|
pthread_mutex_lock (&ffmpeg_lock);
|
||||||
|
{
|
||||||
|
uint8_t *ed = this->context->extradata;
|
||||||
|
@@ -1410,6 +1413,7 @@
|
||||||
|
if (XFF_AVCODEC_OPEN (this->context, this->codec) >= 0)
|
||||||
|
this->decoder_ok = 1;
|
||||||
|
pthread_mutex_unlock (&ffmpeg_lock);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
ff_audio_reset_parser(this);
|
||||||
|
diff -r 1e7b18400886 -r 73b833e7fe35 src/combined/ffmpeg/ff_video_decoder.c
|
||||||
|
--- a/src/combined/ffmpeg/ff_video_decoder.c Mon May 06 21:55:55 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ff_video_decoder.c Wed May 08 11:34:45 2024 +0200
|
||||||
|
@@ -89,6 +89,11 @@
|
||||||
|
# define ENABLE_EMMS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+#undef XFF_AVCODEC_SLICE_TABLE
|
||||||
|
+#define XFF_AVCODEC_SLICE_TABLE 1
|
||||||
|
+*/
|
||||||
|
+
|
||||||
|
#define VIDEOBUFSIZE (128*1024)
|
||||||
|
#define SLICE_BUFFER_SIZE (1194*1024)
|
||||||
|
|
||||||
|
@@ -148,11 +153,11 @@
|
||||||
|
int bufsize;
|
||||||
|
int size;
|
||||||
|
int skipframes;
|
||||||
|
-
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 1
|
||||||
|
int *slice_offset_table;
|
||||||
|
int slice_offset_size;
|
||||||
|
int slice_offset_pos;
|
||||||
|
-
|
||||||
|
+#endif
|
||||||
|
AVFrame *av_frame;
|
||||||
|
AVFrame *av_frame2;
|
||||||
|
AVCodecContext *context;
|
||||||
|
@@ -238,6 +243,13 @@
|
||||||
|
#if XFF_VIDEO > 1
|
||||||
|
XFF_PACKET_DECL (avpkt);
|
||||||
|
#endif
|
||||||
|
+
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ uint8_t *temp_buf;
|
||||||
|
+ uint32_t temp_size;
|
||||||
|
+ int slice_num;
|
||||||
|
+ uint8_t slice_table[1 + 256 * 8];
|
||||||
|
+#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* import color matrix names */
|
||||||
|
@@ -1783,10 +1795,9 @@
|
||||||
|
this->size += buf->size;
|
||||||
|
|
||||||
|
if (buf->decoder_flags & BUF_FLAG_FRAME_END) {
|
||||||
|
- int codec_type;
|
||||||
|
+ uint32_t codec_type = buf->type & 0xFFFF0000;
|
||||||
|
|
||||||
|
lprintf ("header complete\n");
|
||||||
|
- codec_type = buf->type & 0xFFFF0000;
|
||||||
|
|
||||||
|
if (buf->decoder_flags & BUF_FLAG_STDHEADER) {
|
||||||
|
|
||||||
|
@@ -1912,33 +1923,44 @@
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (buf->decoder_info[1] == BUF_SPECIAL_RV_CHUNK_TABLE) {
|
||||||
|
- /* o dear. Multiple decoding threads use individual contexts.
|
||||||
|
- av_decode_video2 () does only copy the _pointer_ to the offsets,
|
||||||
|
- not the offsets themselves. So we must not overwrite anything
|
||||||
|
- that another thread has not yet read. */
|
||||||
|
- int i, l, total;
|
||||||
|
-
|
||||||
|
- lprintf("BUF_SPECIAL_RV_CHUNK_TABLE\n");
|
||||||
|
- l = buf->decoder_info[2] + 1;
|
||||||
|
-
|
||||||
|
- total = l * this->class->thread_count;
|
||||||
|
- if (total < SLICE_OFFSET_SIZE)
|
||||||
|
- total = SLICE_OFFSET_SIZE;
|
||||||
|
- if (total > this->slice_offset_size) {
|
||||||
|
- this->slice_offset_table = realloc (this->slice_offset_table, total * sizeof (int));
|
||||||
|
- this->slice_offset_size = total;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (this->slice_offset_pos + l > this->slice_offset_size)
|
||||||
|
- this->slice_offset_pos = 0;
|
||||||
|
- this->context->slice_offset = this->slice_offset_table + this->slice_offset_pos;
|
||||||
|
- this->context->slice_count = l;
|
||||||
|
-
|
||||||
|
- lprintf ("slice_count=%d\n", l);
|
||||||
|
- for (i = 0; i < l; i++) {
|
||||||
|
- this->slice_offset_table[this->slice_offset_pos++] =
|
||||||
|
- ((uint32_t *)buf->decoder_info_ptr[2])[(2 * i) + 1];
|
||||||
|
- lprintf("slice_offset[%d]=%d\n", i, this->context->slice_offset[i]);
|
||||||
|
+ {
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 1
|
||||||
|
+ /* o dear. Multiple decoding threads use individual contexts.
|
||||||
|
+ * av_decode_video2 () does only copy the _pointer_ to the offsets,
|
||||||
|
+ * not the offsets themselves. So we must not overwrite anything
|
||||||
|
+ * that another thread has not yet read. */
|
||||||
|
+ int i, l, total;
|
||||||
|
+
|
||||||
|
+ lprintf("BUF_SPECIAL_RV_CHUNK_TABLE\n");
|
||||||
|
+ l = buf->decoder_info[2] + 1;
|
||||||
|
+
|
||||||
|
+ total = l * this->class->thread_count;
|
||||||
|
+ if (total < SLICE_OFFSET_SIZE)
|
||||||
|
+ total = SLICE_OFFSET_SIZE;
|
||||||
|
+ if (total > this->slice_offset_size) {
|
||||||
|
+ this->slice_offset_table = realloc (this->slice_offset_table, total * sizeof (int));
|
||||||
|
+ this->slice_offset_size = total;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (this->slice_offset_pos + l > this->slice_offset_size)
|
||||||
|
+ this->slice_offset_pos = 0;
|
||||||
|
+ this->context->slice_offset = this->slice_offset_table + this->slice_offset_pos;
|
||||||
|
+ this->context->slice_count = l;
|
||||||
|
+
|
||||||
|
+ lprintf ("slice_count=%d\n", l);
|
||||||
|
+ for (i = 0; i < l; i++) {
|
||||||
|
+ this->slice_offset_table[this->slice_offset_pos++] =
|
||||||
|
+ ((uint32_t *)buf->decoder_info_ptr[2])[(2 * i) + 1];
|
||||||
|
+ lprintf("slice_offset[%d]=%d\n", i, this->context->slice_offset[i]);
|
||||||
|
+ }
|
||||||
|
+#elif XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ /* (count-1):1, 1:4, (offs[0]):4, 1:4, (offs[1]:4, ... just in front of the frame bitstream.
|
||||||
|
+ * reverse engineered from ffmpeg/libavcodec/rv34.c. they seem to expect no
|
||||||
|
+ * external use of rv decoders, and did not document this. */
|
||||||
|
+ this->slice_table[0] = buf->decoder_info[2];
|
||||||
|
+ this->slice_num = this->slice_table[0] + 1;
|
||||||
|
+ memcpy (this->slice_table + 1, buf->decoder_info_ptr[2], 8 * this->slice_num);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2004,6 +2026,7 @@
|
||||||
|
|
||||||
|
static int decode_video_wrapper (ff_video_decoder_t *this,
|
||||||
|
AVFrame *av_frame, int *err, void *buf, size_t buf_size) {
|
||||||
|
+ uint32_t tsize = 0;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
#if ENABLE_VAAPI
|
||||||
|
@@ -2013,9 +2036,32 @@
|
||||||
|
}
|
||||||
|
#endif /* ENABLE_VAAPI */
|
||||||
|
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ if ((this->slice_num > 0) && buf) {
|
||||||
|
+ uint32_t nsize;
|
||||||
|
+ tsize = 1 + this->slice_num * 8;
|
||||||
|
+ nsize = tsize + buf_size + AV_INPUT_BUFFER_PADDING_SIZE;
|
||||||
|
+ if (this->temp_size < nsize) {
|
||||||
|
+ nsize = nsize * 3 / 2;
|
||||||
|
+ free (this->temp_buf);
|
||||||
|
+ this->temp_buf = malloc (nsize);
|
||||||
|
+ if (!this->temp_buf)
|
||||||
|
+ nsize = 0;
|
||||||
|
+ this->temp_size = nsize;
|
||||||
|
+ nsize = tsize + buf_size + AV_INPUT_BUFFER_PADDING_SIZE;
|
||||||
|
+ }
|
||||||
|
+ if (this->temp_size >= nsize) {
|
||||||
|
+ memcpy (this->temp_buf, this->slice_table, tsize);
|
||||||
|
+ memcpy (this->temp_buf + tsize, buf, buf_size + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
+ buf = this->temp_buf;
|
||||||
|
+ }
|
||||||
|
+ this->slice_num = 0;
|
||||||
|
+ }
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if XFF_VIDEO > 1
|
||||||
|
this->avpkt->data = buf;
|
||||||
|
- this->avpkt->size = buf_size;
|
||||||
|
+ this->avpkt->size = buf_size + tsize;
|
||||||
|
this->avpkt->flags = AV_PKT_FLAG_KEY;
|
||||||
|
# ifdef XFF_AVCODEC_FRAME_PTS
|
||||||
|
this->avpkt->pts = this->tagged_pts;
|
||||||
|
@@ -2486,7 +2532,6 @@
|
||||||
|
this->size -= len;
|
||||||
|
|
||||||
|
if (this->size > 0) {
|
||||||
|
- ff_check_bufsize(this, this->size);
|
||||||
|
memmove (this->buf, &chunk_buf[offset], this->size);
|
||||||
|
chunk_buf = this->buf;
|
||||||
|
/* take over pts for next access unit */
|
||||||
|
@@ -2615,8 +2660,8 @@
|
||||||
|
|
||||||
|
img->pts = ff_untag_pts(this, this->av_frame);
|
||||||
|
|
||||||
|
- /* workaround for weird 120fps streams */
|
||||||
|
- if( video_step_to_use == 750 ) {
|
||||||
|
+ /* workaround for weird 120fps streams, as well as some rv20 with frame duration 3pts. */
|
||||||
|
+ if (video_step_to_use <= 750) {
|
||||||
|
/* fallback to the VIDEO_PTS_MODE */
|
||||||
|
video_step_to_use = 0;
|
||||||
|
}
|
||||||
|
@@ -2837,7 +2882,7 @@
|
||||||
|
|
||||||
|
img->pts = ff_untag_pts (this, this->av_frame2);
|
||||||
|
|
||||||
|
- if (video_step_to_use == 750)
|
||||||
|
+ 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;
|
||||||
|
@@ -2941,6 +2986,9 @@
|
||||||
|
mpeg_parser_reset(this->mpeg_parser);
|
||||||
|
|
||||||
|
/* this->pts_tag_pass = 0; */
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ this->slice_num = 0;
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ff_dispose (video_decoder_t *this_gen) {
|
||||||
|
@@ -2953,12 +3001,15 @@
|
||||||
|
rgb2yuy2_free (this->rgb2yuy2);
|
||||||
|
|
||||||
|
if (this->decoder_ok) {
|
||||||
|
+ uint8_t *ed;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&ffmpeg_lock);
|
||||||
|
- _x_freep (&this->context->extradata);
|
||||||
|
+ ed = this->context->extradata;
|
||||||
|
+ this->context->extradata = NULL;
|
||||||
|
this->context->extradata_size = 0;
|
||||||
|
XFF_FREE_CONTEXT (this->context);
|
||||||
|
pthread_mutex_unlock(&ffmpeg_lock);
|
||||||
|
+ _x_freep (&ed);
|
||||||
|
|
||||||
|
#ifdef ENABLE_DIRECT_RENDERING
|
||||||
|
ff_free_dr1_frames (this, 1);
|
||||||
|
@@ -2972,9 +3023,11 @@
|
||||||
|
XFF_FREE_CONTEXT (this->context);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (this->slice_offset_table)
|
||||||
|
- free (this->slice_offset_table);
|
||||||
|
-
|
||||||
|
+#if XFF_AVCODEC_SLICE_TABLE == 1
|
||||||
|
+ free (this->slice_offset_table);
|
||||||
|
+#elif XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ free (this->temp_buf);
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#if XFF_VIDEO > 1
|
||||||
|
XFF_PACKET_UNREF (this->avpkt);
|
||||||
|
@@ -3062,21 +3115,25 @@
|
||||||
|
this->decoder_ok = 0;
|
||||||
|
this->aspect_ratio = 0;
|
||||||
|
this->pts_tag_pass = 0;
|
||||||
|
-#ifdef HAVE_POSTPROC
|
||||||
|
+# ifdef HAVE_POSTPROC
|
||||||
|
this->pp_quality = 0;
|
||||||
|
this->our_context = NULL;
|
||||||
|
this->our_mode = NULL;
|
||||||
|
-#endif
|
||||||
|
+# endif
|
||||||
|
this->mpeg_parser = NULL;
|
||||||
|
this->set_stream_info = 0;
|
||||||
|
this->rgb2yuy2 = NULL;
|
||||||
|
-#ifdef ENABLE_VAAPI
|
||||||
|
+# ifdef ENABLE_VAAPI
|
||||||
|
this->accel = NULL;
|
||||||
|
this->accel_img = NULL;
|
||||||
|
-#endif
|
||||||
|
-#if XFF_VIDEO == 3
|
||||||
|
+# endif
|
||||||
|
+# if XFF_VIDEO == 3
|
||||||
|
this->flush_packet_sent = 0;
|
||||||
|
-#endif
|
||||||
|
+# endif
|
||||||
|
+# if XFF_AVCODEC_SLICE_TABLE == 2
|
||||||
|
+ this->temp_size = 0;
|
||||||
|
+ this->temp_buf = NULL;
|
||||||
|
+# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
this->video_decoder.decode_data = ff_decode_data;
|
||||||
|
diff -r 1e7b18400886 -r 73b833e7fe35 src/combined/ffmpeg/ffmpeg_compat.h
|
||||||
|
--- a/src/combined/ffmpeg/ffmpeg_compat.h Mon May 06 21:55:55 2024 +0200
|
||||||
|
+++ b/src/combined/ffmpeg/ffmpeg_compat.h Wed May 08 11:34:45 2024 +0200
|
||||||
|
@@ -139,6 +139,14 @@
|
||||||
|
# define XFF_PALETTE 3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(59,42,100)
|
||||||
|
+/* AVCodecContext.slice_{offset,count} */
|
||||||
|
+# define XFF_AVCODEC_SLICE_TABLE 1
|
||||||
|
+#else
|
||||||
|
+/* inline offset table before the frame. */
|
||||||
|
+# define XFF_AVCODEC_SLICE_TABLE 2
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if LIBAVCODEC_VERSION_INT < XFF_INT_VERSION(59,0,100) /** << revise this */
|
||||||
|
# define XFF_VAAPI 1 /** << libavcodec/vaapi.h */
|
||||||
|
#else
|
116
xine-lib-configure-c99.patch
Normal file
116
xine-lib-configure-c99.patch
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
configure: Add fake prototypes for C99 compatibility
|
||||||
|
|
||||||
|
The xxmc-related configure probes assume that the compiler
|
||||||
|
supports implicit function declarations because it tries to
|
||||||
|
call the functions without including the appropriate headers,
|
||||||
|
for link testing.
|
||||||
|
|
||||||
|
As the headers are not determined yet at this point, use
|
||||||
|
a fake prototype (the same that autoconf uses) to avoid
|
||||||
|
the implicit function declarations.
|
||||||
|
|
||||||
|
This avoids altering the outcome of these checks with future
|
||||||
|
compilers which do not support implicit function declarations.
|
||||||
|
|
||||||
|
Submitted upstream:
|
||||||
|
|
||||||
|
<https://sourceforge.net/p/xine/xine-lib-1.2/merge-requests/2/>
|
||||||
|
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index a4009e857777b5cf..3a83b40efda8fd5d 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -28563,7 +28563,7 @@ $as_echo "" >&6; }
|
||||||
|
LIBS="$XXMC_LIBS $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCPutSlice(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
@@ -28578,7 +28578,7 @@ else
|
||||||
|
LIBS="$XXMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS $DYNAMIC_LD_LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCPutSlice(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
@@ -28616,7 +28616,7 @@ done
|
||||||
|
else
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCCreateContext(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
@@ -28631,7 +28631,7 @@ else
|
||||||
|
LIBS="$XXMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCCreateContext(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
@@ -28675,7 +28675,7 @@ $as_echo "" >&6; }
|
||||||
|
LIBS="$XVMC_LIBS $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCCreateContext(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
@@ -28690,7 +28690,7 @@ else
|
||||||
|
LIBS="$XVMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS $DYNAMIC_LD_LIBS"
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
-
|
||||||
|
+char XvMCCreateContext(void);
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
diff --git a/m4/video_out.m4 b/m4/video_out.m4
|
||||||
|
index 150b477697297c03..8aa1f4a3b9267ff9 100644
|
||||||
|
--- a/m4/video_out.m4
|
||||||
|
+++ b/m4/video_out.m4
|
||||||
|
@@ -496,9 +496,9 @@ AC_DEFUN([XINE_VIDEO_OUT_PLUGINS], [
|
||||||
|
AC_MSG_CHECKING([whether to enable the xxmc plugin with VLD extensions])
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
LIBS="$XXMC_LIBS $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCPutSlice()]])], [have_xxmc=yes],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCPutSlice(void);]], [[XvMCPutSlice()]])], [have_xxmc=yes],
|
||||||
|
[LIBS="$XXMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS $DYNAMIC_LD_LIBS"
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCPutSlice()]])],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCPutSlice(void);]], [[XvMCPutSlice()]])],
|
||||||
|
[have_xxmc=yes XXMC_LIBS="$XXMC_LIBS -lXvMC"])])
|
||||||
|
if test x"$have_xxmc" = x"yes"; then
|
||||||
|
AC_CHECK_HEADERS([X11/extensions/vldXvMC.h],
|
||||||
|
@@ -506,9 +506,9 @@ AC_DEFUN([XINE_VIDEO_OUT_PLUGINS], [
|
||||||
|
AC_DEFINE([HAVE_VLDXVMC], 1, [Define if you have vldXvMC.h])],
|
||||||
|
[have_vldexts=no])
|
||||||
|
else
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCCreateContext()]])], [have_xxmc=yes],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCCreateContext(void);]], [[XvMCCreateContext()]])], [have_xxmc=yes],
|
||||||
|
[LIBS="$XXMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCCreateContext()]])],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCCreateContext(void);]], [[XvMCCreateContext()]])],
|
||||||
|
[have_xxmc=yes XXMC_LIBS="$XXMC_LIBS -lXvMC"])])
|
||||||
|
fi
|
||||||
|
if test x"$have_xxmc" = x"yes"; then
|
||||||
|
@@ -521,9 +521,9 @@ AC_DEFUN([XINE_VIDEO_OUT_PLUGINS], [
|
||||||
|
AC_MSG_CHECKING([whether to enable the xvmc plugin])
|
||||||
|
AC_MSG_RESULT([])
|
||||||
|
LIBS="$XVMC_LIBS $X_LIBS $XV_LIBS $LIBS"
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCCreateContext()]])], [have_xvmc=yes],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCCreateContext(void);]], [[XvMCCreateContext()]])], [have_xvmc=yes],
|
||||||
|
[LIBS="$XVMC_LIBS -lXvMC $X_LIBS $XV_LIBS $LIBS $DYNAMIC_LD_LIBS"
|
||||||
|
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[XvMCCreateContext()]])],
|
||||||
|
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[char XvMCCreateContext(void);]], [[XvMCCreateContext()]])],
|
||||||
|
[have_xvmc=yes XVMC_LIBS="$XVMC_LIBS -lXvMC"])])
|
||||||
|
if test x"$have_xvmc" = x"yes"; then
|
||||||
|
AC_CHECK_HEADERS([X11/extensions/XvMC.h], [], [have_xvmc=no])
|
@ -13,11 +13,6 @@
|
|||||||
%global _without_gcrypt 1
|
%global _without_gcrypt 1
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if 0%{?el9}
|
|
||||||
# RHBZ 2031270
|
|
||||||
%global _without_nfs 1
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||||
# Not permitted in Fedora, ffmpeg covers this anyway
|
# Not permitted in Fedora, ffmpeg covers this anyway
|
||||||
%global _without_faad2 1
|
%global _without_faad2 1
|
||||||
@ -31,13 +26,13 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
#global snapshot 1
|
#global snapshot 1
|
||||||
#global date 20220307
|
%global date 20240508
|
||||||
#global revision 15076
|
%global revision 15289
|
||||||
|
|
||||||
Summary: A multimedia engine
|
Summary: A multimedia engine
|
||||||
Name: xine-lib
|
Name: xine-lib
|
||||||
Version: 1.2.13
|
Version: 1.2.13
|
||||||
Release: 3%{?snapshot:.%{date}hg%{revision}}%{?dist}
|
Release: 17%{?snapshot:.%{date}hg%{revision}}%{?dist}
|
||||||
License: GPL-2.0-or-later
|
License: GPL-2.0-or-later
|
||||||
URL: https://www.xine-project.org/
|
URL: https://www.xine-project.org/
|
||||||
%if ! 0%{?snapshot}
|
%if ! 0%{?snapshot}
|
||||||
@ -51,6 +46,12 @@ Source1: make_xinelib_snapshot.sh
|
|||||||
# ffmpeg6 compatibility
|
# ffmpeg6 compatibility
|
||||||
# See: https://sourceforge.net/p/xine/xine-lib-1.2/ci/771f4ae27e582123ff3500444718fc8f96186d74/
|
# See: https://sourceforge.net/p/xine/xine-lib-1.2/ci/771f4ae27e582123ff3500444718fc8f96186d74/
|
||||||
Patch0: xine-lib-1.2.13-ffmpeg6-compatibility.patch
|
Patch0: xine-lib-1.2.13-ffmpeg6-compatibility.patch
|
||||||
|
#
|
||||||
|
Patch1: xine-lib-configure-c99.patch
|
||||||
|
# See: https://sourceforge.net/p/xine/xine-lib-1.2/ci/1e7b184008860c8be2289c3cefd9dee57f06193a/
|
||||||
|
Patch2: xine-lib-1.2.13-ffmpeg6-compatibility_2.patch
|
||||||
|
# See: https://sourceforge.net/p/xine/xine-lib-1.2/ci/73b833e7fe356cd2d9490dda4ebc9bfe16fce958/
|
||||||
|
Patch3: xine-lib-1.2.13-ffmpeg7-compatibility.patch
|
||||||
|
|
||||||
Provides: xine-lib(plugin-abi) = %{plugin_abi}
|
Provides: xine-lib(plugin-abi) = %{plugin_abi}
|
||||||
Provides: xine-lib(plugin-abi)%{?_isa} = %{plugin_abi}
|
Provides: xine-lib(plugin-abi)%{?_isa} = %{plugin_abi}
|
||||||
@ -72,6 +73,8 @@ BuildRequires: fontconfig-devel
|
|||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: gettext-devel
|
BuildRequires: gettext-devel
|
||||||
BuildRequires: gnutls-devel
|
BuildRequires: gnutls-devel
|
||||||
|
# System lib cannot currently be used
|
||||||
|
#BuildRequires: gsm-devel
|
||||||
BuildRequires: gtk2-devel
|
BuildRequires: gtk2-devel
|
||||||
%{!?_without_imagemagick:BuildRequires: ImageMagick-devel}
|
%{!?_without_imagemagick:BuildRequires: ImageMagick-devel}
|
||||||
%if 0%{?fedora} || 0%{?rhel} >= 9
|
%if 0%{?fedora} || 0%{?rhel} >= 9
|
||||||
@ -107,6 +110,7 @@ BuildRequires: libvorbis-devel
|
|||||||
BuildRequires: libvpx-devel
|
BuildRequires: libvpx-devel
|
||||||
BuildRequires: libX11-devel
|
BuildRequires: libX11-devel
|
||||||
BuildRequires: libxcb-devel
|
BuildRequires: libxcb-devel
|
||||||
|
BuildRequires: libxdg-basedir-devel
|
||||||
BuildRequires: libXext-devel
|
BuildRequires: libXext-devel
|
||||||
BuildRequires: libXinerama-devel
|
BuildRequires: libXinerama-devel
|
||||||
BuildRequires: libXt-devel
|
BuildRequires: libXt-devel
|
||||||
@ -349,6 +353,48 @@ mkdir -p %{buildroot}%{codecdir}
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Sep 23 2024 Fabio Valentini <decathorpe@gmail.com> - 1.2.13-17
|
||||||
|
- Rebuild for ffmpeg 7
|
||||||
|
|
||||||
|
* Sat Jul 20 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.13-16
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
|
||||||
|
|
||||||
|
* Tue Jul 16 2024 Nicolas Chauvet <kwizart@gmail.com> - 1.2.13-15
|
||||||
|
- Rebuilt for libplacebo/vmaf
|
||||||
|
|
||||||
|
* Mon May 20 2024 Xavier Bachelot <xavier@bachelot.org>- 1.2.13-14
|
||||||
|
- Add patches for ffmpeg compatibility
|
||||||
|
|
||||||
|
* Wed Mar 13 2024 Sérgio Basto <sergio@serjux.com> - 1.2.13-13
|
||||||
|
- Rebuild for jpegxl (libjxl) 0.10.2
|
||||||
|
|
||||||
|
* Wed Feb 14 2024 Sérgio Basto <sergio@serjux.com> - 1.2.13-12
|
||||||
|
- Rebuild for jpegxl (libjxl) 0.9.2 with soname bump
|
||||||
|
|
||||||
|
* Thu Feb 08 2024 Pete Walter <pwalter@fedoraproject.org> - 1.2.13-11
|
||||||
|
- Rebuild for libvpx 1.14.x
|
||||||
|
|
||||||
|
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.13-10
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jan 12 2024 Fabio Valentini <decathorpe@gmail.com> - 1.2.13-9
|
||||||
|
- Rebuild for dav1d 1.3.0
|
||||||
|
|
||||||
|
* Tue Sep 26 2023 Xavier Bachelot <xavier@bachelot.org> - 1.2.13-8
|
||||||
|
- Enable nfs support for EL9
|
||||||
|
|
||||||
|
* Sat Jul 22 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.13-7
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Jun 18 2023 Sérgio Basto <sergio@serjux.com> - 1.2.13-6
|
||||||
|
- Mass rebuild for jpegxl-0.8.1
|
||||||
|
|
||||||
|
* Thu Jun 01 2023 Xavier Bachelot <xavier@bachelot.org> - 1.2.13-5
|
||||||
|
- Rebuild for new libnfs
|
||||||
|
|
||||||
|
* Sat Apr 15 2023 Florian Weimer <fweimer@redhat.com> - 1.2.13-4
|
||||||
|
- Port configure script to C99
|
||||||
|
|
||||||
* Sat Mar 18 2023 Xavier Bachelot <xavier@bachelot.org> - 1.2.13-3
|
* Sat Mar 18 2023 Xavier Bachelot <xavier@bachelot.org> - 1.2.13-3
|
||||||
- Enable external libdvdnav for EL9
|
- Enable external libdvdnav for EL9
|
||||||
- Restore specfile compatibility with RPM Fusion for EL7/8
|
- Restore specfile compatibility with RPM Fusion for EL7/8
|
||||||
|
Loading…
Reference in New Issue
Block a user