# HG changeset patch # User bellard # Date 1034166922 0 # Node ID 044307862b4b0703f3035b15fa60d5abf26e2dcf # Parent 248a752a4c0ea47254185cfd9d717e681d396409 support buffers containing more than one frame diff -r 248a752a4c0e -r 044307862b4b dv.c --- 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)