changeset 738:044307862b4b libavcodec

support buffers containing more than one frame
author bellard
date Wed, 09 Oct 2002 12:35:22 +0000
parents 248a752a4c0e
children f40723ee806d
files dv.c
diffstat 1 files changed, 8 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/dv.c	Tue Oct 08 17:54:02 2002 +0000
+++ b/dv.c	Wed Oct 09 12:35:22 2002 +0000
@@ -494,7 +494,7 @@
                                  UINT8 *buf, int buf_size)
 {
     DVVideoDecodeContext *s = avctx->priv_data;
-    int sct, dsf, apt, ds, nb_dif_segs, vs, size, width, height, i;
+    int sct, dsf, apt, ds, nb_dif_segs, vs, size, width, height, i, packet_size;
     UINT8 *buf_ptr;
     const UINT16 *mb_pos_ptr;
     AVPicture *picture;
@@ -531,17 +531,18 @@
     /* init size */
     width = 720;
     if (dsf) {
-        if (buf_size != PAL_FRAME_SIZE)
-            return -1;
+        packet_size = PAL_FRAME_SIZE;
         height = 576;
         nb_dif_segs = 12;
     } else {
-        if (buf_size != NTSC_FRAME_SIZE)
-            return -1;
+        packet_size = NTSC_FRAME_SIZE;
         height = 480;
         nb_dif_segs = 10;
     }
-
+    /* NOTE: we only accept several full frames */
+    if (buf_size < packet_size)
+        return -1;
+    
     /* XXX: is it correct to assume that 420 is always used in PAL
        mode ? */
     s->sampling_411 = !dsf;
@@ -604,8 +605,7 @@
         picture->data[i] = s->current_picture[i];
         picture->linesize[i] = s->linesize[i];
     }
-
-    return buf_size;
+    return packet_size;
 }
 
 static int dvvideo_decode_end(AVCodecContext *avctx)