summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux/demux_mpg.c')
-rw-r--r--libmpdemux/demux_mpg.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c
index acd70c6562..7f975b9589 100644
--- a/libmpdemux/demux_mpg.c
+++ b/libmpdemux/demux_mpg.c
@@ -643,6 +643,8 @@ int demux_mpg_control(demuxer_t *demuxer,int cmd, void *arg){
sh_audio_t *sh_audio = d_audio->sh;
sh_audio_t *sh_a;
int i;
+ if (*((int*)arg) < 0)
+ {
for (i = 0; i < mpg_d->num_a_streams; i++) {
if (d_audio->id == mpg_d->a_stream_ids[i]) break;
}
@@ -650,13 +652,22 @@ int demux_mpg_control(demuxer_t *demuxer,int cmd, void *arg){
i = (i+1) % mpg_d->num_a_streams;
sh_a = (sh_audio_t*)demuxer->a_streams[mpg_d->a_stream_ids[i]];
} while (sh_a->format != sh_audio->format);
- if (d_audio->id != mpg_d->a_stream_ids[i]) {
+ }
+ else {
+ for (i = 0; i < mpg_d->num_a_streams; i++)
+ if (*((int*)arg) == mpg_d->a_stream_ids[i]) break;
+ if (i < mpg_d->num_a_streams)
+ sh_a = (sh_audio_t*)demuxer->a_streams[*((int*)arg)];
+ if (sh_a->format != sh_audio->format)
+ i = mpg_d->num_a_streams;
+ }
+ if (i < mpg_d->num_a_streams && d_audio->id != mpg_d->a_stream_ids[i]) {
d_audio->id = mpg_d->a_stream_ids[i];
d_audio->sh = sh_a;
ds_free_packs(d_audio);
}
- *((int *)arg)=(int)d_audio->id;
}
+ *((int*)arg) = demuxer->audio->id;
return DEMUXER_CTRL_OK;
default: