Ignore blocks with no samples and flags (but usually with MD5 sum)
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 15 Oct 2006 04:50:19 +0000 (04:50 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sun, 15 Oct 2006 04:50:19 +0000 (04:50 +0000)
Originally committed as revision 6694 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/wavpack.c
libavformat/wv.c

index 53ba34b69dd1b0c0325ba70b9d64f9c19d3519a8..5a54f7d0e2b88cd4a871422fe9eedf4f2e77ee1b 100644 (file)
@@ -388,6 +388,7 @@ static int wavpack_decode_frame(AVCodecContext *avctx,
     memset(s->decorr, 0, MAX_TERMS * sizeof(Decorr));
 
     s->samples = LE_32(buf); buf += 4;
+    if(!s->samples) return buf_size;
     /* should not happen but who knows */
     if(s->samples * 2 * avctx->channels > AVCODEC_MAX_AUDIO_FRAME_SIZE){
         av_log(avctx, AV_LOG_ERROR, "Packet size is too big to be handled in lavc!\n");
index e601c05fcbc0518b2ad594de474c037f7e2cce05..86b7a7bd9c203d32ac9c5e7f91a2ebfeac252ae5 100644 (file)
@@ -118,15 +118,15 @@ static int wv_read_block_header(AVFormatContext *ctx, ByteIOContext *pb)
     if(!wc->chan) wc->chan = chan;
     if(!wc->rate) wc->rate = rate;
 
-    if(bpp != wc->bpp){
+    if(wc->flags && bpp != wc->bpp){
         av_log(ctx, AV_LOG_ERROR, "Bits per sample differ, this block: %i, header block: %i\n", bpp, wc->bpp);
         return -1;
     }
-    if(chan != wc->chan){
+    if(wc->flags && chan != wc->chan){
         av_log(ctx, AV_LOG_ERROR, "Channels differ, this block: %i, header block: %i\n", chan, wc->chan);
         return -1;
     }
-    if(rate != wc->rate){
+    if(wc->flags && rate != wc->rate){
         av_log(ctx, AV_LOG_ERROR, "Sampling rate differ, this block: %i, header block: %i\n", rate, wc->rate);
         return -1;
     }