mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
fixed buffering for low bitrates patch by (Hauke Duden <H.NS.Duden at gmx dot net>)
Originally committed as revision 3020 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
365e75f89b
commit
0f5c3f2132
@ -57,7 +57,7 @@ static int MP3lame_encode_init(AVCodecContext *avctx)
|
|||||||
if (lame_init_params(s->gfp) < 0)
|
if (lame_init_params(s->gfp) < 0)
|
||||||
goto err_close;
|
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= avcodec_alloc_frame();
|
||||||
avctx->coded_frame->key_frame= 1;
|
avctx->coded_frame->key_frame= 1;
|
||||||
@ -133,31 +133,41 @@ int MP3lame_encode_frame(AVCodecContext *avctx,
|
|||||||
{
|
{
|
||||||
Mp3AudioContext *s = avctx->priv_data;
|
Mp3AudioContext *s = avctx->priv_data;
|
||||||
int len, i;
|
int len, i;
|
||||||
|
int lame_result;
|
||||||
|
|
||||||
/* lame 3.91 dies on '1-channel interleaved' data */
|
/* lame 3.91 dies on '1-channel interleaved' data */
|
||||||
if (s->stereo) {
|
if (s->stereo) {
|
||||||
s->buffer_index += lame_encode_buffer_interleaved(
|
lame_result = lame_encode_buffer_interleaved(
|
||||||
s->gfp,
|
s->gfp,
|
||||||
data,
|
data,
|
||||||
MPA_FRAME_SIZE,
|
avctx->frame_size,
|
||||||
s->buffer + s->buffer_index,
|
s->buffer + s->buffer_index,
|
||||||
BUFFER_SIZE - s->buffer_index
|
BUFFER_SIZE - s->buffer_index
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
s->buffer_index += lame_encode_buffer(
|
lame_result = lame_encode_buffer(
|
||||||
s->gfp,
|
s->gfp,
|
||||||
data,
|
data,
|
||||||
data,
|
data,
|
||||||
MPA_FRAME_SIZE,
|
avctx->frame_size,
|
||||||
s->buffer + s->buffer_index,
|
s->buffer + s->buffer_index,
|
||||||
BUFFER_SIZE - 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);
|
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){
|
if(len <= s->buffer_index){
|
||||||
memcpy(frame, s->buffer, len);
|
memcpy(frame, s->buffer, len);
|
||||||
s->buffer_index -= len;
|
s->buffer_index -= len;
|
||||||
|
Loading…
Reference in New Issue
Block a user