summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Harder <radhermit@gentoo.org>2011-09-12 06:02:38 +0000
committerTim Harder <radhermit@gentoo.org>2011-09-12 06:02:38 +0000
commitc5aaf4dbcd45dec21c606123673e706fa2bfa2ec (patch)
treea1da4a4355d33d973f9ee9698b8254ef87292097 /media-libs/xine-lib
parentDrop old. (diff)
downloadgentoo-2-c5aaf4dbcd45dec21c606123673e706fa2bfa2ec.tar.gz
gentoo-2-c5aaf4dbcd45dec21c606123673e706fa2bfa2ec.tar.bz2
gentoo-2-c5aaf4dbcd45dec21c606123673e706fa2bfa2ec.zip
Fix build with newer versions of libav (bug #376419).
(Portage version: 2.2.0_alpha55/cvs/Linux x86_64)
Diffstat (limited to 'media-libs/xine-lib')
-rw-r--r--media-libs/xine-lib/ChangeLog6
-rw-r--r--media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch407
2 files changed, 347 insertions, 66 deletions
diff --git a/media-libs/xine-lib/ChangeLog b/media-libs/xine-lib/ChangeLog
index 357de0d54906..e76aec517cc7 100644
--- a/media-libs/xine-lib/ChangeLog
+++ b/media-libs/xine-lib/ChangeLog
@@ -1,6 +1,10 @@
# ChangeLog for media-libs/xine-lib
# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-libs/xine-lib/ChangeLog,v 1.643 2011/05/11 19:11:38 aballier Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-libs/xine-lib/ChangeLog,v 1.644 2011/09/12 06:02:38 radhermit Exp $
+
+ 12 Sep 2011; Tim Harder <radhermit@gentoo.org>
+ files/xine-lib-1.1.19-ffmpeg.patch:
+ Fix build with newer versions of libav (bug #376419).
11 May 2011; Alexis Ballier <aballier@gentoo.org> xine-lib-1.1.19.ebuild,
+files/xine-lib-1.1.19-ffmpeg.patch:
diff --git a/media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch b/media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch
index 5d05a9c0871f..6817aa989460 100644
--- a/media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch
+++ b/media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch
@@ -1,103 +1,380 @@
-Index: 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
-+++ xine-lib-1.1.19/src/combined/ffmpeg/ff_audio_decoder.c
-@@ -285,12 +285,15 @@ static void ff_audio_decode_data (audio_
+diff -r 717450d734f7 src/combined/ffmpeg/ff_audio_decoder.c
+--- a/src/combined/ffmpeg/ff_audio_decoder.c Mon May 16 15:49:02 2011 +0100
++++ b/src/combined/ffmpeg/ff_audio_decoder.c Mon May 16 19:46:49 2011 -0400
+@@ -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) {
-+ AVPacket pkt;
decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
-- avcodec_decode_audio2 (this->context,
-+ av_init_packet( &pkt );
-+ pkt.data = &this->buf[0];
-+ pkt.size = this->size;
-+ avcodec_decode_audio3 (this->context,
++#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);
-+ &pkt);
+ &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;
-@@ -310,12 +313,15 @@ static void ff_audio_decode_data (audio_
-
+@@ -311,12 +330,21 @@
offset = 0;
while (this->size>0) {
-+ AVPacket pkt;
decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE;
-- bytes_consumed = avcodec_decode_audio2 (this->context,
-+ av_init_packet( &pkt );
-+ pkt.data = &this->buf[offset];
-+ pkt.size = this->size;
-+ bytes_consumed = avcodec_decode_audio3 (this->context,
++#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);
-+ &pkt);
-
+ &this->buf[offset],
+ this->size);
+-
++#endif
if (bytes_consumed<0) {
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
-Index: 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
-+++ xine-lib-1.1.19/src/combined/ffmpeg/ff_video_decoder.c
-@@ -1026,6 +1026,7 @@ static void ff_handle_mpeg12_buffer (ff_
-
- uint8_t *current;
- int next_flush;
-+ AVPacket pkt;
-
- got_picture = 0;
- if (!flush) {
-@@ -1055,12 +1056,14 @@ static void ff_handle_mpeg12_buffer (ff_
+ "ffmpeg_audio_dec: error decompressing audio frame\n");
+diff -r 717450d734f7 src/combined/ffmpeg/ff_video_decoder.c
+--- a/src/combined/ffmpeg/ff_video_decoder.c Mon May 16 15:49:02 2011 +0100
++++ b/src/combined/ffmpeg/ff_video_decoder.c Mon May 16 19:46:49 2011 -0400
+@@ -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 */
-- this->context->hurry_up = (this->skipframes > 0);
-+ this->context->skip_frame = (this->skipframes > 0? AVDISCARD_NONREF : AVDISCARD_DEFAULT);
++#if AVVIDEO > 1
++ this->context->skip_frame = (this->skipframes > 0) ? AVDISCARD_NONREF : AVDISCARD_DEFAULT;
++#else
+ this->context->hurry_up = (this->skipframes > 0);
++#endif
-+ av_init_packet( &pkt );
-+ pkt.data = this->mpeg_parser->chunk_buffer;
-+ pkt.size = this->mpeg_parser->buffer_size;
lprintf("avcodec_decode_video: size=%d\n", this->mpeg_parser->buffer_size);
-- len = avcodec_decode_video (this->context, this->av_frame,
-- &got_picture, this->mpeg_parser->chunk_buffer,
-- 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, &pkt);
++ &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 +1115,7 @@ static void ff_handle_mpeg12_buffer (ff_
+@@ -1112,7 +1134,13 @@
} else {
- if (this->context->hurry_up) {
-+ if (this->context->skip_frame > AVDISCARD_DEFAULT) {
++ 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,
-@@ -1303,13 +1306,16 @@ static void ff_handle_buffer (ff_video_d
- this->size = 0;
+@@ -1304,13 +1332,25 @@
got_picture = 0;
} else {
-+ AVPacket pkt;
/* skip decoding b frames if too late */
-- this->context->hurry_up = (this->skipframes > 0);
-+ this->context->skip_frame = (this->skipframes > 0? AVDISCARD_NONREF : AVDISCARD_DEFAULT);
-
++#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);
-- len = avcodec_decode_video (this->context, this->av_frame,
-- &got_picture, &chunk_buf[offset],
-- this->size);
-+ av_init_packet( &pkt );
-+ pkt.data = &chunk_buf[offset];
-+ pkt.size = this->size;
-+ len = avcodec_decode_video2 (this->context, this->av_frame,
-+ &got_picture, &pkt);
-
++#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;
+
+diff -r 717450d734f7 src/post/planar/pp.c
+--- a/src/post/planar/pp.c Mon May 16 15:49:02 2011 +0100
++++ b/src/post/planar/pp.c Mon May 16 19:46:49 2011 -0400
+@@ -35,6 +35,12 @@
+ # include <libpostproc/postprocess.h>
+ #endif
+
++#if LIBPOSTPROC_VERSION_MAJOR < 52
++# define pp_context pp_context_t
++# define pp_mode pp_mode_t
++# define PP_PARAMETERS_T
++#endif
++
+ #define PP_STRING_SIZE 256 /* size of pp mode string (including all options) */
+
+ /* plugin class initialization function */
+@@ -76,14 +82,15 @@
+
+ /* libpostproc specific stuff */
+ int pp_flags;
+- pp_context_t *pp_context;
+- pp_mode_t *pp_mode;
++ pp_context *our_context;
++ pp_mode *our_mode;
+
+ pthread_mutex_t lock;
+ };
+
+
+ static int set_parameters (xine_post_t *this_gen, void *param_gen) {
++#ifdef PP_PARAMETERS_T
+ post_plugin_pp_t *this = (post_plugin_pp_t *)this_gen;
+ pp_parameters_t *param = (pp_parameters_t *)param_gen;
+
+@@ -92,17 +99,18 @@
+ memcpy( &this->params, param, sizeof(pp_parameters_t) );
+
+ pthread_mutex_unlock (&this->lock);
+-
++#endif
+ return 1;
+ }
+
+ static int get_parameters (xine_post_t *this_gen, void *param_gen) {
++#ifdef PP_PARAMETERS_T
+ post_plugin_pp_t *this = (post_plugin_pp_t *)this_gen;
+ pp_parameters_t *param = (pp_parameters_t *)param_gen;
+
+
+ memcpy( param, &this->params, sizeof(pp_parameters_t) );
+-
++#endif
+ return 1;
+ }
+
+@@ -202,8 +210,8 @@
+ if(cpu_caps & MM_ACCEL_X86_3DNOW)
+ this->pp_flags |= PP_CPU_CAPS_3DNOW;
+
+- this->pp_mode = NULL;
+- this->pp_context = NULL;
++ this->our_mode = NULL;
++ this->our_context = NULL;
+
+ pthread_mutex_init (&this->lock, NULL);
+
+@@ -248,13 +256,13 @@
+ post_plugin_pp_t *this = (post_plugin_pp_t *)this_gen;
+
+ if (_x_post_dispose(this_gen)) {
+- 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;
+ }
+ free(this);
+ }
+@@ -304,7 +312,7 @@
+
+ pthread_mutex_lock (&this->lock);
+
+- if( !this->pp_context ||
++ if( !this->our_context ||
+ this->frame_width != yv12_frame->width ||
+ this->frame_height != yv12_frame->height ) {
+
+@@ -312,32 +320,32 @@
+ this->frame_height = yv12_frame->height;
+ pp_flags = this->pp_flags;
+
+- if(this->pp_context)
+- pp_free_context(this->pp_context);
++ if(this->our_context)
++ pp_free_context(this->our_context);
+
+- this->pp_context = pp_get_context(frame->width, frame->height, pp_flags);
++ this->our_context = pp_get_context(frame->width, frame->height, pp_flags);
+
+- 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_mode)
+- this->pp_mode = pp_get_mode_by_name_and_quality(this->params.mode,
++ if(!this->our_mode)
++ this->our_mode = pp_get_mode_by_name_and_quality(this->params.mode,
+ this->params.quality);
+
+- if(this->pp_mode)
++ if(this->our_mode)
+ pp_postprocess(yv12_frame->base, yv12_frame->pitches,
+ out_frame->base, out_frame->pitches,
+ (frame->width+7)&(~7), frame->height,
+ NULL, 0,
+- this->pp_mode, this->pp_context,
++ this->our_mode, this->our_context,
+ 0 /*this->av_frame->pict_type*/);
+
+ pthread_mutex_unlock (&this->lock);
+
+- if(this->pp_mode) {
++ if(this->our_mode) {
+ skip = out_frame->draw(out_frame, stream);
+ _x_post_frame_copy_up(frame, out_frame);
+ } else {