summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-09-03 10:10:57 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-09-03 10:10:57 +0000
commit2e802cf8558d1ca44c053166fc26022d50818ae5 (patch)
tree0c6578a730fe0f16f6ca6809b06cf3ae889183e4 /libmpdemux/demux_mkv.c
parent1fea69c459cd946615ffe09a36e8de4f9b45cbd2 (diff)
downloadmpv-2e802cf8558d1ca44c053166fc26022d50818ae5.tar.bz2
mpv-2e802cf8558d1ca44c053166fc26022d50818ae5.tar.xz
Fix crash on DEMUXER_CTRL_SWITCH_AUDIO introduced by aid_vid_mismatch patch
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19651 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_mkv.c')
-rw-r--r--libmpdemux/demux_mkv.c39
1 files changed, 14 insertions, 25 deletions
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index e989a6a3d5..331eb108f9 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -3759,32 +3759,21 @@ demux_mkv_control (demuxer_t *demuxer, int cmd, void *arg)
case DEMUXER_CTRL_SWITCH_AUDIO:
if (demuxer->audio && demuxer->audio->sh) {
- int i;
- demux_stream_t *d_audio = demuxer->audio;
- int idx = d_audio->id - 1; // track ids are 1 based
- mkv_track_t *otrack = mkv_d->tracks[idx];
- mkv_track_t *track = 0;
- if (*((int*)arg) < 0)
- for(i = 0; i < mkv_d->last_aid; i++) {
- if(mkv_d->audio_tracks[i] == d_audio->id) {
- idx = mkv_d->audio_tracks[(i+1) % mkv_d->last_aid] - 1;
- track = mkv_d->tracks[idx];
- if(! track)
- continue;
- if (track->type == MATROSKA_TRACK_AUDIO) break;
- }
- }
- else {
- track = demux_mkv_find_track_by_num (mkv_d, *((int*)arg), MATROSKA_TRACK_AUDIO);
- if (track == NULL)
- track = otrack;
- }
- if (track != otrack) {
- d_audio->id = track->tnum;
- ds_free_packs(d_audio);
+ sh_audio_t *sh = demuxer->a_streams[demuxer->audio->id];
+ int aid = *(int*)arg;
+ if (aid < 0)
+ aid = (sh->aid + 1) % mkv_d->last_aid;
+ if (aid != sh->aid) {
+ mkv_track_t *track = demux_mkv_find_track_by_num (mkv_d, aid, MATROSKA_TRACK_AUDIO);
+ if (track) {
+ demuxer->audio->id = track->tnum;
+ sh = demuxer->a_streams[demuxer->audio->id];
+ ds_free_packs(demuxer->audio);
+ }
}
- }
- *((int*)arg) = demuxer->audio->id;
+ *(int*)arg = sh->aid;
+ } else
+ *(int*)arg = -2;
return DEMUXER_CTRL_OK;
default: