ffmpeg | branch: master | wm4 <[email protected]> | Fri Apr 17 17:27:00 2015 +0200| [92eef26e67ea8d2265854594344f8db17b9ce299] | committer: Michael Niedermayer
avformat/mp3dec: fix gapless audio when seeking in CBR mode Removing a bunch of questionable hacks makes it work. These hacks apparently try to make concatenated mp3s with Lame headers seekable, which doesn't make too much sense anyway. The main change is that we trust the Xing header file size field now (the same field is used for seeking with Xing TOC). Note that a mp3 might contain an unknown number of unsupported additional tags, so we can't reliably compute this size manually. Signed-off-by: Michael Niedermayer <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=92eef26e67ea8d2265854594344f8db17b9ce299 --- libavformat/mp3dec.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c index 1692d88..06bc1d0 100644 --- a/libavformat/mp3dec.c +++ b/libavformat/mp3dec.c @@ -437,16 +437,10 @@ static int mp3_seek(AVFormatContext *s, int stream_index, int64_t timestamp, && st->duration > 0 && mp3->header_filesize > s->internal->data_offset && mp3->frames) { - int64_t filesize = avio_size(s->pb); - int64_t duration; - if (filesize <= s->internal->data_offset) - filesize = mp3->header_filesize; - filesize -= s->internal->data_offset; - duration = av_rescale(st->duration, filesize, mp3->header_filesize - s->internal->data_offset); ie = &ie1; - timestamp = av_clip64(timestamp, 0, duration); + timestamp = av_clip64(timestamp, 0, st->duration); ie->timestamp = timestamp; - ie->pos = av_rescale(timestamp, filesize, duration) + s->internal->data_offset; + ie->pos = av_rescale(timestamp, mp3->header_filesize, st->duration) + s->internal->data_offset; } else if (mp3->xing_toc) { if (ret < 0) return ret; _______________________________________________ ffmpeg-cvslog mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
