changeset 9904:efd0c5014ac7 libavcodec

simplify slice_end, return size of output frame
author bcoudurier
date Wed, 01 Jul 2009 17:29:52 +0000
parents 305536ce781f
children f3ff182e9ecf
files mpeg12.c
diffstat 1 files changed, 5 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mpeg12.c	Wed Jul 01 15:08:02 2009 +0000
+++ b/mpeg12.c	Wed Jul 01 17:29:52 2009 +0000
@@ -1935,7 +1935,7 @@
 
 /**
  * Handles slice ends.
- * @return 1 if it seems to be the last slice
+ * @return sizeof(AVFrame) if a frame is output, 0 otherwise
  */
 static int slice_end(AVCodecContext *avctx, AVFrame *pict)
 {
@@ -1966,6 +1966,7 @@
         if (s->pict_type == FF_B_TYPE || s->low_delay) {
             *pict= *(AVFrame*)s->current_picture_ptr;
             ff_print_debug_info(s, pict);
+            return sizeof(*pict);
         } else {
             s->picture_number++;
             /* latency of 1 frame for I- and P-frames */
@@ -1973,13 +1974,11 @@
             if (s->last_picture_ptr != NULL) {
                 *pict= *(AVFrame*)s->last_picture_ptr;
                  ff_print_debug_info(s, pict);
+                 return sizeof(*pict);
             }
         }
-
-        return 1;
-    } else {
-        return 0;
     }
+    return 0;
 }
 
 static int mpeg1_decode_sequence(AVCodecContext *avctx,
@@ -2317,10 +2316,7 @@
                 if (CONFIG_MPEG_VDPAU_DECODER && avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
                     ff_vdpau_mpeg_picture_complete(s2, buf, buf_size, s->slice_count);
 
-                if (slice_end(avctx, picture)) {
-                    if(s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice
-                        *data_size = sizeof(AVPicture);
-                }
+                *data_size = slice_end(avctx, picture);
             }
             s2->pict_type= 0;
             return FFMAX(0, buf_ptr - buf - s2->parse_context.last_index);