From df31b077b485da9084609806a92d5be2c37c1359 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Wed, 30 Mar 2011 23:22:45 +0300 Subject: 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. --- libmpdemux/demuxer.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'libmpdemux/demuxer.c') 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; } -- cgit v1.2.3