0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 20:03:10 +02:00

demux_mkv: support switching to/from -nosound

Allow audio stream switching to turn off sound or enable it, and also
include nosound as one of the values cycled through when stepping to
the next audio stream.
This commit is contained in:
Uoti Urpala 2010-05-22 10:38:55 +03:00
parent fc39d48465
commit 9b94b3fb30

View File

@ -2609,24 +2609,19 @@ static int demux_mkv_control(demuxer_t *demuxer, int cmd, void *arg)
*((int *) arg) = (int) (100 * mkv_d->last_pts / mkv_d->duration);
return DEMUXER_CTRL_OK;
case DEMUXER_CTRL_SWITCH_AUDIO:
if (demuxer->audio && demuxer->audio->sh) {
sh_audio_t *sh = demuxer->a_streams[demuxer->audio->id];
int aid = *(int *) arg;
if (aid < 0)
aid = (sh->aid + 1) % mkv_d->num_audio_tracks;
if (aid != sh->aid) {
mkv_track_t *track =
find_track_by_num(mkv_d, aid, MATROSKA_TRACK_AUDIO);
if (track) {
demuxer->audio->id = track->id;
sh = demuxer->a_streams[demuxer->audio->id];
ds_free_packs(demuxer->audio);
}
}
*(int *) arg = sh->aid;
} else
*(int *) arg = -2;
case DEMUXER_CTRL_SWITCH_AUDIO:;
int new_aid = *(int *) arg;
int current_aid = demuxer->audio->id;
if (current_aid < 0)
current_aid = -1;
if (new_aid == -1) // cycle to next
new_aid = (current_aid + 2) % (mkv_d->num_audio_tracks + 1) - 1;
if (new_aid < 0 || new_aid >= mkv_d->num_audio_tracks)
new_aid = -2;
*(int *) arg = new_aid;
if (current_aid != new_aid)
ds_free_packs(demuxer->audio);
demuxer->audio->id = new_aid;
return DEMUXER_CTRL_OK;
default: