[packages/xine-lib] - up to 1.2.13
baggins
baggins at pld-linux.org
Sat Oct 21 13:51:20 CEST 2023
commit a48f55b5e86ae865346a660ec049d084dd2bb077
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Sat Oct 21 13:51:02 2023 +0200
- up to 1.2.13
extern.patch | 26 ------
ffmpeg4.patch | 210 ---------------------------------------------
ffmpeg6.patch | 196 ++++++++++++++++++++++++++++++++++++++++++
imagemagick7.patch | 11 ---
x32.patch | 24 ------
xine-lib-ac.patch | 10 ---
xine-lib-vdpau-hooks.patch | 149 --------------------------------
xine-lib.spec | 50 ++++++-----
8 files changed, 223 insertions(+), 453 deletions(-)
---
diff --git a/xine-lib.spec b/xine-lib.spec
index 41c8eb1..55d59ef 100644
--- a/xine-lib.spec
+++ b/xine-lib.spec
@@ -40,24 +40,18 @@ Summary(ko.UTF-8): 공개 동영상 플레이어
Summary(pl.UTF-8): Odtwarzacz filmów
Summary(pt_BR.UTF-8): Xine, um player de video
Name: xine-lib
-Version: 1.2.8
-Release: 22
+Version: 1.2.13
+Release: 1
Epoch: 2
License: GPL v2+
Group: Libraries
-Source0: http://downloads.sourceforge.net/xine/%{name}-%{version}.tar.xz
-# Source0-md5: 427cc4568632eea725d5169a4a50ff22
+Source0: https://downloads.sourceforge.net/xine/%{name}-%{version}.tar.xz
+# Source0-md5: 9e1be39857b7a3cd7cc0f2b96331ff22
Patch0: %{name}-nolibs.patch
Patch1: %{name}-win32-path.patch
Patch2: %{name}-sh.patch
-Patch3: %{name}-ac.patch
-# from DirectFB 1.7.0
-Patch4: %{name}-vdpau-hooks.patch
-Patch5: x32.patch
-Patch6: ffmpeg4.patch
-Patch8: imagemagick7.patch
-Patch9: extern.patch
-URL: http://xine.sourceforge.net/
+Patch3: ffmpeg6.patch
+URL: https://xine.sourceforge.net/
%{?with_directfb:BuildRequires: DirectFB-devel >= 0.9.22}
%{?with_fusionsound:BuildRequires: FusionSound-devel >= 0.9.23}
BuildRequires: ImageMagick-devel >= 1:6.0.0
@@ -131,7 +125,7 @@ Obsoletes: xine-output-video-syncfb
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
# based on libtool numbers
-%define xine_pluginsdir %{_libdir}/xine/plugins/2.6
+%define xine_pluginsdir %{_libdir}/xine/plugins/2.11
%define specflags -fomit-frame-pointer
@@ -968,11 +962,6 @@ XINE - wtyczka postprocessingu oparta na libpostproc z pakietu FFmpeg.
%patch1 -p1
%patch2 -p1
%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch8 -p1
-%patch9 -p1
%build
%{__gettextize}
@@ -1057,13 +1046,13 @@ rm -rf $RPM_BUILD_ROOT
# input plugins
%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_cdda.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_crypto.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_dvb.so
-%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_http.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_mms.so
-%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_net.so
-%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_pnm.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_network.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_nfs.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_rtp.so
-%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_rtsp.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_ssh.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_inp_vcdo.so
# demuxer plugins
@@ -1079,23 +1068,38 @@ rm -rf $RPM_BUILD_ROOT
%attr(755,root,root) %{xine_pluginsdir}/xineplug_dmx_video.so
# decoder plugins
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_dav1d.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_dvaudio.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_gsm610.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_libaom.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_libpng.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_lpcm.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_mpeg2.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_rawvideo.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_real.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_spucc.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_spucmml.so
-%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_spuhdmv.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_spudvb.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_spuhdmv.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_decode_to_spdif.so
+
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_va_display_drm.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_va_display_glx.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_va_display_wl.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_va_display_x11.so
# output plugins
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_vo_gl_egl_wl.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_vo_gl_egl_x11.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_vo_gl_glx.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_vo_out_raw.so
# ?
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_hw_frame_vaapi.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_nsf.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_sputext.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_tls_gnutls.so
+%attr(755,root,root) %{xine_pluginsdir}/xineplug_tls_openssl.so
%attr(755,root,root) %{xine_pluginsdir}/xineplug_vdr.so
%files devel
diff --git a/extern.patch b/extern.patch
deleted file mode 100644
index 761b86b..0000000
--- a/extern.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- xine-lib-1.2.8/src/xine-engine/builtins.h~ 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/xine-engine/builtins.h 2021-02-14 19:27:45.032199127 +0100
-@@ -31,7 +31,7 @@
-
- #include <xine/xine_internal.h>
-
--const plugin_info_t xine_builtin_plugin_info[7];
-+extern const plugin_info_t xine_builtin_plugin_info[7];
-
- #endif
-
---- xine-lib-1.2.8/src/libreal/real_common.h~ 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/libreal/real_common.h 2021-02-14 19:30:25.662805757 +0100
-@@ -75,10 +75,10 @@
- const char *const codec_name,
- const char *const codec_alternate);
-
--const decoder_info_t dec_info_realvideo;
-+extern const decoder_info_t dec_info_realvideo;
- void *init_realvdec (xine_t *xine, void *data);
-
--const decoder_info_t dec_info_realaudio;
-+extern const decoder_info_t dec_info_realaudio;
- void *init_realadec (xine_t *xine, void *data);
-
- #endif
diff --git a/ffmpeg4.patch b/ffmpeg4.patch
deleted file mode 100644
index 850a8fe..0000000
--- a/ffmpeg4.patch
+++ /dev/null
@@ -1,210 +0,0 @@
---- xine-lib-1.2.8/src/combined/ffmpeg/ff_audio_decoder.c~ 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/combined/ffmpeg/ff_audio_decoder.c 2018-04-29 00:29:06.993144238 +0200
-@@ -221,7 +221,7 @@
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n"),
- this->bufsize);
-- this->buf = xine_realloc_aligned (this->buf, this->bufsize + FF_INPUT_BUFFER_PADDING_SIZE);
-+ this->buf = xine_realloc_aligned (this->buf, this->bufsize + AV_INPUT_BUFFER_PADDING_SIZE);
- }
- }
-
-@@ -232,9 +232,9 @@
-
- free (this->context->extradata);
- this->context->extradata_size = buf->decoder_info[2];
-- this->context->extradata = malloc (buf->decoder_info[2] + FF_INPUT_BUFFER_PADDING_SIZE);
-+ this->context->extradata = malloc (buf->decoder_info[2] + AV_INPUT_BUFFER_PADDING_SIZE);
- memcpy (this->context->extradata, buf->decoder_info_ptr[2], buf->decoder_info[2]);
-- memset (this->context->extradata + buf->decoder_info[2], 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset (this->context->extradata + buf->decoder_info[2], 0, AV_INPUT_BUFFER_PADDING_SIZE);
-
- ff_aac_mode_set (this, 0);
- }
-@@ -451,10 +451,10 @@
- this->ff_channels, this->ff_bits, this->ff_sample_rate,
- this->context->block_align);
- if (!data_len) break;
-- e = malloc (data_len + FF_INPUT_BUFFER_PADDING_SIZE);
-+ e = malloc (data_len + AV_INPUT_BUFFER_PADDING_SIZE);
- if (!e) break;
- xine_fast_memcpy (e, p, data_len);
-- memset (e + data_len, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset (e + data_len, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- this->context->extradata = e;
- this->context->extradata_size = data_len;
- break;
-@@ -1008,7 +1008,7 @@
- offset = 0;
-
- /* pad input data */
-- memset(&this->buf[this->size], 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(&this->buf[this->size], 0, AV_INPUT_BUFFER_PADDING_SIZE);
-
- while (this->size>=0) {
-
---- xine-lib-1.2.8/src/combined/ffmpeg/ff_video_decoder.c.orig 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/combined/ffmpeg/ff_video_decoder.c 2018-04-29 00:35:47.244275385 +0200
-@@ -869,16 +869,12 @@
- this->stream->video_out->open (this->stream->video_out, this->stream);
-
- this->edge = 0;
-- if(this->codec->capabilities & CODEC_CAP_DR1 && this->class->enable_dri) {
-+ if(this->codec->capabilities & AV_CODEC_CAP_DR1 && this->class->enable_dri) {
- if (this->stream->video_out->get_capabilities (this->stream->video_out) & VO_CAP_CROP) {
- /* We can crop. Fine. Lets allow decoders to paint over the frame edges.
- This will be slightly faster. And it is also a workaround for buggy
- v54 who likes to ignore EMU_EDGE for wmv2 and xvid. */
- this->edge = XFF_EDGE_WIDTH ();
-- } else {
-- /* Some codecs (eg rv10) copy flags in init so it's necessary to set
-- * this flag here in case we are going to use direct rendering */
-- this->context->flags |= CODEC_FLAG_EMU_EDGE;
- }
- }
-
-@@ -887,7 +883,7 @@
- this->context->codec_type = this->codec->type;
-
- if (this->class->choose_speed_over_accuracy)
-- this->context->flags2 |= CODEC_FLAG2_FAST;
-+ this->context->flags2 |= AV_CODEC_FLAG2_FAST;
-
- this->context->skip_loop_filter = skip_loop_filter_enum_values[this->class->skip_loop_filter_enum];
-
-@@ -912,7 +908,7 @@
- /* enable direct rendering by default */
- this->output_format = XINE_IMGFMT_YV12;
- #ifdef ENABLE_DIRECT_RENDERING
-- if( this->codec->capabilities & CODEC_CAP_DR1 && this->class->enable_dri ) {
-+ if( this->codec->capabilities & AV_CODEC_CAP_DR1 && this->class->enable_dri ) {
- #ifdef XFF_AV_BUFFER
- this->context->get_buffer2 = get_buffer;
- this->context->thread_safe_callbacks = 1;
-@@ -1456,7 +1452,7 @@
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
- _("ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n"),
- this->bufsize);
-- this->buf = realloc(this->buf, this->bufsize + FF_INPUT_BUFFER_PADDING_SIZE );
-+ this->buf = realloc(this->buf, this->bufsize + AV_INPUT_BUFFER_PADDING_SIZE );
- }
- }
-
-@@ -1467,7 +1463,7 @@
- if (!p[0] && !p[1] && p[2] == 1 && p[3] == 0x0f) {
- int i;
-
-- this->context->extradata = calloc(1, buf->size + FF_INPUT_BUFFER_PADDING_SIZE);
-+ this->context->extradata = calloc(1, buf->size + AV_INPUT_BUFFER_PADDING_SIZE);
- this->context->extradata_size = 0;
-
- for (i = 0; i < buf->size && i < 128; i++) {
-@@ -1596,10 +1592,10 @@
- if (this->bih.biSize > sizeof(xine_bmiheader)) {
- this->context->extradata_size = this->bih.biSize - sizeof(xine_bmiheader);
- this->context->extradata = malloc(this->context->extradata_size +
-- FF_INPUT_BUFFER_PADDING_SIZE);
-+ AV_INPUT_BUFFER_PADDING_SIZE);
- memcpy(this->context->extradata, this->buf + sizeof(xine_bmiheader),
- this->context->extradata_size);
-- memset(this->context->extradata + this->context->extradata_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(this->context->extradata + this->context->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- }
-
- this->context->bits_per_sample = this->bih.biBitCount;
-@@ -1620,7 +1616,7 @@
- if (this->context->extradata_size < 8) {
- this->context->extradata_size= 8;
- this->context->extradata = calloc(1, this->context->extradata_size +
-- FF_INPUT_BUFFER_PADDING_SIZE);
-+ AV_INPUT_BUFFER_PADDING_SIZE);
- ((uint32_t *)this->context->extradata)[0] = 0;
- if (codec_type == BUF_VIDEO_RV10)
- ((uint32_t *)this->context->extradata)[1] = 0x10000000;
-@@ -1628,10 +1624,10 @@
- ((uint32_t *)this->context->extradata)[1] = 0x10003001;
- } else {
- this->context->extradata = malloc(this->context->extradata_size +
-- FF_INPUT_BUFFER_PADDING_SIZE);
-+ AV_INPUT_BUFFER_PADDING_SIZE);
- memcpy(this->context->extradata, this->buf + 26,
- this->context->extradata_size);
-- memset(this->context->extradata + this->context->extradata_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(this->context->extradata + this->context->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- }
-
- xprintf(this->stream->xine, XINE_VERBOSITY_LOG,
-@@ -1663,10 +1659,10 @@
- lprintf("BUF_SPECIAL_STSD_ATOM\n");
- this->context->extradata_size = buf->decoder_info[2];
- this->context->extradata = malloc(buf->decoder_info[2] +
-- FF_INPUT_BUFFER_PADDING_SIZE);
-+ AV_INPUT_BUFFER_PADDING_SIZE);
- memcpy(this->context->extradata, buf->decoder_info_ptr[2],
- buf->decoder_info[2]);
-- memset(this->context->extradata + this->context->extradata_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(this->context->extradata + this->context->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
-
- } else if (buf->decoder_info[1] == BUF_SPECIAL_DECODER_CONFIG &&
- !this->context->extradata_size) {
-@@ -1674,10 +1670,10 @@
- lprintf("BUF_SPECIAL_DECODER_CONFIG\n");
- this->context->extradata_size = buf->decoder_info[2];
- this->context->extradata = malloc(buf->decoder_info[2] +
-- FF_INPUT_BUFFER_PADDING_SIZE);
-+ AV_INPUT_BUFFER_PADDING_SIZE);
- memcpy(this->context->extradata, buf->decoder_info_ptr[2],
- buf->decoder_info[2]);
-- memset(this->context->extradata + this->context->extradata_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(this->context->extradata + this->context->extradata_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- }
- else if (buf->decoder_info[1] == BUF_SPECIAL_PALETTE) {
- unsigned int i;
-@@ -2085,7 +2081,7 @@
- /* data accumulation */
- if (buf->size > 0) {
- if ((this->size == 0) &&
-- ((buf->size + FF_INPUT_BUFFER_PADDING_SIZE) < buf->max_size) &&
-+ ((buf->size + AV_INPUT_BUFFER_PADDING_SIZE) < buf->max_size) &&
- (buf->decoder_flags & BUF_FLAG_FRAME_END)) {
- /* buf contains a complete frame */
- /* no memcpy needed */
-@@ -2121,7 +2117,7 @@
- /* note: bitstream, alt bitstream reader or something will cause
- * severe mpeg4 artifacts if padding is less than 32 bits.
- */
-- memset(&chunk_buf[this->size], 0, FF_INPUT_BUFFER_PADDING_SIZE);
-+ memset(&chunk_buf[this->size], 0, AV_INPUT_BUFFER_PADDING_SIZE);
-
- while (this->size > 0) {
-
-@@ -2732,7 +2728,7 @@
-
- this->decoder_ok = 0;
- this->decoder_init_mode = 1;
-- this->buf = calloc(1, VIDEOBUFSIZE + FF_INPUT_BUFFER_PADDING_SIZE);
-+ this->buf = calloc(1, VIDEOBUFSIZE + AV_INPUT_BUFFER_PADDING_SIZE);
- this->bufsize = VIDEOBUFSIZE;
-
- this->is_mpeg12 = 0;
---- xine-lib-1.2.8/src/combined/ffmpeg/ff_mpeg_parser.c~ 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/combined/ffmpeg/ff_mpeg_parser.c 2018-04-29 00:36:37.109002910 +0200
-@@ -50,7 +50,7 @@
-
- void mpeg_parser_init (mpeg_parser_t *parser)
- {
-- parser->chunk_buffer = malloc(BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
-+ parser->chunk_buffer = malloc(BUFFER_SIZE + AV_INPUT_BUFFER_PADDING_SIZE);
- mpeg_parser_reset(parser);
- }
-
---- xine-lib-1.2.8/src/dxr3/ffmpeg_encoder.c~ 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/dxr3/ffmpeg_encoder.c 2018-04-29 01:12:12.480759214 +0200
-@@ -207,7 +207,6 @@
- this->context->height = frame->oheight;
-
- this->context->gop_size = 0; /*intra frames only */
-- this->context->me_method = ME_ZERO; /*motion estimation type*/
-
- this->context->time_base.den = 90000;
- if (frame->vo_frame.duration > 90000 / 24)
diff --git a/ffmpeg6.patch b/ffmpeg6.patch
new file mode 100644
index 0000000..11056aa
--- /dev/null
+++ b/ffmpeg6.patch
@@ -0,0 +1,196 @@
+# HG changeset patch
+# User Torsten Jager <t.jager at 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 at 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++] = '[';
diff --git a/imagemagick7.patch b/imagemagick7.patch
deleted file mode 100644
index d050323..0000000
--- a/imagemagick7.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- xine-lib-1.2.6/src/video_dec/image.c.orig 2016-12-20 09:28:28.640838595 +0100
-+++ xine-lib-1.2.6/src/video_dec/image.c 2016-12-20 09:28:39.754382554 +0100
-@@ -39,7 +39,7 @@
- #define LOG
- */
-
--#include <wand/magick_wand.h>
-+#include <MagickWand/MagickWand.h>
- #ifdef PACKAGE_NAME
- #undef PACKAGE_BUGREPORT
- #undef PACKAGE_NAME
diff --git a/x32.patch b/x32.patch
deleted file mode 100644
index f660b15..0000000
--- a/x32.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -urNp -x '*.orig' xine-lib-1.2.8.org/src/post/goom/convolve_fx.c xine-lib-1.2.8/src/post/goom/convolve_fx.c
---- xine-lib-1.2.8.org/src/post/goom/convolve_fx.c 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/post/goom/convolve_fx.c 2022-02-14 00:14:02.757106126 +0100
-@@ -152,7 +152,7 @@ static void create_output_with_brightnes
- yprime += c;
-
- #if defined(HAVE_MMX) && !defined(__sun)
--#if defined(ARCH_X86_64)
-+#if defined(ARCH_X86_64) && !defined(__ILP32__)
- /* 64-bit os version. */
- __asm__ __volatile__
- ("\n\t pxor %%mm7, %%mm7" /* mm7 = 0 */
-diff -urNp -x '*.orig' xine-lib-1.2.8.org/src/post/planar/noise.c xine-lib-1.2.8/src/post/planar/noise.c
---- xine-lib-1.2.8.org/src/post/planar/noise.c 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/post/planar/noise.c 2022-02-14 00:14:02.757106126 +0100
-@@ -31,7 +31,7 @@
- #include <math.h>
- #include <pthread.h>
-
--#ifdef ARCH_X86_64
-+#if defined(ARCH_X86_64) && !defined(__ILP32__)
- # define REG_a "rax"
- # define intarch_t int64_t
- #else
diff --git a/xine-lib-ac.patch b/xine-lib-ac.patch
deleted file mode 100644
index 3d813e2..0000000
--- a/xine-lib-ac.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- xine-lib-1.2.1/configure.ac~ 2012-02-15 09:07:21.000000000 +0100
-+++ xine-lib-1.2.1/configure.ac 2012-02-15 09:11:13.049069705 +0100
-@@ -164,6 +164,7 @@
-
- AC_PROG_CC
- AM_PROG_CC_C_O
-+AC_PROG_CXX
- AC_GNU_SOURCE
- AC_ISC_POSIX
-
diff --git a/xine-lib-vdpau-hooks.patch b/xine-lib-vdpau-hooks.patch
deleted file mode 100644
index 79773e1..0000000
--- a/xine-lib-vdpau-hooks.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-diff -urNp -x '*.orig' xine-lib-1.2.8.org/src/video_out/Makefile.am xine-lib-1.2.8/src/video_out/Makefile.am
---- xine-lib-1.2.8.org/src/video_out/Makefile.am 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/video_out/Makefile.am 2022-02-14 00:14:01.953771680 +0100
-@@ -48,6 +48,9 @@ endif
-
- if ENABLE_VDPAU
- vdpau_module = xineplug_vo_out_vdpau.la
-+
-+xine_includedir = $(includedir)/xine
-+xine_include_HEADERS = video_out_vdpau.h
- endif
-
- if ENABLE_VAAPI
-diff -urNp -x '*.orig' xine-lib-1.2.8.org/src/video_out/video_out_vdpau.c xine-lib-1.2.8/src/video_out/video_out_vdpau.c
---- xine-lib-1.2.8.org/src/video_out/video_out_vdpau.c 2017-02-21 12:13:13.000000000 +0100
-+++ xine-lib-1.2.8/src/video_out/video_out_vdpau.c 2022-02-14 00:14:01.953771680 +0100
-@@ -51,6 +51,7 @@
- #include <vdpau/vdpau_x11.h>
- #include "accel_vdpau.h"
-
-+#include "video_out_vdpau.h"
-
-
- #define NUM_FRAMES_BACK 1
-@@ -2637,6 +2638,7 @@ static vo_driver_t *vdpau_open_plugin (v
- {
- vdpau_class_t *class = (vdpau_class_t *) class_gen;
- x11_visual_t *visual = (x11_visual_t *) visual_gen;
-+ x11_visual_vdpau_t *vdpau = visual->d ? NULL : (x11_visual_vdpau_t *) visual_gen;
- vdpau_driver_t *this;
- config_values_t *config = class->xine->config;
- int i;
-@@ -2713,15 +2715,22 @@ static vo_driver_t *vdpau_open_plugin (v
- this->ovl_src_rect.x0 = 0;
- this->ovl_src_rect.y0 = 0;
-
-- VdpStatus st = vdp_device_create_x11( visual->display, visual->screen, &vdp_device, &vdp_get_proc_address );
-- if ( st != VDP_STATUS_OK ) {
-- fprintf(stderr, "vo_vdpau: Can't create vdp device : " );
-- if ( st == VDP_STATUS_NO_IMPLEMENTATION )
-- fprintf(stderr, "No vdpau implementation.\n" );
-- else
-- fprintf(stderr, "unsupported GPU?\n" );
-- vdpau_dispose( &this->vo_driver );
-- return NULL;
-+ VdpStatus st;
-+ if (vdpau) {
-+ vdp_device = vdpau->device;
-+ vdp_get_proc_address = vdpau->vdp_get_proc_address;
-+ }
-+ else {
-+ st = vdp_device_create_x11( visual->display, visual->screen, &vdp_device, &vdp_get_proc_address );
-+ if ( st != VDP_STATUS_OK ) {
-+ fprintf(stderr, "vo_vdpau: Can't create vdp device : " );
-+ if ( st == VDP_STATUS_NO_IMPLEMENTATION )
-+ fprintf(stderr, "No vdpau implementation.\n" );
-+ else
-+ fprintf(stderr, "unsupported GPU?\n" );
-+ vdpau_dispose( &this->vo_driver );
-+ return NULL;
-+ }
- }
- st = vdp_get_proc_address( vdp_device, VDP_FUNC_ID_GET_ERROR_STRING , (void*)&vdp_get_error_string );
- if ( vdpau_init_error( st, "Can't get GET_ERROR_STRING proc address !!", &this->vo_driver, 0 ) )
-@@ -2929,6 +2938,22 @@ static vo_driver_t *vdpau_open_plugin (v
- if ( vdpau_init_error( st, "Can't get PREEMPTION_CALLBACK_REGISTER proc address !!", &this->vo_driver, 1 ) )
- return NULL;
-
-+ /* Check for extended initialization */
-+ if (vdpau) {
-+ vdp_queue_target_create_x11 = vdpau->vdp_queue_target_create_x11;
-+ vdp_queue_target_destroy = vdpau->vdp_queue_target_destroy;
-+ vdp_queue_create = vdpau->vdp_queue_create;
-+ vdp_queue_destroy = vdpau->vdp_queue_destroy;
-+ vdp_queue_display = vdpau->vdp_queue_display;
-+ vdp_queue_block = vdpau->vdp_queue_block;
-+ vdp_queue_set_background_color = vdpau->vdp_queue_set_background_color;
-+ vdp_queue_get_time = vdpau->vdp_queue_get_time;
-+ vdp_queue_query_surface_status = vdpau->vdp_queue_query_surface_status;
-+
-+ vdp_preemption_callback_register = vdpau->vdp_preemption_callback_register;
-+ }
-+
-+
- st = vdp_preemption_callback_register(vdp_device, &vdp_preemption_callback, (void*)this);
- if ( vdpau_init_error( st, "Can't register preemption callback !!", &this->vo_driver, 1 ) )
- return NULL;
-diff -urNp -x '*.orig' xine-lib-1.2.8.org/src/video_out/video_out_vdpau.h xine-lib-1.2.8/src/video_out/video_out_vdpau.h
---- xine-lib-1.2.8.org/src/video_out/video_out_vdpau.h 1970-01-01 01:00:00.000000000 +0100
-+++ xine-lib-1.2.8/src/video_out/video_out_vdpau.h 2022-02-14 00:14:01.953771680 +0100
-@@ -0,0 +1,58 @@
-+/*
-+ * kate: space-indent on; indent-width 2; mixedindent off; indent-mode cstyle; remove-trailing-space on;
-+ * Copyright (C) 2008 the xine project
-+ * Copyright (C) 2008 Christophe Thommeret <hftom at free.fr>
-+ *
-+ * This file is part of xine, a free video player.
-+ *
-+ * xine is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * xine is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-+ *
-+ *
-+ * video_out_vdpau.c, a video output plugin
-+ * using VDPAU (Video Decode and Presentation Api for Unix)
-+ *
-+ *
-+ */
-+
-+#ifndef __VIDEO_OUT__VDPAU_H__
-+#define __VIDEO_OUT__VDPAU_H__
-+
-+#include <xine.h>
-+
-+#include <vdpau/vdpau_x11.h>
-+
-+
-+typedef struct {
-+ x11_visual_t x11; // if x11.d (drawable) is zero, it will use this extended struct
-+
-+ VdpDevice device;
-+
-+ VdpGetProcAddress *vdp_get_proc_address;
-+
-+ VdpPresentationQueueTargetCreateX11 *vdp_queue_target_create_x11;
-+ VdpPresentationQueueTargetDestroy *vdp_queue_target_destroy;
-+ VdpPresentationQueueCreate *vdp_queue_create;
-+ VdpPresentationQueueDestroy *vdp_queue_destroy;
-+ VdpPresentationQueueDisplay *vdp_queue_display;
-+ VdpPresentationQueueBlockUntilSurfaceIdle *vdp_queue_block;
-+ VdpPresentationQueueSetBackgroundColor *vdp_queue_set_background_color;
-+ VdpPresentationQueueGetTime *vdp_queue_get_time;
-+ VdpPresentationQueueQuerySurfaceStatus *vdp_queue_query_surface_status;
-+
-+ VdpPreemptionCallbackRegister *vdp_preemption_callback_register;
-+} x11_visual_vdpau_t;
-+
-+#endif
-+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/xine-lib.git/commitdiff/a48f55b5e86ae865346a660ec049d084dd2bb077
More information about the pld-cvs-commit
mailing list