summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux/demuxer.c')
-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;
}