X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmp3enc.c;h=1200d0f2979b7abe784808bafdf12db3bfebb052;hb=7b2dba1c50c92c76f147727be7c27872252e29f6;hp=f02872d43535f06958cc5f5e101f8ecaa7404961;hpb=988f585fcb1cfb40fe4b706c32b31594b536bba0;p=ffmpeg diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index f02872d4353..1200d0f2979 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -19,7 +19,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include #include "avformat.h" #include "avio_internal.h" #include "id3v1.h" @@ -69,7 +68,7 @@ static int id3v1_create_tag(AVFormatContext *s, uint8_t *buf) buf[127] = 0xFF; /* default to unknown genre */ if ((tag = av_dict_get(s->metadata, "TCON", NULL, 0))) { //genre for(i = 0; i <= ID3v1_GENRE_MAX; i++) { - if (!strcasecmp(tag->value, ff_id3v1_genre_str[i])) { + if (!av_strcasecmp(tag->value, ff_id3v1_genre_str[i])) { buf[127] = i; count++; break; @@ -157,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; @@ -186,13 +187,21 @@ static int mp3_write_xing(AVFormatContext *s) header |= (srate_idx << 2) << 8; header |= channels << 6; - for (;;) { + 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; - mask = (bitrate_idx << 4) << 8; - header |= mask; - avpriv_mpegaudio_decode_header(&c, header); + avpriv_mpegaudio_decode_header(&c, header | (bitrate_idx << (4+8))); xing_offset=xing_offtbl[c.lsf == 1][c.nb_channels == 1]; needed = 4 // header + xing_offset @@ -204,9 +213,6 @@ static int mp3_write_xing(AVFormatContext *s) if (needed <= c.frame_size) break; - - header &= ~mask; - ++bitrate_idx; } avio_wb32(s->pb, header);