From f7516094500c543349fde0498c41bfcc72f21d2c Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 25 Dec 2013 11:24:37 +0100 Subject: player: fix initial selection with --secondary-sid Also, make sure that a track can't be selected twice. While this might work in some situations, it certainly won't work with subtitles demuxed from a stream. Fixes #425. --- player/loadfile.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'player') diff --git a/player/loadfile.c b/player/loadfile.c index 99b669f109..251112975f 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -607,6 +607,12 @@ void mp_switch_track_n(struct MPContext *mpctx, int order, enum stream_type type if (track == current) return; + if (track && track->selected) { + // Track has been selected in a different order parameter. + MP_ERR(mpctx, "Track %d is already selected.\n", track->user_tid); + return; + } + if (order == 0) { if (type == STREAM_VIDEO) { int uninit = INITIALIZED_VCODEC; @@ -1193,9 +1199,21 @@ goto_reopen_demuxer: ; mpctx->current_track[0][STREAM_SUB] = select_track(mpctx, STREAM_SUB, mpctx->opts->sub_id, mpctx->opts->sub_lang); - for (int t = 0; t < mpctx->num_tracks; t++) { - struct track *track = mpctx->tracks[t]; - track->selected = track == mpctx->current_track[0][track->type]; + mpctx->current_track[1][STREAM_SUB] = + select_track(mpctx, STREAM_SUB, mpctx->opts->sub2_id, NULL); + for (int t = 0; t < STREAM_TYPE_COUNT; t++) { + for (int i = 0; i < NUM_PTRACKS; i++) { + struct track *track = mpctx->current_track[i][t]; + if (track) { + if (track->selected) { + MP_ERR(mpctx, "Track %d can't be selected twice.\n", + track->user_tid); + mpctx->current_track[i][t] = NULL; + } else { + track->selected = true; + } + } + } } reselect_demux_streams(mpctx); -- cgit v1.2.3