summaryrefslogtreecommitdiffstats
path: root/libmpdemux
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 /libmpdemux
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 'libmpdemux')
-rw-r--r--libmpdemux/demuxer.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 6607f2399f..9b38af9452 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1351,11 +1351,15 @@ int demuxer_switch_audio(demuxer_t *demuxer, int index)
int demuxer_switch_video(demuxer_t *demuxer, int index)
{
int res = demux_control(demuxer, DEMUXER_CTRL_SWITCH_VIDEO, &index);
- if (res == DEMUXER_CTRL_NOTIMPL)
- index = demuxer->video->id;
- if (demuxer->video->id >= 0)
- demuxer->video->sh = demuxer->v_streams[demuxer->video->id];
- else
+ if (res == DEMUXER_CTRL_NOTIMPL) {
+ struct sh_video *sh_video = demuxer->video->sh;
+ return sh_video ? sh_video->vid : -2;
+ }
+ if (demuxer->video->id >= 0) {
+ struct sh_video *sh_video = demuxer->v_streams[demuxer->video->id];
+ demuxer->video->sh = sh_video;
+ index = sh_video->vid; // internal MPEG demuxers don't set it right
+ } else
demuxer->video->sh = NULL;
return index;
}