From 40176fc3149bc72c1309f93989a57aec2322e626 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 14 Nov 2011 20:57:30 +0100 Subject: mp3enc: Try to use a matching bitrate in the xing header. Might Fix Ticket431 Signed-off-by: Michael Niedermayer --- libavformat/mp3enc.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'libavformat/mp3enc.c') 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; -- cgit v1.2.3