changeset 9896:bbefbca72722 libavcodec

Drop code that attempts to decode frames that are prefixed by junk. Too often it ends up decoding random data into noise without detecting it (for example after seeking of some MP3 data with oddly often occurring startcode emulation). Fixes issue1154.
author michael
date Tue, 30 Jun 2009 03:57:27 +0000
parents 06e12f9b93d7
children d69eaf40d1b8
files mpegaudiodec.c
diffstat 1 files changed, 3 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mpegaudiodec.c	Tue Jun 30 03:37:20 2009 +0000
+++ b/mpegaudiodec.c	Tue Jun 30 03:57:27 2009 +0000
@@ -2255,20 +2255,15 @@
     MPADecodeContext *s = avctx->priv_data;
     uint32_t header;
     int out_size;
-    int skipped = 0;
     OUT_INT *out_samples = data;
 
-retry:
     if(buf_size < HEADER_SIZE)
         return -1;
 
     header = AV_RB32(buf);
     if(ff_mpa_check_header(header) < 0){
-        buf++;
-        buf_size--;
-        skipped++;
-        av_log(avctx, AV_LOG_ERROR, "Header missing skipping one byte.\n");
-        goto retry;
+        av_log(avctx, AV_LOG_ERROR, "Header missing\n");
+        return -1;
     }
 
     if (ff_mpegaudio_decode_header((MPADecodeHeader *)s, header) == 1) {
@@ -2297,7 +2292,7 @@
     }else
         av_log(avctx, AV_LOG_DEBUG, "Error while decoding MPEG audio frame.\n"); //FIXME return -1 / but also return the number of bytes consumed
     s->frame_size = 0;
-    return buf_size + skipped;
+    return buf_size;
 }
 
 static void flush(AVCodecContext *avctx){