xine-lib: patch added to build against new abi ffmpeg (only non cribbled version)
OBS-URL: https://build.opensuse.org/package/show/multimedia:xine/xine-lib?expand=0&rev=39
This commit is contained in:
parent
c5491b57ef
commit
7579386f68
241
xine-lib-1.1.19-ffmpeg_abi_change.diff
Normal file
241
xine-lib-1.1.19-ffmpeg_abi_change.diff
Normal file
@ -0,0 +1,241 @@
|
||||
diff -ur xine-lib-1.1.19.orig/src/combined/ffmpeg/ff_audio_decoder.c xine-lib-1.1.19/src/combined/ffmpeg/ff_audio_decoder.c
|
||||
--- xine-lib-1.1.19.orig/src/combined/ffmpeg/ff_audio_decoder.c 2010-03-23 16:41:49.000000000 +0100
|
||||
+++ xine-lib-1.1.19/src/combined/ffmpeg/ff_audio_decoder.c 2011-05-17 20:23:15.000000000 +0200
|
||||
@@ -46,6 +46,12 @@
|
||||
|
||||
#define AUDIOBUFSIZE (64 * 1024)
|
||||
|
||||
+#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 32)
|
||||
+# define AVAUDIO 3
|
||||
+#else
|
||||
+# define AVAUDIO 2
|
||||
+#endif
|
||||
+
|
||||
typedef struct {
|
||||
audio_decoder_class_t decoder_class;
|
||||
} ff_audio_class_t;
|
||||
@@ -255,6 +261,9 @@
|
||||
buf->decoder_info[2]);
|
||||
|
||||
} else if (!(buf->decoder_flags & BUF_FLAG_SPECIAL)) {
|
||||
+#if AVAUDIO > 2
|
||||
+ AVPacket avpkt;
|
||||
+#endif
|
||||
|
||||
if( !this->decoder_ok ) {
|
||||
if ( ! this->context || ! this->codec ) {
|
||||
@@ -286,11 +295,21 @@
|
||||
if (!this->output_open) {
|
||||
if (!this->audio_bits || !this->audio_sample_rate || !this->audio_channels) {
|
||||
decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
|
||||
+#if AVAUDIO > 2
|
||||
+ av_init_packet (&avpkt);
|
||||
+ avpkt.data = (uint8_t *)&this->buf[0];
|
||||
+ avpkt.size = this->size;
|
||||
+ avpkt.flags = AV_PKT_FLAG_KEY;
|
||||
+ avcodec_decode_audio3 (this->context,
|
||||
+ (int16_t *)this->decode_buffer,
|
||||
+ &decode_buffer_size, &avpkt);
|
||||
+#else
|
||||
avcodec_decode_audio2 (this->context,
|
||||
(int16_t *)this->decode_buffer,
|
||||
&decode_buffer_size,
|
||||
&this->buf[0],
|
||||
this->size);
|
||||
+#endif
|
||||
this->audio_bits = this->context->bits_per_sample;
|
||||
this->audio_sample_rate = this->context->sample_rate;
|
||||
this->audio_channels = this->context->channels;
|
||||
@@ -311,12 +330,21 @@
|
||||
offset = 0;
|
||||
while (this->size>0) {
|
||||
decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
|
||||
+#if AVAUDIO > 2
|
||||
+ av_init_packet (&avpkt);
|
||||
+ avpkt.data = (uint8_t *)&this->buf[offset];
|
||||
+ avpkt.size = this->size;
|
||||
+ avpkt.flags = AV_PKT_FLAG_KEY;
|
||||
+ bytes_consumed = avcodec_decode_audio3 (this->context,
|
||||
+ (int16_t *)this->decode_buffer,
|
||||
+ &decode_buffer_size, &avpkt);
|
||||
+#else
|
||||
bytes_consumed = avcodec_decode_audio2 (this->context,
|
||||
(int16_t *)this->decode_buffer,
|
||||
&decode_buffer_size,
|
||||
&this->buf[offset],
|
||||
this->size);
|
||||
-
|
||||
+#endif
|
||||
if (bytes_consumed<0) {
|
||||
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
|
||||
"ffmpeg_audio_dec: error decompressing audio frame\n");
|
||||
diff -ur xine-lib-1.1.19.orig/src/combined/ffmpeg/ff_video_decoder.c xine-lib-1.1.19/src/combined/ffmpeg/ff_video_decoder.c
|
||||
--- xine-lib-1.1.19.orig/src/combined/ffmpeg/ff_video_decoder.c 2010-03-10 20:07:15.000000000 +0100
|
||||
+++ xine-lib-1.1.19/src/combined/ffmpeg/ff_video_decoder.c 2011-05-17 20:23:15.000000000 +0200
|
||||
@@ -58,6 +58,14 @@
|
||||
|
||||
#define ENABLE_DIRECT_RENDERING
|
||||
|
||||
+#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 32)
|
||||
+# define AVVIDEO 2
|
||||
+#else
|
||||
+# define AVVIDEO 1
|
||||
+# define pp_context pp_context_t
|
||||
+# define pp_mode pp_mode_t
|
||||
+#endif
|
||||
+
|
||||
/* reordered_opaque appeared in libavcodec 51.68.0 */
|
||||
#define AVCODEC_HAS_REORDERED_OPAQUE
|
||||
#if LIBAVCODEC_VERSION_INT < 0x334400
|
||||
@@ -116,8 +124,8 @@
|
||||
|
||||
int pp_quality;
|
||||
int pp_flags;
|
||||
- pp_context_t *pp_context;
|
||||
- pp_mode_t *pp_mode;
|
||||
+ pp_context *our_context;
|
||||
+ pp_mode *our_mode;
|
||||
|
||||
/* mpeg-es parsing */
|
||||
mpeg_parser_t *mpeg_parser;
|
||||
@@ -444,23 +452,23 @@
|
||||
this->pp_quality = this->class->pp_quality;
|
||||
|
||||
if(this->pp_available && this->pp_quality) {
|
||||
- if(!this->pp_context && this->context)
|
||||
- this->pp_context = pp_get_context(this->context->width, this->context->height,
|
||||
+ if(!this->our_context && this->context)
|
||||
+ this->our_context = pp_get_context(this->context->width, this->context->height,
|
||||
this->pp_flags);
|
||||
- if(this->pp_mode)
|
||||
- pp_free_mode(this->pp_mode);
|
||||
+ if(this->our_mode)
|
||||
+ pp_free_mode(this->our_mode);
|
||||
|
||||
- this->pp_mode = pp_get_mode_by_name_and_quality("hb:a,vb:a,dr:a",
|
||||
+ this->our_mode = pp_get_mode_by_name_and_quality("hb:a,vb:a,dr:a",
|
||||
this->pp_quality);
|
||||
} else {
|
||||
- if(this->pp_mode) {
|
||||
- pp_free_mode(this->pp_mode);
|
||||
- this->pp_mode = NULL;
|
||||
+ if(this->our_mode) {
|
||||
+ pp_free_mode(this->our_mode);
|
||||
+ this->our_mode = NULL;
|
||||
}
|
||||
|
||||
- if(this->pp_context) {
|
||||
- pp_free_context(this->pp_context);
|
||||
- this->pp_context = NULL;
|
||||
+ if(this->our_context) {
|
||||
+ pp_free_context(this->our_context);
|
||||
+ this->our_context = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1055,12 +1063,26 @@
|
||||
}
|
||||
|
||||
/* skip decoding b frames if too late */
|
||||
+#if AVVIDEO > 1
|
||||
+ this->context->skip_frame = (this->skipframes > 0) ? AVDISCARD_NONREF : AVDISCARD_DEFAULT;
|
||||
+#else
|
||||
this->context->hurry_up = (this->skipframes > 0);
|
||||
+#endif
|
||||
|
||||
lprintf("avcodec_decode_video: size=%d\n", this->mpeg_parser->buffer_size);
|
||||
+#if AVVIDEO > 1
|
||||
+ AVPacket avpkt;
|
||||
+ av_init_packet(&avpkt);
|
||||
+ avpkt.data = (uint8_t *)this->mpeg_parser->chunk_buffer;
|
||||
+ avpkt.size = this->mpeg_parser->buffer_size;
|
||||
+ avpkt.flags = AV_PKT_FLAG_KEY;
|
||||
+ len = avcodec_decode_video2 (this->context, this->av_frame,
|
||||
+ &got_picture, &avpkt);
|
||||
+#else
|
||||
len = avcodec_decode_video (this->context, this->av_frame,
|
||||
&got_picture, this->mpeg_parser->chunk_buffer,
|
||||
this->mpeg_parser->buffer_size);
|
||||
+#endif
|
||||
lprintf("avcodec_decode_video: decoded_size=%d, got_picture=%d\n",
|
||||
len, got_picture);
|
||||
len = current - buf->content - offset;
|
||||
@@ -1112,7 +1134,13 @@
|
||||
|
||||
} else {
|
||||
|
||||
- if (this->context->hurry_up) {
|
||||
+ if (
|
||||
+#if AVVIDEO > 1
|
||||
+ this->context->skip_frame != AVDISCARD_DEFAULT
|
||||
+#else
|
||||
+ this->context->hurry_up
|
||||
+#endif
|
||||
+ ) {
|
||||
/* skipped frame, output a bad frame */
|
||||
img = this->stream->video_out->get_frame (this->stream->video_out,
|
||||
this->bih.biWidth,
|
||||
@@ -1304,13 +1332,25 @@
|
||||
got_picture = 0;
|
||||
} else {
|
||||
/* skip decoding b frames if too late */
|
||||
+#if AVVIDEO > 1
|
||||
+ this->context->skip_frame = (this->skipframes > 0) ? AVDISCARD_NONREF : AVDISCARD_DEFAULT;
|
||||
+#else
|
||||
this->context->hurry_up = (this->skipframes > 0);
|
||||
-
|
||||
+#endif
|
||||
lprintf("buffer size: %d\n", this->size);
|
||||
+#if AVVIDEO > 1
|
||||
+ AVPacket avpkt;
|
||||
+ av_init_packet(&avpkt);
|
||||
+ avpkt.data = (uint8_t *)&chunk_buf[offset];
|
||||
+ avpkt.size = this->size;
|
||||
+ avpkt.flags = AV_PKT_FLAG_KEY;
|
||||
+ len = avcodec_decode_video2 (this->context, this->av_frame,
|
||||
+ &got_picture, &avpkt);
|
||||
+#else
|
||||
len = avcodec_decode_video (this->context, this->av_frame,
|
||||
&got_picture, &chunk_buf[offset],
|
||||
this->size);
|
||||
-
|
||||
+#endif
|
||||
#ifdef AVCODEC_HAS_REORDERED_OPAQUE
|
||||
/* reset consumed pts value */
|
||||
this->context->reordered_opaque = ff_tag_pts(this, 0);
|
||||
@@ -1432,7 +1472,7 @@
|
||||
img->base, img->pitches,
|
||||
img->width, img->height,
|
||||
this->av_frame->qscale_table, this->av_frame->qstride,
|
||||
- this->pp_mode, this->pp_context,
|
||||
+ this->our_mode, this->our_context,
|
||||
this->av_frame->pict_type);
|
||||
|
||||
} else if (!this->av_frame->opaque) {
|
||||
@@ -1676,11 +1716,11 @@
|
||||
free(this->buf);
|
||||
this->buf = NULL;
|
||||
|
||||
- if(this->pp_context)
|
||||
- pp_free_context(this->pp_context);
|
||||
+ if(this->our_context)
|
||||
+ pp_free_context(this->our_context);
|
||||
|
||||
- if(this->pp_mode)
|
||||
- pp_free_mode(this->pp_mode);
|
||||
+ if(this->our_mode)
|
||||
+ pp_free_mode(this->our_mode);
|
||||
|
||||
mpeg_parser_dispose(this->mpeg_parser);
|
||||
|
||||
@@ -1721,8 +1761,8 @@
|
||||
this->aspect_ratio = 0;
|
||||
|
||||
this->pp_quality = 0;
|
||||
- this->pp_context = NULL;
|
||||
- this->pp_mode = NULL;
|
||||
+ this->our_context = NULL;
|
||||
+ this->our_mode = NULL;
|
||||
|
||||
this->mpeg_parser = NULL;
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Sat May 28 17:09:00 CET 2011 - Manfred.Tremmel@iiv.de
|
||||
|
||||
- included a patch to build against new ffmpeg abi
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 18 10:04:52 UTC 2010 - coolo@novell.com
|
||||
|
||||
|
@ -101,7 +101,7 @@ BuildRequires: DirectFB
|
||||
BuildRequires: libmodplug-devel
|
||||
%endif
|
||||
Version: 1.1.19
|
||||
Release: 1
|
||||
Release: 2
|
||||
# bug437293
|
||||
%ifarch ppc64
|
||||
Obsoletes: xine-lib-64bit
|
||||
@ -138,6 +138,7 @@ Patch73: xine-lib-%{version}-assert.patch
|
||||
Patch74: xine-configure.diff
|
||||
# *** Only working for noncrippled source
|
||||
Patch80: xine-lib-various-noncrippled.diff
|
||||
Patch81: xine-lib-%{version}-ffmpeg_abi_change.diff
|
||||
|
||||
%description
|
||||
xine is a free multimedia player. It plays back CDs, DVDs, and VCDs. It
|
||||
@ -656,6 +657,7 @@ sed -i 's|^noinst_HEADERS = input_vdr.h|xineinclude_HEADERS = input_vdr.h|' src/
|
||||
%else
|
||||
# Only apply to uncrippled source
|
||||
%patch80
|
||||
%patch81 -p1
|
||||
%endif
|
||||
%patch72 -p1
|
||||
%patch73 -p1
|
||||
|
Loading…
Reference in New Issue
Block a user