summaryrefslogtreecommitdiffstats
path: root/player/playloop.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-12-23 20:14:54 +0100
committerwm4 <wm4@nowhere>2013-12-24 17:44:34 +0100
commitb796f2bb7693676056d0de98a9a95258909d799b (patch)
treea7c23c5a39b7cb817c911b68854e6304bfe7ea19 /player/playloop.c
parent96e6f3f4b6a7379fac6b61c741c57ccfc062f915 (diff)
downloadmpv-b796f2bb7693676056d0de98a9a95258909d799b.tar.bz2
mpv-b796f2bb7693676056d0de98a9a95258909d799b.tar.xz
player: redo demuxer stream selection
Use struct track to decide what stream to select. Add a "selected" field and use that in some places instead of checking mpctx->current_track.
Diffstat (limited to 'player/playloop.c')
-rw-r--r--player/playloop.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/player/playloop.c b/player/playloop.c
index 9078853fb5..1a38f74cd8 100644
--- a/player/playloop.c
+++ b/player/playloop.c
@@ -301,9 +301,10 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek,
// If audio or demuxer subs come from different files, seek them too:
bool have_external_tracks = false;
- for (int type = 0; type < STREAM_TYPE_COUNT; type++) {
- struct track *track = mpctx->current_track[type];
- have_external_tracks |= track && track->is_external && track->demuxer;
+ for (int t = 0; t < mpctx->num_tracks; t++) {
+ struct track *track = mpctx->tracks[t];
+ have_external_tracks |= track->selected && track->is_external &&
+ track->demuxer;
}
if (have_external_tracks) {
double main_new_pos;
@@ -312,9 +313,9 @@ static int mp_seek(MPContext *mpctx, struct seek_params seek,
} else {
main_new_pos = get_main_demux_pts(mpctx);
}
- for (int type = 0; type < STREAM_TYPE_COUNT; type++) {
- struct track *track = mpctx->current_track[type];
- if (track && track->is_external && track->demuxer)
+ for (int t = 0; t < mpctx->num_tracks; t++) {
+ struct track *track = mpctx->tracks[t];
+ if (track->selected && track->is_external && track->demuxer)
demux_seek(track->demuxer, main_new_pos, SEEK_ABSOLUTE);
}
}
@@ -1027,7 +1028,6 @@ void run_playloop(struct MPContext *mpctx)
if (!opts->force_vo)
uninit |= INITIALIZED_VO;
uninit_player(mpctx, uninit);
- mpctx->current_track[STREAM_VIDEO] = NULL;
if (!mpctx->current_track[STREAM_AUDIO])
mpctx->stop_play = PT_NEXT_ENTRY;
mpctx->error_playing = true;