You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
mp3enc: Try to use a matching bitrate in the xing header.
Might Fix Ticket431 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user