summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-11-10 10:15:37 +0100
committerwm4 <wm4@nowhere>2017-11-10 10:15:37 +0100
commitd3bc93cf2e28c346c80f8545cfe765dadf821ae0 (patch)
tree792c47d137facc86d63ceb9b8b5b49bf69885ebf /demux
parent4a6b04bdb9305642bda5cf5695d0e303a002b132 (diff)
downloadmpv-d3bc93cf2e28c346c80f8545cfe765dadf821ae0.tar.bz2
mpv-d3bc93cf2e28c346c80f8545cfe765dadf821ae0.tar.xz
demux: get rid of an unnecessary field
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c28
1 files changed, 13 insertions, 15 deletions
diff --git a/demux/demux.c b/demux/demux.c
index f461785b05..7f34fa0fc9 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -248,7 +248,6 @@ struct demux_stream {
bool eager; // try to keep at least 1 packet queued
// if false, this stream is disabled, or passively
// read (like subtitles)
- bool need_refresh; // enabled mid-stream
bool refreshing;
bool global_correct_dts;// all observed so far
@@ -535,7 +534,6 @@ static void update_stream_selection_state(struct demux_internal *in,
{
ds->eof = false;
ds->refreshing = false;
- ds->need_refresh = false;
ds_clear_reader_state(ds);
@@ -1067,7 +1065,7 @@ void demux_add_packet(struct sh_stream *stream, demux_packet_t *dp)
}
}
- if (!ds->selected || ds->need_refresh || in->seeking || drop) {
+ if (!ds->selected || in->seeking || drop) {
pthread_mutex_unlock(&in->lock);
talloc_free(dp);
return;
@@ -2117,7 +2115,7 @@ static void switch_current_range(struct demux_internal *in,
struct demux_stream *ds = in->streams[n]->ds;
ds->queue = range->streams[n];
- ds->refreshing = ds->need_refresh = false;
+ ds->refreshing = false;
ds->eof = false;
}
@@ -2343,13 +2341,14 @@ struct sh_stream *demuxer_stream_by_demuxer_id(struct demuxer *d,
// current position
// On a switch, it seeks back, and then grabs all packets that were
// "missing" from the packet queue of the newly selected stream.
-static void initiate_refresh_seek(struct demux_internal *in, double start_ts)
+static void initiate_refresh_seek(struct demux_internal *in,
+ struct demux_stream *stream,
+ double start_ts)
{
struct demuxer *demux = in->d_thread;
bool seekable = demux->desc->seek && demux->seekable &&
!demux->partially_seekable;
- bool needed = false;
bool normal_seek = true;
bool refresh_possible = true;
for (int n = 0; n < in->num_streams; n++) {
@@ -2361,15 +2360,13 @@ static void initiate_refresh_seek(struct demux_internal *in, double start_ts)
if (ds->type == STREAM_VIDEO || ds->type == STREAM_AUDIO)
start_ts = MP_PTS_MIN(start_ts, ds->base_ts);
- needed |= ds->need_refresh;
// If there were no other streams selected, we can use a normal seek.
- normal_seek &= ds->need_refresh;
- ds->need_refresh = false;
+ normal_seek &= stream == ds;
refresh_possible &= ds->queue->correct_dts || ds->queue->correct_pos;
}
- if (!needed || start_ts == MP_NOPTS_VALUE || !seekable)
+ if (start_ts == MP_NOPTS_VALUE || !seekable)
return;
if (!normal_seek) {
@@ -2402,14 +2399,15 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
double ref_pts, bool selected)
{
struct demux_internal *in = demuxer->in;
+ struct demux_stream *ds = stream->ds;
pthread_mutex_lock(&in->lock);
// don't flush buffers if stream is already selected / unselected
- if (stream->ds->selected != selected) {
- stream->ds->selected = selected;
- update_stream_selection_state(in, stream->ds);
+ if (ds->selected != selected) {
+ ds->selected = selected;
+ update_stream_selection_state(in, ds);
in->tracks_switched = true;
- stream->ds->need_refresh = selected && !in->initial_state;
- initiate_refresh_seek(in, MP_ADD_PTS(ref_pts, -in->ts_offset));
+ if (ds->selected && !in->initial_state)
+ initiate_refresh_seek(in, ds, MP_ADD_PTS(ref_pts, -in->ts_offset));
if (in->threading) {
pthread_cond_signal(&in->wakeup);
} else {