summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index 14d2c85f67..71e75e2efb 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1407,10 +1407,15 @@ int demuxer_get_percent_pos(demuxer_t *demuxer)
int demuxer_switch_audio(demuxer_t *demuxer, int index)
{
int res = demux_control(demuxer, DEMUXER_CTRL_SWITCH_AUDIO, &index);
- if (res == DEMUXER_CTRL_NOTIMPL)
- index = demuxer->audio->id;
- if (demuxer->audio->id >= 0)
- demuxer->audio->sh = demuxer->a_streams[demuxer->audio->id];
+ if (res == DEMUXER_CTRL_NOTIMPL) {
+ struct sh_audio *sh_audio = demuxer->audio->sh;
+ return sh_audio ? sh_audio->aid : -2;
+ }
+ if (demuxer->audio->id >= 0) {
+ struct sh_audio *sh_audio = demuxer->a_streams[demuxer->audio->id];
+ demuxer->audio->sh = sh_audio;
+ index = sh_audio->aid; // internal MPEG demuxers don't set it right
+ }
else
demuxer->audio->sh = NULL;
return index;