[FFmpeg-cvslog] r19302 - trunk/libavcodec/mpegaudiodec.c

michael subversion
Tue Jun 30 05:57:27 CEST 2009


Author: michael
Date: Tue Jun 30 05:57:27 2009
New Revision: 19302

Log:
Drop code that attempts to decode frames that are prefixed by junk,
it does too often end up decoding random data into noise without
detecting it. (for example after seeking of some mp3 data with oddly
often occuring startcode emulation)
fixes issue1154.

Modified:
   trunk/libavcodec/mpegaudiodec.c

Modified: trunk/libavcodec/mpegaudiodec.c
==============================================================================
--- trunk/libavcodec/mpegaudiodec.c	Tue Jun 30 05:37:20 2009	(r19301)
+++ trunk/libavcodec/mpegaudiodec.c	Tue Jun 30 05:57:27 2009	(r19302)
@@ -2255,20 +2255,15 @@ static int decode_frame(AVCodecContext *
     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 @@ retry:
     }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){



More information about the ffmpeg-cvslog mailing list