diff options
author | Tim Harder <radhermit@gentoo.org> | 2011-09-12 06:02:38 +0000 |
---|---|---|
committer | Tim Harder <radhermit@gentoo.org> | 2011-09-12 06:02:38 +0000 |
commit | c5aaf4dbcd45dec21c606123673e706fa2bfa2ec (patch) | |
tree | a1da4a4355d33d973f9ee9698b8254ef87292097 /media-libs/xine-lib | |
parent | Drop old. (diff) | |
download | gentoo-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/ChangeLog | 6 | ||||
-rw-r--r-- | media-libs/xine-lib/files/xine-lib-1.1.19-ffmpeg.patch | 407 |
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 { |