[SCM] libav/experimental: * and finaly avoid deadlock at the end of audio stream

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:30:16 UTC 2013


The following commit has been merged in the experimental branch:
commit 2d83f323d63332e5ecaa481d8f9301c0ea92b6ba
Author: Zdenek Kabelac <kabi at informatics.muni.cz>
Date:   Tue Oct 23 20:20:01 2001 +0000

    * and finaly avoid deadlock at the end of audio stream
    
    Originally committed as revision 183 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
index 38f21ca..8af8047 100644
--- a/libavcodec/mpegaudiodec.c
+++ b/libavcodec/mpegaudiodec.c
@@ -2271,9 +2271,9 @@ static int decode_frame(AVCodecContext * avctx,
 	    if (len > buf_size)
 		len = buf_size;
 	    else if (len > 0) {
-	    memcpy(s->inbuf_ptr, buf_ptr, len);
-	    buf_ptr += len;
-	    buf_size -= len;
+		memcpy(s->inbuf_ptr, buf_ptr, len);
+		buf_ptr += len;
+		buf_size -= len;
 		s->inbuf_ptr += len;
 	    }
 	    if ((s->inbuf_ptr - s->inbuf) >= HEADER_SIZE) {
@@ -2282,7 +2282,7 @@ static int decode_frame(AVCodecContext * avctx,
 		    (s->inbuf[2] << 8) | s->inbuf[3];
 		if (check_header(header) < 0) {
 		    /* no sync found : move by one byte (inefficient, but simple!) */
-		    memcpy(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf);
+		    memcpy(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
 		    s->inbuf_ptr--;
                     dprintf("skip %x\n", header);
                     /* reset free format frame size to give a chance
@@ -2291,14 +2291,14 @@ static int decode_frame(AVCodecContext * avctx,
 		} else {
 		    if (decode_header(s, header) == 1) {
                         /* free format: compute frame size */
-                        s->frame_size = -1;
-			memcpy(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf);
+			s->frame_size = -1;
+			memcpy(s->inbuf, s->inbuf + 1, s->inbuf_ptr - s->inbuf - 1);
 			s->inbuf_ptr--;
                     } else {
                         /* update codec info */
                         avctx->sample_rate = s->sample_rate;
                         avctx->channels = s->nb_channels;
-                        avctx->bit_rate = s->bit_rate;
+			avctx->bit_rate = s->bit_rate;
                     }
 		}
 	    }
@@ -2359,13 +2359,12 @@ static int decode_frame(AVCodecContext * avctx,
 	    len = s->frame_size - len;
 	    if (len > buf_size)
 		len = buf_size;
-	    else if (len > 0)
-	    {
+	    else if (len < 4)
+		len = buf_size > 4 ? 4 : buf_size;
 	    memcpy(s->inbuf_ptr, buf_ptr, len);
 	    buf_ptr += len;
 	    s->inbuf_ptr += len;
 	    buf_size -= len;
-	    }
 	} else {
             out_size = mp_decode_frame(s, out_samples);
 	    s->inbuf_ptr = s->inbuf;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list