[FFmpeg-devel] [PATCH] avformat/mp3dec: Adjust returned timestamp in the CBR seeking case
wm4
nfxjfg at googlemail.com
Mon Apr 20 21:47:33 CEST 2015
On Mon, 20 Apr 2015 21:25:44 +0200
Michael Niedermayer <michaelni at gmx.at> wrote:
> With this the returned timestamp should match the packet instead of
> the requested timestamp, which may lay between packets
>
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
> libavformat/mp3dec.c | 6 ++++++
> tests/ref/fate/gapless-mp3-notoc | 2 +-
> 2 files changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> index 06bc1d0..89990ec 100644
> --- a/libavformat/mp3dec.c
> +++ b/libavformat/mp3dec.c
> @@ -489,6 +489,12 @@ static int mp3_seek(AVFormatContext *s, int stream_index, int64_t timestamp,
> ret = avio_seek(s->pb, best_pos, SEEK_SET);
> if (ret < 0)
> return ret;
> +
> + if (mp3->is_cbr && ie == &ie1) {
> + int frame_duration = av_rescale(st->duration, 1, mp3->frames);
Why use av_rescale here? Shouldn't a normal division work fine?
> + ie1.timestamp = frame_duration * (av_rescale(best_pos - s->internal->data_offset, mp3->frames, mp3->header_filesize));
Redundant ( ) ?
> + }
> +
> ff_update_cur_dts(s, st, ie->timestamp);
> st->skip_samples = ie->timestamp <= 0 ? mp3->start_pad + 528 + 1 : 0;
> return 0;
> diff --git a/tests/ref/fate/gapless-mp3-notoc b/tests/ref/fate/gapless-mp3-notoc
> index f52efff..936d0ba 100644
> --- a/tests/ref/fate/gapless-mp3-notoc
> +++ b/tests/ref/fate/gapless-mp3-notoc
> @@ -2,4 +2,4 @@ d5c88cf38416329a052a9b0cb140fb4c *tests/data/fate/gapless-mp3-notoc.out-1
> c96c3ae7bd3300fd2f4debac222de5b7
> 3386bc2009b31b7ef39247918cbb02a5 *tests/data/fate/gapless-mp3-notoc.out-2
> c96c3ae7bd3300fd2f4debac222de5b7
> -e82eaed507ce3f7f6199918159e1ddd7 *tests/data/fate/gapless-mp3-notoc.out-3
> +92e37f050ad4fc817730c8af17ee6d1b *tests/data/fate/gapless-mp3-notoc.out-3
Maybe there's no better way for now. Did you look at (or listen to) the
output? Does it improve?
More information about the ffmpeg-devel
mailing list