|
|
@ -156,7 +156,9 @@ static int mp3_write_xing(AVFormatContext *s) |
|
|
|
{ |
|
|
|
{ |
|
|
|
AVCodecContext *codec = s->streams[0]->codec; |
|
|
|
AVCodecContext *codec = s->streams[0]->codec; |
|
|
|
MP3Context *mp3 = s->priv_data; |
|
|
|
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; |
|
|
|
int64_t xing_offset; |
|
|
|
int32_t mask, header; |
|
|
|
int32_t mask, header; |
|
|
|
MPADecodeHeader c; |
|
|
|
MPADecodeHeader c; |
|
|
@ -185,7 +187,17 @@ static int mp3_write_xing(AVFormatContext *s) |
|
|
|
header |= (srate_idx << 2) << 8; |
|
|
|
header |= (srate_idx << 2) << 8; |
|
|
|
header |= channels << 6; |
|
|
|
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) |
|
|
|
if (15 == bitrate_idx) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
|
|
|
|
|
|
|
|