diff options
author | sfan5 <sfan5@live.de> | 2020-11-19 15:07:53 +0100 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2020-11-27 17:28:59 +0100 |
commit | 10fbd305c87b04b14f811d1eab820a3f3fdc1a3f (patch) | |
tree | e0025975781e26936d44fcabfdaee44bc78f59a4 | |
parent | 4d80314c5c8838cf04bc53b75a123d281f8d30a3 (diff) | |
download | mpv-10fbd305c87b04b14f811d1eab820a3f3fdc1a3f.tar.bz2 mpv-10fbd305c87b04b14f811d1eab820a3f3fdc1a3f.tar.xz |
demux: add function to refresh a track without (de-)selecting it
-rw-r--r-- | demux/demux.c | 20 | ||||
-rw-r--r-- | demux/demux.h | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/demux/demux.c b/demux/demux.c index e4dda43cf0..348d665d49 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -3970,6 +3970,26 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream, pthread_mutex_unlock(&in->lock); } +// Execute a refresh seek on the given stream. +// ref_pts has the same meaning as with demuxer_select_track() +void demuxer_refresh_track(struct demuxer *demuxer, struct sh_stream *stream, + double ref_pts) +{ + struct demux_internal *in = demuxer->in; + struct demux_stream *ds = stream->ds; + pthread_mutex_lock(&in->lock); + ref_pts = MP_ADD_PTS(ref_pts, -in->ts_offset); + if (ds->selected) { + MP_VERBOSE(in, "refresh track %d\n", stream->index); + update_stream_selection_state(in, ds); + if (in->back_demuxing) + ds->back_seek_pos = ref_pts; + if (!in->after_seek) + initiate_refresh_seek(in, ds, ref_pts); + } + pthread_mutex_unlock(&in->lock); +} + // This is for demuxer implementations only. demuxer_select_track() sets the // logical state, while this function returns the actual state (in case the // demuxer attempts to cache even unselected packets for track switching - this diff --git a/demux/demux.h b/demux/demux.h index f49e6e2a2f..80c9a80fc7 100644 --- a/demux/demux.h +++ b/demux/demux.h @@ -290,6 +290,8 @@ void demux_block_reading(struct demuxer *demuxer, bool block); void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream, double ref_pts, bool selected); +void demuxer_refresh_track(struct demuxer *demuxer, struct sh_stream *stream, + double ref_pts); void demuxer_help(struct mp_log *log); |