Mercurial > libavcodec.hg
changeset 1941:81a1a5be13aa libavcodec
fixed buffering for low bitrates patch by (Hauke Duden <H.NS.Duden at gmx dot net>)
author | michael |
---|---|
date | Fri, 16 Apr 2004 01:48:05 +0000 |
parents | 2511d3e4513e |
children | 9241d99f7443 |
files | mp3lameaudio.c |
diffstat | 1 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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;