summaryrefslogtreecommitdiffstats
path: root/command.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@mplayer2.org>2011-03-30 23:22:45 +0300
committerUoti Urpala <uau@mplayer2.org>2011-03-31 00:13:36 +0300
commitdf31b077b485da9084609806a92d5be2c37c1359 (patch)
treecd3ac8b8090b4368c7e11328b79a6642a53435ed /command.c
parent5c731e2ea669bbc732e51dc95c1ec68cc41050e6 (diff)
downloadmpv-df31b077b485da9084609806a92d5be2c37c1359.tar.bz2
mpv-df31b077b485da9084609806a92d5be2c37c1359.tar.xz
core, demux: fix video index handling in stream switching
Fix bugs in the handling of stream index values in video stream switching. This is similar to what commit 90bedd0b872b6eea02351aafb62e did for audio. Also clean up the corresponding audio code a little bit.
Diffstat (limited to 'command.c')
-rw-r--r--command.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/command.c b/command.c
index bc6aa3c818..48f6108a2c 100644
--- a/command.c
+++ b/command.c
@@ -991,8 +991,8 @@ static int mp_property_audio(m_option_t *prop, int action, void *arg,
uninit_player(mpctx, INITIALIZED_AO | INITIALIZED_ACODEC);
if (new_id != current_id && new_id >= 0) {
sh_audio_t *sh2;
- sh2 = mpctx->d_audio->demuxer->a_streams[mpctx->demuxer->audio->id];
- sh2->ds = mpctx->demuxer->audio;
+ sh2 = mpctx->d_audio->demuxer->a_streams[mpctx->d_audio->id];
+ sh2->ds = mpctx->d_audio;
mpctx->sh_audio = sh2;
reinit_audio_chain(mpctx);
}
@@ -1012,7 +1012,7 @@ static int mp_property_video(m_option_t *prop, int action, void *arg,
int current_id, tmp;
if (!mpctx->demuxer || !mpctx->d_video)
return M_PROPERTY_UNAVAILABLE;
- current_id = mpctx->d_video->id;
+ current_id = mpctx->sh_video ? mpctx->sh_video->vid : -2;
switch (action) {
case M_PROPERTY_GET:
@@ -1040,22 +1040,18 @@ static int mp_property_video(m_option_t *prop, int action, void *arg,
tmp = *((int *) arg);
else
tmp = -1;
- opts->video_id = demuxer_switch_video(mpctx->d_video->demuxer, tmp);
- if (opts->video_id == -2
- || (opts->video_id > -1 && mpctx->d_video->id != current_id
- && current_id != -2))
+ int new_id = demuxer_switch_video(mpctx->d_video->demuxer, tmp);
+ if (new_id != current_id)
uninit_player(mpctx, INITIALIZED_VCODEC |
- (mpctx->opts.fixed_vo && opts->video_id != -2 ? 0 : INITIALIZED_VO));
- if (opts->video_id > -1 && mpctx->d_video->id != current_id) {
+ (opts->fixed_vo && new_id >= 0 ? 0 : INITIALIZED_VO));
+ if (new_id != current_id && new_id >= 0) {
sh_video_t *sh2;
sh2 = mpctx->d_video->demuxer->v_streams[mpctx->d_video->id];
- if (sh2) {
- sh2->ds = mpctx->d_video;
- mpctx->sh_video = sh2;
- reinit_video_chain(mpctx);
- }
+ sh2->ds = mpctx->d_video;
+ mpctx->sh_video = sh2;
+ reinit_video_chain(mpctx);
}
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_TRACK=%d\n", opts->video_id);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_VIDEO_TRACK=%d\n", new_id);
return M_PROPERTY_OK;
default: