avs: fix infinite loop on end-of-stream.
authorRonald S. Bultje <rsbultje@gmail.com>
Thu, 16 Feb 2012 00:21:34 +0000 (16:21 -0800)
committerRonald S. Bultje <rsbultje@gmail.com>
Thu, 8 Mar 2012 00:33:35 +0000 (16:33 -0800)
The codec would keep returning the last decoded frame if the stream
contains B-frames, since it wouldn't clear that frame from the list of
frames to be returned to the user.

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
libavcodec/cavsdec.c

index 1da4eb1..e320134 100644 (file)
@@ -656,6 +656,7 @@ static int cavs_decode_frame(AVCodecContext * avctx,void *data, int *data_size,
         if (!s->low_delay && h->DPB[0].f.data[0]) {
             *data_size = sizeof(AVPicture);
             *picture = h->DPB[0].f;
+            memset(&h->DPB[0], 0, sizeof(h->DPB[0]));
         }
         return 0;
     }