diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 251f263e91..3a59efcd0f 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -255,32 +255,6 @@ static void mp3_xing_add_frame(MP3Context *mp3, AVPacket *pkt) } } -static void mp3_update_xing(AVFormatContext *s) -{ - MP3Context *mp3 = s->priv_data; - int i; - - /* replace "Xing" identification string with "Info" for CBR files. */ - if (!mp3->has_variable_bitrate) { - avio_seek(s->pb, mp3->xing_offset, SEEK_SET); - ffio_wfourcc(s->pb, "Info"); - } - - avio_seek(s->pb, mp3->xing_offset + 8, SEEK_SET); - avio_wb32(s->pb, mp3->frames); - avio_wb32(s->pb, mp3->size); - - avio_w8(s->pb, 0); // first toc entry has to be zero. - - for (i = 1; i < XING_TOC_SIZE; ++i) { - int j = i * mp3->pos / XING_TOC_SIZE; - int seek_point = 256LL * mp3->bag[j] / mp3->size; - avio_w8(s->pb, FFMIN(seek_point, 255)); - } - - avio_seek(s->pb, 0, SEEK_END); -} - static int mp3_write_audio_packet(AVFormatContext *s, AVPacket *pkt) { MP3Context *mp3 = s->priv_data; @@ -341,6 +315,32 @@ static int mp3_queue_flush(AVFormatContext *s) return ret; } +static void mp3_update_xing(AVFormatContext *s) +{ + MP3Context *mp3 = s->priv_data; + int i; + + /* replace "Xing" identification string with "Info" for CBR files. */ + if (!mp3->has_variable_bitrate) { + avio_seek(s->pb, mp3->xing_offset, SEEK_SET); + ffio_wfourcc(s->pb, "Info"); + } + + avio_seek(s->pb, mp3->xing_offset + 8, SEEK_SET); + avio_wb32(s->pb, mp3->frames); + avio_wb32(s->pb, mp3->size); + + avio_w8(s->pb, 0); // first toc entry has to be zero. + + for (i = 1; i < XING_TOC_SIZE; ++i) { + int j = i * mp3->pos / XING_TOC_SIZE; + int seek_point = 256LL * mp3->bag[j] / mp3->size; + avio_w8(s->pb, FFMIN(seek_point, 255)); + } + + avio_seek(s->pb, 0, SEEK_END); +} + static int mp2_write_trailer(struct AVFormatContext *s) { uint8_t buf[ID3v1_TAG_SIZE];