This patch seems to be doing the wrong thing and breaking seek tests for us.
As far as I understand , seeking for most containers is based on "decoding timestamp". Unless AV_SEEK_TO_PTS flag is specified in container, which is not for most containers and MOV. So if PTS and DTS are like such, Pts Dts 0 -2 : frame0 1 -1 : frame1 2 0 : frame2 3 1 : frame3 ... Seeking to "0" timestamp without any flags, I should expect frame2 . But instead this patch will give me frame0 . The patch's intention seems to be seeking based on PTS (subtracting by the sc->time_offset essentially is a mapping from PTS to DTS) . To fix your specific issue https://trac.ffmpeg.org/ticket/6139 <https://www.google.com/url?q=https://trac.ffmpeg.org/ticket/6139&sa=D&usg=AFQjCNHI9l7YGXQI-LzJcyi5EWkH1PnaDw> , you can use AV_SEEK_BACKWARD flag while seeking in seek_to_start http://git.videolan.org/?p=ffmpeg.git;a=blob;f=fftools/ffmpeg.c;h=ee7258fcd1f65b6670f19686b51d5b41ee72f7ac;hb=HEAD#l4165 On Sun, Oct 29, 2017 at 4:11 AM, Peter Große <pe...@friiks.de> wrote: > From: Jonas Licht <jonas.li...@fem.tu-ilmenau.de> > > Subtract the calculated dts offset from the requested timestamp before > seeking. This fixes an error "Error while filtering: Operation not > permitted" observed with a short file which contains only one key frame > and starts with negative timestamps. > > Then, av_index_search_timestamp() returns a valid negative timestamp, > but mov_seek_stream bails out with AVERROR_INVALIDDATA. > > Fixes ticket #6139. > > Signed-off-by: Jonas Licht <jonas.li...@fem.tu-ilmenau.de> > Signed-off-by: Peter Große <pe...@friiks.de> > --- > > Compared to the other seek results in this test, the values are not > that far off. > > libavformat/mov.c | 6 ++++-- > tests/ref/seek/extra-mp4 | 16 ++++++++-------- > 2 files changed, 12 insertions(+), 10 deletions(-) > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index 2ee67561e4..60a0f4ccf4 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -6882,10 +6882,12 @@ static int mov_seek_fragment(AVFormatContext *s, > AVStream *st, int64_t timestamp > static int mov_seek_stream(AVFormatContext *s, AVStream *st, int64_t > timestamp, int flags) > { > MOVStreamContext *sc = st->priv_data; > - int sample, time_sample; > + int sample, time_sample, ret; > unsigned int i; > > - int ret = mov_seek_fragment(s, st, timestamp); > + timestamp -= sc->time_offset; > + > + ret = mov_seek_fragment(s, st, timestamp); > if (ret < 0) > return ret; > > diff --git a/tests/ref/seek/extra-mp4 b/tests/ref/seek/extra-mp4 > index c25544c095..c17ce4003c 100644 > --- a/tests/ref/seek/extra-mp4 > +++ b/tests/ref/seek/extra-mp4 > @@ -28,10 +28,10 @@ ret: 0 st: 0 flags:0 dts: 50.633333 pts: > 50.733333 pos:5926157 size: 13 > ret: 0 st: 0 flags:0 dts: 50.666667 pts: 50.666667 pos:5927464 > size: 150 > ret: 0 st: 0 flags:0 dts: 50.700000 pts: 50.700000 pos:5927614 > size: 176 > ret: 0 st:-1 flags:1 ts: 153.470835 > -ret: 0 st: 0 flags:1 dts: 153.466667 pts: 153.500000 pos:15867700 > size: 96169 > -ret: 0 st: 0 flags:0 dts: 153.500000 pts: 153.533333 pos:15963869 > size: 785 > -ret: 0 st: 0 flags:0 dts: 153.533333 pts: 153.633333 pos:15964654 > size: 3135 > -ret: 0 st: 0 flags:0 dts: 153.566667 pts: 153.566667 pos:15967789 > size: 859 > +ret: 0 st: 0 flags:1 dts: 151.966667 pts: 152.000000 pos:15705355 > size:146924 > +ret: 0 st: 0 flags:0 dts: 152.000000 pts: 152.100000 pos:15852279 > size: 1355 > +ret: 0 st: 0 flags:0 dts: 152.033333 pts: 152.033333 pos:15853634 > size: 211 > +ret: 0 st: 0 flags:0 dts: 152.066667 pts: 152.066667 pos:15853845 > size: 217 > ret: 0 st: 0 flags:0 ts: 76.365000 > ret: 0 st: 0 flags:1 dts: 77.833333 pts: 77.866667 pos:8659657 > size: 41182 > ret: 0 st: 0 flags:0 dts: 77.866667 pts: 77.966667 pos:8700839 > size: 4197 > @@ -83,10 +83,10 @@ ret: 0 st: 0 flags:0 dts: 101.333333 pts: > 101.433333 pos:11049548 size: > ret: 0 st: 0 flags:0 dts: 101.366667 pts: 101.366667 pos:11053072 > size: 562 > ret: 0 st: 0 flags:0 dts: 101.400000 pts: 101.400000 pos:11053634 > size: 599 > ret: 0 st:-1 flags:0 ts: 25.306672 > -ret: 0 st: 0 flags:1 dts: 27.400000 pts: 27.433333 pos:2674605 > size:127383 > -ret: 0 st: 0 flags:0 dts: 27.433333 pts: 27.466667 pos:2801988 > size: 68 > -ret: 0 st: 0 flags:0 dts: 27.466667 pts: 27.500000 pos:2802268 > size: 1754 > -ret: 0 st: 0 flags:0 dts: 27.500000 pts: 27.533333 pos:2804022 > size: 4071 > +ret: 0 st: 0 flags:1 dts: 25.300000 pts: 25.333333 pos:2607246 > size: 40273 > +ret: 0 st: 0 flags:0 dts: 25.333333 pts: 25.433333 pos:2647519 > size: 2959 > +ret: 0 st: 0 flags:0 dts: 25.366667 pts: 25.366667 pos:2650478 > size: 197 > +ret: 0 st: 0 flags:0 dts: 25.400000 pts: 25.400000 pos:2650675 > size: 230 > ret: 0 st:-1 flags:1 ts: 128.200839 > ret: 0 st: 0 flags:1 dts: 127.833333 pts: 127.866667 pos:13514072 > size: 67382 > ret: 0 st: 0 flags:0 dts: 127.866667 pts: 127.966667 pos:13581454 > size: 2936 > -- > 2.13.6 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel