Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3305485147 | ||
|
5fc2fb6a66 | ||
|
32d4091dc9 | ||
|
9219780be6 | ||
|
b77442fa8d | ||
|
c87953a7cf | ||
|
ba5b66a10a | ||
|
db127f9932 | ||
|
7d4ab3fb85 | ||
|
fdb674cb36 | ||
|
c815f40018 | ||
|
8468161287 | ||
|
2c5c0f555e | ||
|
fd8037d218 |
9
.gitignore
vendored
9
.gitignore
vendored
@ -1,7 +1,2 @@
|
||||
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
|
||||
xine-lib-1.1.16.3-autotools.patch.bz2
|
||||
xine-lib-1.1.16.3-pruned.tar.bz2
|
||||
|
21
Makefile
Normal file
21
Makefile
Normal file
@ -0,0 +1,21 @@
|
||||
# Makefile for source rpm: xine-lib
|
||||
# $Id$
|
||||
NAME := xine-lib
|
||||
SPECFILE = $(firstword $(wildcard *.spec))
|
||||
|
||||
define find-makefile-common
|
||||
for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(find-makefile-common))
|
||||
|
||||
ifeq ($(MAKEFILE_COMMON),)
|
||||
# attept a checkout
|
||||
define checkout-makefile-common
|
||||
test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2
|
||||
endef
|
||||
|
||||
MAKEFILE_COMMON := $(shell $(checkout-makefile-common))
|
||||
endif
|
||||
|
||||
include $(MAKEFILE_COMMON)
|
@ -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"
|
3
sources
3
sources
@ -1 +1,2 @@
|
||||
SHA512 (xine-lib-1.2.13.tar.xz) = 088a446dd962c3cef621b56edd48fa2e1b47566108b4097d74899a9e5316a1f205993041d3070f45b706f168837579811e5e98c7e52ec278c683379407084bc4
|
||||
e50122a9323107564d58056b35256610 xine-lib-1.1.16.3-autotools.patch.bz2
|
||||
0cac86b7d74c1dcaa22f5a8cbc5ef578 xine-lib-1.1.16.3-pruned.tar.bz2
|
||||
|
20
xine-lib-1.1.1-deepbind-939.patch
Normal file
20
xine-lib-1.1.1-deepbind-939.patch
Normal file
@ -0,0 +1,20 @@
|
||||
--- xine-lib-1.1.1/src/xine-engine/load_plugins.c.~1~ 2005-09-19 09:14:02.000000000 -0700
|
||||
+++ xine-lib-1.1.1/src/xine-engine/load_plugins.c 2006-04-22 23:07:33.000000000 -0700
|
||||
@@ -591,7 +591,7 @@ static void collect_plugins(xine_t *this
|
||||
printf("load_plugins: %s not cached\n", str);
|
||||
#endif
|
||||
|
||||
- if(!info && (lib = dlopen (str, RTLD_LAZY | RTLD_GLOBAL)) == NULL) {
|
||||
+ if(!info && (lib = dlopen (str, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND)) == NULL) {
|
||||
const char *error = dlerror();
|
||||
/* too noisy -- but good to catch unresolved references */
|
||||
xprintf(this, XINE_VERBOSITY_LOG,
|
||||
@@ -649,7 +649,7 @@ static int _load_plugin_class(xine_t *th
|
||||
/* load the dynamic library if needed */
|
||||
if (!node->file->lib_handle) {
|
||||
lprintf("dlopen %s\n", filename);
|
||||
- if ((lib = dlopen (filename, RTLD_LAZY | RTLD_GLOBAL)) == NULL) {
|
||||
+ if ((lib = dlopen (filename, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND)) == NULL) {
|
||||
const char *error = dlerror();
|
||||
|
||||
xine_log (this, XINE_LOG_PLUGIN,
|
22
xine-lib-1.1.15-avsync_hack.patch
Normal file
22
xine-lib-1.1.15-avsync_hack.patch
Normal file
@ -0,0 +1,22 @@
|
||||
diff -uNr xine-lib-1.1.15.orig/src/xine-engine/audio_out.c xine-lib-1.1.15/src/xine-engine/audio_out.c
|
||||
--- xine-lib-1.1.15.orig/src/xine-engine/audio_out.c 2008-07-10 18:19:10.000000000 +0200
|
||||
+++ xine-lib-1.1.15/src/xine-engine/audio_out.c 2009-01-10 21:57:20.000000000 +0100
|
||||
@@ -1151,8 +1151,17 @@
|
||||
|
||||
/*
|
||||
* calculate gap:
|
||||
+ *
|
||||
+ * HACK (rwa): If we have no video stream we do not need an AV sync and so
|
||||
+ * we assume a gap of 0. This seems to avoid the skips in the
|
||||
+ * first seconds when playing audio-only via the "glitch-free"
|
||||
+ * pulseaudio server.
|
||||
*/
|
||||
- gap = in_buf->vpts - hw_vpts;
|
||||
+ if (in_buf && in_buf->stream && in_buf->stream->video_decoder_plugin) {
|
||||
+ gap = in_buf->vpts - hw_vpts;
|
||||
+ } else {
|
||||
+ gap = 0;
|
||||
+ }
|
||||
lprintf ("hw_vpts : %" PRId64 " buffer_vpts : %" PRId64 " gap : %" PRId64 "\n",
|
||||
hw_vpts, in_buf->vpts, gap);
|
||||
|
27
xine-lib-1.1.16-old-caca.patch
Normal file
27
xine-lib-1.1.16-old-caca.patch
Normal file
@ -0,0 +1,27 @@
|
||||
--- src/video_out/video_out_caca.c Tue Nov 18 21:13:55 2008 +0100
|
||||
+++ src/video_out/video_out_caca.c Mon Nov 10 16:33:51 2008 +0100
|
||||
@@ -276,7 +276,6 @@ static int caca_redraw_needed (vo_driver
|
||||
|
||||
static vo_driver_t *open_plugin (video_driver_class_t *class_gen, const void *visual_gen) {
|
||||
caca_class_t *class = (caca_class_t *) class_gen;
|
||||
- caca_display_t *dp = (caca_display_t *)visual_gen;
|
||||
caca_driver_t *this;
|
||||
|
||||
this = calloc(1, sizeof (caca_driver_t));
|
||||
@@ -301,13 +300,8 @@ static vo_driver_t *open_plugin (video_d
|
||||
this->yuv2rgb_factory = yuv2rgb_factory_init(MODE_32_RGB, 0, NULL);
|
||||
this->yuv2rgb_factory->set_csc_levels(this->yuv2rgb_factory, 0, 128, 128);
|
||||
|
||||
- if (dp) {
|
||||
- this->cv = caca_get_canvas(dp);
|
||||
- this->dp = dp;
|
||||
- } else {
|
||||
- this->cv = cucul_create_canvas(0, 0);
|
||||
- this->dp = caca_create_display(this->cv);
|
||||
- }
|
||||
+ this->cv = cucul_create_canvas(0, 0);
|
||||
+ this->dp = caca_create_display(this->cv);
|
||||
|
||||
caca_refresh_display(this->dp);
|
||||
return &this->vo_driver;
|
||||
|
20
xine-lib-1.1.16.3-mod_mimetypes_typo.patch
Normal file
20
xine-lib-1.1.16.3-mod_mimetypes_typo.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff -up xine-lib-1.1.16.3/src/demuxers/demux_mod.c.mod_mimetypes_typo xine-lib-1.1.16.3/src/demuxers/demux_mod.c
|
||||
--- xine-lib-1.1.16.3/src/demuxers/demux_mod.c.mod_mimetypes_typo 2009-03-25 14:28:40.000000000 -0500
|
||||
+++ xine-lib-1.1.16.3/src/demuxers/demux_mod.c 2009-04-10 10:15:04.000000000 -0500
|
||||
@@ -387,11 +387,11 @@ static const char *get_mimetypes (demux_
|
||||
"audio/x-s3m: s3m: ScreamTracker 3 Module;"
|
||||
"audio/s3m: s3m: ScreamTracker 3 Module;"
|
||||
"application/playerpro: 669: 669 Tracker Module;"
|
||||
- "application/adrift; amf: ADRIFT Module File;"
|
||||
- "audio/med; med; Amiga MED/OctaMED Tracker Module Sound File;"
|
||||
- "audio/x-amf; amf: ADRIFT Module File;"
|
||||
- "audio/x-xm; xm: FastTracker II Audio;"
|
||||
- "audio/xm; xm: FastTracker II Audio;";
|
||||
+ "application/adrift: amf: ADRIFT Module File;"
|
||||
+ "audio/med: med: Amiga MED/OctaMED Tracker Module Sound File;"
|
||||
+ "audio/x-amf: amf: ADRIFT Module File;"
|
||||
+ "audio/x-xm: xm: FastTracker II Audio;"
|
||||
+ "audio/xm: xm: FastTracker II Audio;";
|
||||
}
|
||||
|
||||
static void class_dispose (demux_class_t *this_gen) {
|
22
xine-lib-1.1.4-optflags.patch
Normal file
22
xine-lib-1.1.4-optflags.patch
Normal file
@ -0,0 +1,22 @@
|
||||
--- xine-lib-1.1.4/m4/optimizations.m4~ 2006-06-17 18:20:56.000000000 +0300
|
||||
+++ xine-lib-1.1.4/m4/optimizations.m4 2007-01-30 23:03:27.000000000 +0200
|
||||
@@ -107,7 +107,7 @@
|
||||
|
||||
DEBUG_CFLAGS="-O $DEBUG_CFLAGS"
|
||||
|
||||
- if test x"$sarchopt" != "xno"; then
|
||||
+ if false ; then
|
||||
archopt_val=
|
||||
|
||||
case "$host_or_hostalias" in
|
||||
--- xine-lib-1.1.4/configure~ 2007-01-30 23:02:56.000000000 +0200
|
||||
+++ xine-lib-1.1.4/configure 2007-01-30 23:03:40.000000000 +0200
|
||||
@@ -47754,7 +47754,7 @@
|
||||
|
||||
DEBUG_CFLAGS="-O $DEBUG_CFLAGS"
|
||||
|
||||
- if test x"$sarchopt" != "xno"; then
|
||||
+ if false ; then
|
||||
archopt_val=
|
||||
|
||||
case "$host_or_hostalias" in
|
@ -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++] = '[';
|
@ -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;
|
@ -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
|
85
xine-lib-cleanup-sources.sh
Executable file
85
xine-lib-cleanup-sources.sh
Executable file
@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$1" -o $# -ne 1 ]; then
|
||||
echo "Usage: $0 <xine-version>"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
version=$1
|
||||
tarball="xine-lib-$version.tar.bz2"
|
||||
dir="xine-lib-$version"
|
||||
modtarball="xine-lib-$version-pruned.tar.bz2"
|
||||
|
||||
|
||||
if [ ! -f $tarball ]; then
|
||||
echo "Can't find $tarball !"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Uncompressing $tarball..."
|
||||
rm -rf $dir
|
||||
tar -xjf $tarball
|
||||
cd $dir
|
||||
|
||||
rmpluglib()
|
||||
{
|
||||
echo "removing src/$1/$2..."
|
||||
rm -rf src/$1/$2
|
||||
sed -i -e "s/SUBDIRS = \(.*\)$2\(.*\)/SUBDIRS = \1\2/g" src/$1/Makefile.am
|
||||
sed -i -e "/^src\/$1\/$2/d" configure.ac
|
||||
}
|
||||
|
||||
# Main libraries
|
||||
for remove in libfaad libffmpeg libmad libmpeg2 dxr3 liba52 libdts; do
|
||||
echo "removing src/$remove..."
|
||||
rm -rf src/$remove
|
||||
sed -i -e "/$remove/d" src/Makefile.am
|
||||
sed -i -e "/^src\/$remove/d" configure.ac
|
||||
done
|
||||
# Input plugin libraries
|
||||
for remove in vcd; do
|
||||
rmpluglib input vcd
|
||||
done
|
||||
for remove in ffmpeg; do
|
||||
rmpluglib combined ffmpeg
|
||||
done
|
||||
# Input plugins
|
||||
for p in dvd vcd mms; do
|
||||
echo "removing $p input plugin..."
|
||||
# Remove sources
|
||||
for sourcefile in `awk '/^xineplug_inp_'$p'_la_SOURCES/ { $1=""; $2=""; print $0}' src/input/Makefile.am`; do
|
||||
if [ "`grep -c $sourcefile src/input/Makefile.am`" -le 1 ]; then # if this file is only used for this plugin
|
||||
rm -f src/input/$sourcefile
|
||||
fi
|
||||
done
|
||||
# Remove from Makefile
|
||||
sed -i -e "/xineplug_inp_$p/d" src/input/Makefile.am
|
||||
done
|
||||
# Demuxers
|
||||
# These are ok now ( http://bugzilla.redhat.com/213597 )
|
||||
#for p in mpeg mpeg_block mpeg_ts mpeg_elem mpeg_pes yuv4mpeg2; do
|
||||
# echo "removing $p demuxer..."
|
||||
# [ -f src/demuxers/demux_$p.c ] && rm -f src/demuxers/demux_$p.c
|
||||
# sed -i -e "/xineplug_dmx_$p/d" src/demuxers/Makefile.am
|
||||
#done
|
||||
# Postprocessors
|
||||
echo "removing planar and deinterlace postprocessors..."
|
||||
sed -i -e 's/deinterlace //g' src/post/Makefile.am # see comments in speedy.c
|
||||
sed -i -e 's/planar //g' src/post/Makefile.am # requires libpostproc
|
||||
sed -i -e '/post\/\(deinterlace\|planar\)/d' configure.ac
|
||||
rm -rf src/post/{deinterlace,planar}
|
||||
# NSF decoder
|
||||
echo "removing NSF decoder..."
|
||||
rm -rf src/libxineadec/{nosefart,nsf.c}
|
||||
sed -i -e '/^xineplug_decode_nsf_la/,/^\s*$/d' \
|
||||
-e /xineplug_decode_nsf/d \
|
||||
-e 's/ nosefart//' \
|
||||
src/libxineadec/Makefile.am
|
||||
sed -i -e '/nosefart\/Makefile/d' configure.ac
|
||||
|
||||
# All clean !
|
||||
|
||||
cd ..
|
||||
echo "Generating $modtarball..."
|
||||
tar -cjf $modtarball $dir
|
||||
rm -rf $dir
|
@ -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])
|
33
xine-lib-mk-autotools-patch.sh
Normal file
33
xine-lib-mk-autotools-patch.sh
Normal file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
|
||||
# be sure to have all build deps + libtool installed before running this
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "$1" -o $# -ne 1 ]; then
|
||||
echo "Usage: $0 <xine-lib-version>"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
version=$1
|
||||
|
||||
# missing dependency on autoconf >= (apparently) 2.61 in upstream autofoo files
|
||||
acversion="$(rpm -q --qf=%{VERSION} autoconf)"
|
||||
case $acversion in
|
||||
2.6*) ;;
|
||||
*) echo "ERROR: autoconf >= 2.61 required" ; exit 1 ;;
|
||||
esac
|
||||
|
||||
rm -rf xine-lib-$version xine-lib-$version-pruned
|
||||
tar jxf xine-lib-$version-pruned.tar.bz2
|
||||
cp -a xine-lib-$version xine-lib-$version-pruned
|
||||
|
||||
pushd xine-lib-$version
|
||||
# extra work for to omit old libtool-related crud
|
||||
rm -f configure ltmain.sh libtool m4/libtool.m4 m4/ltoptions.m4 m4/ltversion.m4
|
||||
./autogen.sh noconfig
|
||||
rm -rf autom4te.cache *~
|
||||
popd
|
||||
|
||||
diff -Nru xine-lib-$version-pruned xine-lib-$version \
|
||||
| bzip2 --best > xine-lib-$version-autotools.patch.bz2
|
1013
xine-lib.spec
1013
xine-lib.spec
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user