diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 3f2f02b943..1200d0f297 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -156,7 +156,9 @@ static int mp3_write_xing(AVFormatContext *s) { AVCodecContext *codec = s->streams[0]->codec; MP3Context *mp3 = s->priv_data; - int bitrate_idx = 3; + int bitrate_idx; + int best_bitrate_idx; + int best_bitrate_error= INT_MAX; int64_t xing_offset; int32_t mask, header; MPADecodeHeader c; @@ -185,7 +187,17 @@ static int mp3_write_xing(AVFormatContext *s) header |= (srate_idx << 2) << 8; header |= channels << 6; - for (;; bitrate_idx++) { + for (bitrate_idx=1; bitrate_idx<15; bitrate_idx++) { + int error; + avpriv_mpegaudio_decode_header(&c, header | (bitrate_idx << (4+8))); + error= FFABS(c.bit_rate - codec->bit_rate); + if(error < best_bitrate_error){ + best_bitrate_error= error; + best_bitrate_idx = bitrate_idx; + } + } + + for (bitrate_idx= best_bitrate_idx;; bitrate_idx++) { if (15 == bitrate_idx) return -1;