summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/demux/demux.c b/demux/demux.c
index aba950b9ab..f386c3c2ae 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -508,13 +508,19 @@ static void update_seek_ranges(struct demux_cached_range *range)
range->is_bof = true;
range->is_eof = true;
+ double min_start_pts = MP_NOPTS_VALUE;
double max_end_pts = MP_NOPTS_VALUE;
for (int n = 0; n < range->num_streams; n++) {
struct demux_queue *queue = range->streams[n];
if (queue->ds->selected && queue->ds->eager) {
- range->seek_start = MP_PTS_MAX(range->seek_start, queue->seek_start);
+ if (queue->is_bof) {
+ min_start_pts = MP_PTS_MIN(min_start_pts, queue->seek_start);
+ } else {
+ range->seek_start =
+ MP_PTS_MAX(range->seek_start, queue->seek_start);
+ }
if (queue->is_eof) {
max_end_pts = MP_PTS_MAX(max_end_pts, queue->seek_end);
@@ -533,6 +539,8 @@ static void update_seek_ranges(struct demux_cached_range *range)
if (range->is_eof)
range->seek_end = max_end_pts;
+ if (range->is_bof)
+ range->seek_start = min_start_pts;
// Sparse stream behavior is not very clearly defined, but usually we don't
// want it to restrict the range of other streams, unless