File xine-lib-1.1.19-ffmpeg_abi_change.diff of Package xine-lib

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;
 
openSUSE Build Service is sponsored by