Compare commits

..

14 commits

Author SHA1 Message Date
Till Maas
2f3a2dac2a 2016-11-20: Retired because it depends on directfb, which was
retired, because it was orphaned for more than six weeks.
2016-11-20 11:28:34 +01:00
Rex Dieter
a087fa06f7 disable directfb support (orphaned/retired in epel-6) 2015-10-26 09:28:26 -05:00
Rex Dieter
fa98a27d72 rebuild (ImageMagick) 2015-07-30 13:36:41 -05:00
Rex Dieter
e4448964c6 Merge branch 'f19' into el6
Conflicts:
	.gitignore
	sources
	xine-lib-mk-autotools-patch.sh
	xine-lib.spec
2014-08-26 15:26:01 -05:00
Rex Dieter
da58f27df9 1.1.21-10
- add conditionals to support el5/el6, fix/cleanup other conditionals
- omit libmodplug support (for now, FTBFS)
2014-08-26 14:49:56 -05:00
Fedora Release Engineering
53f040ddbc dist-git conversion 2010-07-29 13:23:57 +00:00
Rex Dieter
08481795c6 more el-6 fixes 2010-06-21 18:15:18 +00:00
Rex Dieter
c0776ed69d a few more el-6 fixes 2010-06-21 17:24:30 +00:00
Rex Dieter
e79635e8df fix for no libv4l 2010-06-21 15:35:39 +00:00
Rex Dieter
d1fcff8658 no libXvMC on el6/ppc64 2010-06-21 15:19:13 +00:00
Rex Dieter
eb97b605e4 * Sun Mar 07 2010 Rex Dieter <rdieter@fedoraproject.org> - 1.1.18.1-1
- xine-lib-1.1.18.1
2010-06-21 12:32:45 +00:00
Dennis Gilmore
595aaf6d2c Initialize branch EL-6 for xine-lib 2010-05-08 02:29:15 +00:00
Rex Dieter
1622a9369f * Sun Nov 29 2009 Rex Dieter <rdieter@fedoraproject.org> - 1.1.16.3-5
- move -pulseaudio into main pkg (f12+)
- update URL
2009-11-30 14:10:33 +00:00
Bill Nottingham
727d12ce69 Fix typo that causes a failure to update the common directory. (releng #2781) 2009-11-26 01:33:33 +00:00
13 changed files with 3 additions and 2632 deletions

7
.gitignore vendored
View file

@ -1,7 +0,0 @@
xine-lib-1.1.19-autotools.patch.bz2
xine-lib-1.1.19-pruned.tar.bz2
/xine-lib-1.1.20-pruned.tar.xz
/xine-lib-1.1.20.1-pruned.tar.xz
/xine-lib-1.1.21-pruned.tar.xz
/xine-lib-1.2.12.tar.xz
/xine-lib-1.2.13.tar.xz

3
dead.package Normal file
View file

@ -0,0 +1,3 @@
2016-11-20: Retired because it depends on directfb, which was
retired, because it was orphaned for more than six weeks.

View file

@ -1,20 +0,0 @@
#!/bin/bash
# This script is intended to make a xine-lib snapshot.
# If no argument is provided, it will make a snapshot of HEAD.
# If the svn revision is provided as an argument, it will make a snapshot of
# this revision.
TMPDIR=$(mktemp -d)
pushd "$TMPDIR" || exit
echo -n "Cloning xine-lib-1.2 "
[ -n "$1" ] && echo "revision $1" || echo "HEAD"
[ -n "$1" ] && OPT="-u $1 " || OPT=""
hg clone $OPT http://hg.code.sf.net/p/xine/xine-lib-1.2 xine-lib-1.2
cd xine-lib-1.2 || exit
autoreconf -vif
./configure
make dist
popd || exit
cp -p "$TMPDIR"/xine-lib-1.2/xine-lib-1.2*.tar.xz .
rm -rf "$TMPDIR"

View file

@ -1 +0,0 @@
SHA512 (xine-lib-1.2.13.tar.xz) = 088a446dd962c3cef621b56edd48fa2e1b47566108b4097d74899a9e5316a1f205993041d3070f45b706f168837579811e5e98c7e52ec278c683379407084bc4

View file

@ -1,196 +0,0 @@
# HG changeset patch
# User Torsten Jager <t.jager@gmx.de>
# Date 1674929040 -3600
# Sat Jan 28 19:04:00 2023 +0100
# Node ID 771f4ae27e582123ff3500444718fc8f96186d74
# Parent 250f1c09f4244c3e7ca7d414410c57bd387792c3
ffmpeg compatibility update.
diff -r 250f1c09f424 -r 771f4ae27e58 src/combined/ffmpeg/demux_avformat.c
--- a/src/combined/ffmpeg/demux_avformat.c Wed Jan 25 17:03:55 2023 +0100
+++ b/src/combined/ffmpeg/demux_avformat.c Sat Jan 28 19:04:00 2023 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2022 the xine project
+ * Copyright (C) 2013-2023 the xine project
* Copyright (C) 2013-2020 Petri Hintukainen <phintuka@users.sourceforge.net>
*
* This file is part of xine, a free video player.
@@ -423,8 +423,13 @@
}
#ifdef XFF_CODECPAR
+# if XFF_AUDIO_CHANNEL_LAYOUT < 2
if (st->codecpar && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codecpar->sample_rate != 0 && st->codecpar->channels != 0)
+# else
+ if (st->codecpar && st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
+ st->codecpar->sample_rate != 0 && st->codecpar->ch_layout.nb_channels != 0)
+# endif
#else
if (st->codec && st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codec->sample_rate != 0 && st->codec->channels != 0)
@@ -501,7 +506,11 @@
buf->size = extradata_size + sizeof(xine_waveformatex);
buf->decoder_info[1] = ctx->sample_rate;
buf->decoder_info[2] = ctx->bits_per_coded_sample;
+#if XFF_AUDIO_CHANNEL_LAYOUT < 2
buf->decoder_info[3] = ctx->channels;
+#else
+ buf->decoder_info[3] = ctx->ch_layout.nb_channels;
+#endif
buf->decoder_flags = BUF_FLAG_HEADER | BUF_FLAG_STDHEADER | BUF_FLAG_FRAME_END;
this->stream->audio_fifo->put (this->stream->audio_fifo, buf);
diff -r 250f1c09f424 -r 771f4ae27e58 src/combined/ffmpeg/ff_audio_decoder.c
--- a/src/combined/ffmpeg/ff_audio_decoder.c Wed Jan 25 17:03:55 2023 +0100
+++ b/src/combined/ffmpeg/ff_audio_decoder.c Sat Jan 28 19:04:00 2023 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2001-2022 the xine project
+ * Copyright (C) 2001-2023 the xine project
*
* This file is part of xine, a free video player.
*
@@ -303,7 +303,11 @@
this->context->bits_per_sample = this->ff_bits;
this->context->sample_rate = this->ff_sample_rate;
+#if XFF_AUDIO_CHANNEL_LAYOUT < 2
this->context->channels = this->ff_channels;
+#else
+ this->context->ch_layout.nb_channels = this->ff_channels;
+#endif
this->context->codec_id = this->codec->id;
this->context->codec_type = this->codec->type;
this->context->codec_tag = _x_stream_info_get(this->stream, XINE_STREAM_INFO_AUDIO_FOURCC);
@@ -527,16 +531,75 @@
this->ao_mode = 0;
}
+static unsigned int ff_list_channels (uint8_t *list, uint64_t map) {
+ unsigned int n, bit;
+
+ for (n = bit = 0; map; map >>= 1, bit++) {
+ uint32_t b = map & 1;
+
+ list[n] = bit;
+ n += b;
+ }
+ return n;
+}
+
static void ff_map_channels (ff_audio_decoder_t *this) {
uint64_t ff_map;
+ uint8_t ff_list[64];
+ unsigned int ff_num;
+ const char *type = "native";
int caps = this->stream->audio_out->get_capabilities (this->stream->audio_out);
+#if XFF_AUDIO_CHANNEL_LAYOUT < 2
+
/* safety kludge for very old libavcodec */
-#ifdef AV_CH_FRONT_LEFT
+# ifdef AV_CH_FRONT_LEFT
ff_map = this->context->channel_layout;
if (!ff_map) /* wma2 bug */
+# endif
+ ff_map = ((uint64_t)1 << this->context->channels) - 1;
+ ff_num = ff_list_channels (ff_list, ff_map);
+
+#else /* XFF_AUDIO_CHANNEL_LAYOUT == 2 */
+
+ ff_num = this->context->ch_layout.nb_channels;
+ if (ff_num > (int)(sizeof (ff_list) / sizeof (ff_list[0])))
+ ff_num = sizeof (ff_list) / sizeof (ff_list[0]);
+ switch (this->context->ch_layout.order) {
+ const AVChannelCustom *cmap;
+ unsigned int i;
+
+ case AV_CHANNEL_ORDER_UNSPEC:
+ type = "unknown";
+ goto _fallback;
+
+ case AV_CHANNEL_ORDER_NATIVE:
+ ff_map = this->context->ch_layout.u.mask;
+ if (!ff_map) /* wma2 bug */
+ ff_map = ((uint64_t)1 << ff_num) - 1;
+ ff_num = ff_list_channels (ff_list, ff_map);
+ break;
+
+ case AV_CHANNEL_ORDER_CUSTOM:
+ type = "custom";
+ if (!(cmap = this->context->ch_layout.u.map))
+ goto _fallback;
+ ff_map = 0;
+ for (i = 0; i < ff_num; i++) {
+ ff_list[i] = cmap[i].id;
+ ff_map |= (uint64_t)1 << ff_list[i];
+ }
+ break;
+
+ default:
+ type = "unsupported";
+ /* fall through */
+ _fallback:
+ ff_map = ((uint64_t)1 << ff_num) - 1;
+ ff_num = ff_list_channels (ff_list, ff_map);
+ }
+
#endif
- ff_map = ((uint64_t)1 << this->context->channels) - 1;
if ((caps != this->ao_caps) || (ff_map != this->ff_map)) {
unsigned int i, j;
@@ -562,7 +625,7 @@
this->ao_caps = caps;
this->ff_map = ff_map;
- this->ff_channels = this->context->channels;
+ this->ff_channels = ff_num;
/* silence out */
for (i = 0; i < MAX_CHANNELS; i++)
@@ -576,20 +639,23 @@
this->left[0] = this->right[0] = 0;
tries = wishlist + 0 * num_modes;
} else if (this->ff_channels == 2) { /* stereo */
+ /* FIXME: libxine does not yet support audio selection _after_ decoding.
+ * For now, treat the most common "dual mono" case as stereo. */
name_map[0] = 0;
name_map[1] = 1;
this->left[0] = 0;
this->right[0] = 1;
tries = wishlist + 1 * num_modes;
} else {
- for (i = j = 0; i < sizeof (base_map) / sizeof (base_map[0]); i++) {
- if ((ff_map >> i) & 1) {
- int8_t target = base_map[i];
- if ((target >= 0) && (this->map[target] < 0))
- this->map[target] = j;
- name_map[j] = i; /* for debug output below */
- j++;
- }
+ for (i = 0; i < ff_num; i++) {
+ int8_t target;
+ uint32_t num = ff_list[i];
+ if (num >= sizeof (base_map) / sizeof (base_map[0]))
+ continue;
+ target = base_map[num];
+ if ((target >= 0) && (this->map[target] < 0))
+ this->map[target] = i;
+ name_map[i] = num; /* for debug output below */
}
this->left[0] = this->map[0] < 0 ? 0 : this->map[0];
this->map[0] = -1;
@@ -641,8 +707,8 @@
"rear center",
"side left", "side right"
};
- int8_t buf[200];
- int p = sprintf (buf, "ff_audio_dec: channel layout: ");
+ int8_t buf[256];
+ int p = sprintf (buf, "ff_audio_dec: %s channel layout: ", type);
int8_t *indx = this->left;
for (i = 0; i < 2; i++) {
buf[p++] = '[';

View file

@ -1,475 +0,0 @@
# 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;

View file

@ -1,318 +0,0 @@
# 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

View file

@ -1,148 +0,0 @@
# 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
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2001-2024 the xine project
+ * Copyright (C) 2001-2025 the xine project
*
* This file is part of xine, a free video player.
*
@@ -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
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2000-2024 the xine project
+ * Copyright (C) 2000-2025 the xine project
*
* This file is part of xine, a unix video player.
*
@@ -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 */
# HG changeset patch
# User Xavier Bachelot <xavier@bachelot.org>
# Date 1758280185 -7200
# Fri Sep 19 13:09:45 2025 +0200
# Node ID a8fffd1193b2247c7f732d4df83dcc03fce96dbe
# Parent 9bb3977ea7e2b652742b3cdd200b0a4a72eb48bc
Fix FFmpeg compatibilty update.
diff -r 9bb3977ea7e2 -r a8fffd1193b2 src/combined/ffmpeg/ff_video_decoder.c
--- a/src/combined/ffmpeg/ff_video_decoder.c Sat Sep 13 10:59:45 2025 +0200
+++ b/src/combined/ffmpeg/ff_video_decoder.c Fri Sep 19 13:09:45 2025 +0200
@@ -61,7 +61,7 @@
#include "ffmpeg_compat.h"
#if XFF_FRAME_RATE == 2
-# include <avcodec/codec_desc.h>
+# include <libavcodec/codec_desc.h>
#endif
#if LIBAVCODEC_VERSION_INT >= XFF_INT_VERSION(59,0,100)

View file

@ -1,32 +0,0 @@
# HG changeset patch
# User Torsten Jager <t.jager@gmx.de>
# Date 1734473730 -3600
# Tue Dec 17 23:15:30 2024 +0100
# Node ID ea7071a960a1ca8719422e80e130994c8f549731
# Parent 439d26b4081e3f31f21052049e9564082fc80076
Attempt to fix build with libnfs 6.
Thanks to Xavier Bachelot <xine-devel@lists.sourceforge.net>.
diff -r 439d26b4081e -r ea7071a960a1 src/input/input_nfs.c
--- a/src/input/input_nfs.c Tue Dec 17 23:15:25 2024 +0100
+++ b/src/input/input_nfs.c Tue Dec 17 23:15:30 2024 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2000-2020 the xine project
+ * Copyright (C) 2000-2024 the xine project
* Copyright (C) 2018 Petri Hintukainen <phintuka@users.sourceforge.net>
*
* This file is part of xine, a free video player.
@@ -134,7 +134,11 @@
int rc;
while (got < len) {
- rc = nfs_read(this->nfs, this->nfsfh, len - got, buf + got);
+#ifdef LIBNFS_API_V2
+ rc = nfs_read (this->nfs, this->nfsfh, buf + got, len - got);
+#else
+ rc = nfs_read (this->nfs, this->nfsfh, len - got, buf + got);
+#endif
if (rc <= 0) {
if (errno == EAGAIN || errno == EINTR)
continue;

View file

@ -1,60 +0,0 @@
# HG changeset patch
# User Torsten Jager <t.jager@gmx.de>
# Date 1741126505 -3600
# Tue Mar 04 23:15:05 2025 +0100
# Node ID 5a68e8b08fd5378780f76c3ab957d790209388db
# Parent b5fd08a878bb80072ba5b71e30391ab52698c22f
(Attempt to) Fix gcc 15 error.
That one no longer accepts "type foo ();" as a prototype
for any set of function parameters.
Thanks to Xavier Bachelot <xavier@bachelot.org>.
diff -r b5fd08a878bb -r 5a68e8b08fd5 src/libw32dll/wine/win32.c
--- a/src/libw32dll/wine/win32.c Thu Feb 06 23:30:40 2025 +0100
+++ b/src/libw32dll/wine/win32.c Tue Mar 04 23:15:05 2025 +0100
@@ -2517,10 +2517,10 @@
}
static int WINAPI expEnumDisplayMonitors(void *dc, RECT *r,
- int WINAPI (*callback_proc)(), void *callback_param)
+ int WINAPI (*callback_proc) (int n, void *dc, RECT *r, void *param), void *callback_param)
{
dbgprintf("EnumDisplayMonitors(%p, %p, %p, %p) => ?\n",
- dc, r, callback_proc, callback_param);
+ dc, (void *)r, (void *)callback_proc, callback_param);
return callback_proc(0, dc, r, callback_param);
}
@@ -2617,10 +2617,10 @@
return 0;
}
-static int WINAPI expEnumWindows(int (*callback_func)(), void *callback_param)
+static int WINAPI expEnumWindows(int (*callback_func) (int n, void *param), void *callback_param)
{
int i, i2;
- dbgprintf("EnumWindows(%p, %p) => 1\n", callback_func, callback_param);
+ dbgprintf("EnumWindows(%p, %p) => 1\n", (void *)callback_func, callback_param);
i = callback_func(0, callback_param);
i2 = callback_func(1, callback_param);
return i && i2;
@@ -3506,13 +3506,14 @@
}
if(strstr(cs1, ".qtx"))
{
- int result;
+ int result = -1;
char* x=strrchr(cs1,'\\');
char* tmp;
- asprintf(&tmp,"%s/%s",win32_def_path,x?(x+1):cs1);
-// printf("### Open: %s -> %s\n",cs1,tmp);
- result=open(tmp, O_RDONLY);
- free(tmp);
+ if (asprintf (&tmp,"%s/%s",win32_def_path,x?(x+1):cs1) >= 0) {
+ // printf("### Open: %s -> %s\n",cs1,tmp);
+ result = open (tmp, O_RDONLY);
+ free (tmp);
+ }
return result;
}
#endif

View file

@ -1,160 +0,0 @@
# HG changeset patch
# User Torsten Jager <t.jager@gmx.de>
# Date 1738622090 -3600
# Mon Feb 03 23:34:50 2025 +0100
# Node ID a38be398e202da7b8e414969b74fbd65eb34798d
# Parent ea7071a960a1ca8719422e80e130994c8f549731
Fix qsort compare func.
gcc 15 no longer accepts type (*func) () as a generic pointer
to any fuction returning type, and sometimes also bails on
obvious type pun then dereference.
Thanks to Xavier Bachelot <xavier@bachelot.org>.
diff -r ea7071a960a1 -r a38be398e202 contrib/libfaad/sbr_fbt.c
--- a/contrib/libfaad/sbr_fbt.c Tue Dec 17 23:15:30 2024 +0100
+++ b/contrib/libfaad/sbr_fbt.c Mon Feb 03 23:34:50 2025 +0100
@@ -105,9 +105,11 @@
}
}
-static int longcmp(const void *a, const void *b)
-{
- return ((int)(*(int32_t*)a - *(int32_t*)b));
+static int longcmp (const void *a, const void *b) {
+ const int32_t *d = (const int32_t *)a;
+ const int32_t *e = (const int32_t *)b;
+
+ return (int)(*d - *e);
}
/* calculate the stop QMF channel for the master frequency band table */
diff -r ea7071a960a1 -r a38be398e202 src/input/input_file.c
--- a/src/input/input_file.c Tue Dec 17 23:15:30 2024 +0100
+++ b/src/input/input_file.c Mon Feb 03 23:34:50 2025 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2000-2022 the xine project
+ * Copyright (C) 2000-2025 the xine project
*
* This file is part of xine, a free video player.
*
@@ -649,10 +649,13 @@
}
/*
- * Wrapper to file_input_strverscmp() for qsort() calls, which sort mrl_t type array.
+ * Wrapper to file_input_strverscmp () for qsort () calls, which sort mrl_t type array.
*/
-static int file_input_sortfiles_default (const xine_mrl_t *s1, const xine_mrl_t *s2) {
- return(file_input_strverscmp(s1->mrl, s2->mrl));
+static int file_input_sortfiles_default (const void *a, const void *b) {
+ const xine_mrl_t *d = (const xine_mrl_t *)a;
+ const xine_mrl_t *e = (const xine_mrl_t *)b;
+
+ return file_input_strverscmp (d->mrl, e->mrl);
}
/*
@@ -735,7 +738,7 @@
int num_dir_files = 0;
int num_norm_files = 0;
int num_files = -1;
- int (*func) () = file_input_sortfiles_default;
+ int (*cmp) (const void *a, const void *b) = file_input_sortfiles_default;
int already_tried = 0;
int show_hidden_files;
@@ -914,14 +917,14 @@
/*
* Sort arrays
*/
- if(num_dir_files)
- qsort(dir_files, num_dir_files, sizeof(xine_mrl_t), func);
+ if (num_dir_files)
+ qsort (dir_files, num_dir_files, sizeof (xine_mrl_t), cmp);
- if(num_hide_files)
- qsort(hide_files, num_hide_files, sizeof(xine_mrl_t), func);
+ if (num_hide_files)
+ qsort (hide_files, num_hide_files, sizeof (xine_mrl_t), cmp);
- if(num_norm_files)
- qsort(norm_files, num_norm_files, sizeof(xine_mrl_t), func);
+ if (num_norm_files)
+ qsort (norm_files, num_norm_files, sizeof (xine_mrl_t), cmp);
/*
* Add directories entries
diff -r ea7071a960a1 -r a38be398e202 src/input/input_smb.c
--- a/src/input/input_smb.c Tue Dec 17 23:15:30 2024 +0100
+++ b/src/input/input_smb.c Mon Feb 03 23:34:50 2025 +0100
@@ -229,10 +229,13 @@
}
/*
- * Wrapper to _strverscmp() for qsort() calls, which sort mrl_t type array.
+ * Wrapper to _strverscmp () for qsort () calls, which sort mrl_t type array.
*/
-static int _sortfiles_default(const xine_mrl_t *s1, const xine_mrl_t *s2) {
- return(_strverscmp(s1->mrl, s2->mrl));
+static int smb_input_sortfiles_default (const void *a, const void *b) {
+ const xine_mrl_t *d = (const xine_mrl_t *)a;
+ const xine_mrl_t *e = (const xine_mrl_t *)b;
+
+ return file_input_strverscmp (d->mrl, e->mrl);
}
@@ -240,7 +243,7 @@
const char *filename, int *nFiles) {
smb_input_class_t *this = (smb_input_class_t *) this_gen;
- int (*func) () = _sortfiles_default;
+ int (*cmp) (const void *a, const void *b) = smb_input_sortfiles_default;
int dir;
int i;
struct smbc_dirent *pdirent;
@@ -338,11 +341,11 @@
/*
* Sort arrays
*/
- if(num_dir_files)
- qsort(dir_files, num_dir_files, sizeof(xine_mrl_t), func);
+ if (num_dir_files)
+ qsort (dir_files, num_dir_files, sizeof (xine_mrl_t), cmp);
- if(num_norm_files)
- qsort(norm_files, num_norm_files, sizeof(xine_mrl_t), func);
+ if (num_norm_files)
+ qsort (norm_files, num_norm_files, sizeof (xine_mrl_t), cmp);
/*
* Add directories entries
# HG changeset patch
# User Torsten Jager <t.jager@gmx.de>
# Date 1738881040 -3600
# Thu Feb 06 23:30:40 2025 +0100
# Node ID b5fd08a878bb80072ba5b71e30391ab52698c22f
# Parent a38be398e202da7b8e414969b74fbd65eb34798d
Fix qsort compare func 2.
Thanks to Xavier Bachelot <xavier@bachelot.org>.
diff -r a38be398e202 -r b5fd08a878bb src/input/input_smb.c
--- a/src/input/input_smb.c Mon Feb 03 23:34:50 2025 +0100
+++ b/src/input/input_smb.c Thu Feb 06 23:30:40 2025 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2020 the xine project
+ * Copyright (C) 2008-2025 the xine project
*
* This file is part of xine, a free video player.
*
@@ -235,7 +235,7 @@
const xine_mrl_t *d = (const xine_mrl_t *)a;
const xine_mrl_t *e = (const xine_mrl_t *)b;
- return file_input_strverscmp (d->mrl, e->mrl);
+ return _strverscmp (d->mrl, e->mrl);
}

View file

@ -1,116 +0,0 @@
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])

File diff suppressed because it is too large Load diff