summaryrefslogtreecommitdiffstats
path: root/demux/demux_lavf.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_lavf.c')
-rw-r--r--demux/demux_lavf.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index a6f51dc5f3..e2221135f4 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -953,30 +953,15 @@ static void demux_seek_lavf(demuxer_t *demuxer, double seek_pts, int flags)
seek_pts_av = seek_pts * AV_TIME_BASE;
}
- int r;
- if (!priv->avfc->iformat->read_seek2) {
- // Normal seeking.
+ int r = av_seek_frame(priv->avfc, -1, seek_pts_av, avsflags);
+ if (r < 0 && (avsflags & AVSEEK_FLAG_BACKWARD)) {
+ // When seeking before the beginning of the file, and seeking fails,
+ // try again without the backwards flag to make it seek to the
+ // beginning.
+ avsflags &= ~AVSEEK_FLAG_BACKWARD;
r = av_seek_frame(priv->avfc, -1, seek_pts_av, avsflags);
- if (r < 0 && (avsflags & AVSEEK_FLAG_BACKWARD)) {
- // When seeking before the beginning of the file, and seeking fails,
- // try again without the backwards flag to make it seek to the
- // beginning.
- avsflags &= ~AVSEEK_FLAG_BACKWARD;
- r = av_seek_frame(priv->avfc, -1, seek_pts_av, avsflags);
- }
- } else {
- // av_seek_frame() won't work. Use "new" seeking API. We don't use this
- // API by default, because there are some major issues.
- // Set max_ts==ts, so that demuxing starts from an earlier position in
- // the worst case.
- r = avformat_seek_file(priv->avfc, -1, INT64_MIN,
- seek_pts_av, seek_pts_av, avsflags);
- // Similar issue as in the normal seeking codepath.
- if (r < 0) {
- r = avformat_seek_file(priv->avfc, -1, INT64_MIN,
- seek_pts_av, INT64_MAX, avsflags);
- }
}
+
if (r < 0) {
char buf[180];
av_strerror(r, buf, sizeof(buf));