diff options
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r-- | libmpdemux/demuxer.c | 14 |
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; } |