# HG changeset patch # User michael # Date 1082080085 0 # Node ID 81a1a5be13aa9df22d03aafe960940070efb3fb2 # Parent 2511d3e4513eaf82d2a53a233c971df2b16cc727 fixed buffering for low bitrates patch by (Hauke Duden ) diff -r 2511d3e4513e -r 81a1a5be13aa mp3lameaudio.c --- a/mp3lameaudio.c Fri Apr 16 01:29:35 2004 +0000 +++ b/mp3lameaudio.c Fri Apr 16 01:48:05 2004 +0000 @@ -57,7 +57,7 @@ if (lame_init_params(s->gfp) < 0) goto err_close; - avctx->frame_size = MPA_FRAME_SIZE; + avctx->frame_size = lame_get_framesize(s->gfp); avctx->coded_frame= avcodec_alloc_frame(); avctx->coded_frame->key_frame= 1; @@ -133,31 +133,41 @@ { Mp3AudioContext *s = avctx->priv_data; int len, i; + int lame_result; /* lame 3.91 dies on '1-channel interleaved' data */ if (s->stereo) { - s->buffer_index += lame_encode_buffer_interleaved( + lame_result = lame_encode_buffer_interleaved( s->gfp, data, - MPA_FRAME_SIZE, + avctx->frame_size, s->buffer + s->buffer_index, BUFFER_SIZE - s->buffer_index ); } else { - s->buffer_index += lame_encode_buffer( + lame_result = lame_encode_buffer( s->gfp, data, data, - MPA_FRAME_SIZE, + avctx->frame_size, s->buffer + s->buffer_index, BUFFER_SIZE - s->buffer_index ); - } - if(s->buffer_index<4) - return 0; + } + + if(lame_result==-1) { + /* output buffer too small */ + av_log(avctx, AV_LOG_ERROR, "lame: output buffer too small (buffer index: %d, free bytes: %d)\n", s->buffer_index, BUFFER_SIZE - s->buffer_index); + return 0; + } + + s->buffer_index += lame_result; + + if(s->buffer_index<4) + return 0; len= mp3len(s->buffer, NULL, NULL); -//av_log(avctx, AV_LOG_DEBUG, "in:%d packet-len:%d index:%d\n", MPA_FRAME_SIZE, len, s->buffer_index); +//av_log(avctx, AV_LOG_DEBUG, "in:%d packet-len:%d index:%d\n", avctx->frame_size, len, s->buffer_index); if(len <= s->buffer_index){ memcpy(frame, s->buffer, len); s->buffer_index -= len;