diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-09-03 10:10:57 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-09-03 10:10:57 +0000 |
commit | 2e802cf8558d1ca44c053166fc26022d50818ae5 (patch) | |
tree | 0c6578a730fe0f16f6ca6809b06cf3ae889183e4 /libmpdemux/demux_mkv.c | |
parent | 1fea69c459cd946615ffe09a36e8de4f9b45cbd2 (diff) | |
download | mpv-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.c | 39 |
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: |