summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-11-10 04:08:15 +0100
committerwm4 <wm4@nowhere>2017-11-10 04:08:15 +0100
commita0b6f805f908e62423365969adc5cf3a921464a0 (patch)
treebbe67b7d82206a3c1c4b81ff034832031fc95e8e
parent8c5ef330440889b32b1ed69f1499341c3acea300 (diff)
downloadmpv-a0b6f805f908e62423365969adc5cf3a921464a0.tar.bz2
mpv-a0b6f805f908e62423365969adc5cf3a921464a0.tar.xz
demux: simplify a function
update_stream_selection_state() doesn't need all these arguments. Not sure what I was thinking here.
-rw-r--r--demux/demux.c40
1 files changed, 19 insertions, 21 deletions
diff --git a/demux/demux.c b/demux/demux.c
index f100b1900a..3d24bc76e1 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -506,32 +506,28 @@ static void ds_clear_reader_state(struct demux_stream *ds)
}
static void update_stream_selection_state(struct demux_internal *in,
- struct demux_stream *ds,
- bool selected, bool new)
+ struct demux_stream *ds)
{
- if (ds->selected != selected || new) {
- ds->selected = selected;
- ds->eof = false;
- ds->refreshing = false;
- ds->need_refresh = false;
+ ds->eof = false;
+ ds->refreshing = false;
+ ds->need_refresh = false;
- ds_clear_reader_state(ds);
+ ds_clear_reader_state(ds);
- // Make sure any stream reselection or addition is reflected in the seek
- // ranges, and also get rid of data that is not needed anymore (or
- // rather, which can't be kept consistent).
- for (int n = 0; n < in->num_ranges; n++) {
- struct demux_cached_range *range = in->ranges[n];
-
- if (!ds->selected)
- clear_queue(range->streams[ds->index]);
+ // Make sure any stream reselection or addition is reflected in the seek
+ // ranges, and also get rid of data that is not needed anymore (or
+ // rather, which can't be kept consistent).
+ for (int n = 0; n < in->num_ranges; n++) {
+ struct demux_cached_range *range = in->ranges[n];
- update_seek_ranges(range);
- }
+ if (!ds->selected)
+ clear_queue(range->streams[ds->index]);
- free_empty_cached_ranges(in);
+ update_seek_ranges(range);
}
+ free_empty_cached_ranges(in);
+
// We still have to go over the whole stream list to update ds->eager for
// other streams too, because they depend on other stream's selections.
@@ -616,6 +612,7 @@ static void demux_add_sh_stream_locked(struct demux_internal *in,
.sh = sh,
.type = sh->type,
.index = sh->index,
+ .selected = in->autoselect,
.global_correct_dts = true,
.global_correct_pos = true,
};
@@ -641,7 +638,7 @@ static void demux_add_sh_stream_locked(struct demux_internal *in,
sh->ds->queue = in->current_range->streams[sh->ds->index];
- update_stream_selection_state(in, sh->ds, in->autoselect, true);
+ update_stream_selection_state(in, sh->ds);
in->events |= DEMUX_EVENT_STREAMS;
if (in->wakeup_cb)
@@ -2379,7 +2376,8 @@ void demuxer_select_track(struct demuxer *demuxer, struct sh_stream *stream,
pthread_mutex_lock(&in->lock);
// don't flush buffers if stream is already selected / unselected
if (stream->ds->selected != selected) {
- update_stream_selection_state(in, stream->ds, selected, false);
+ stream->ds->selected = selected;
+ update_stream_selection_state(in, stream->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));