comparison libmpdemux/demux_mkv.c @ 15154:898f68adad2b

Online audio switching now supports Matroska too. Patch by Michael Behrisch
author gpoirier
date Wed, 13 Apr 2005 22:33:19 +0000
parents bbb693d3b130
children 39eb8a327ea9
comparison
equal deleted inserted replaced
15153:0f3be1ff01fb 15154:898f68adad2b
3338 } 3338 }
3339 3339
3340 *((int *) arg) = (int) (100 * mkv_d->last_pts / mkv_d->duration); 3340 *((int *) arg) = (int) (100 * mkv_d->last_pts / mkv_d->duration);
3341 return DEMUXER_CTRL_OK; 3341 return DEMUXER_CTRL_OK;
3342 3342
3343 case DEMUXER_CTRL_SWITCH_AUDIO:
3344 if (demuxer->audio && demuxer->audio->sh) {
3345 int i;
3346 demux_stream_t *d_audio = demuxer->audio;
3347 sh_audio_t *sh_audio = d_audio->sh;
3348 int idx = d_audio->id - 1; // track ids are 1 based
3349 int num = mkv_d->num_tracks;
3350 mkv_track_t *otrack = mkv_d->tracks[idx];
3351 for (i = 1; i < num; i++) {
3352 mkv_track_t *track = mkv_d->tracks[(idx+i)%num];
3353 if ((track->type == MATROSKA_TRACK_AUDIO) &&
3354 !strcmp(track->codec_id, otrack->codec_id) &&
3355 (track->a_channels == otrack->a_channels) &&
3356 (track->a_bps == otrack->a_bps) &&
3357 (track->a_sfreq == otrack->a_sfreq)) {
3358 break;
3359 }
3360 }
3361 if (i < num) {
3362 d_audio->id = (idx+i)%num + 1;
3363 ds_free_packs(d_audio);
3364 }
3365 *((int *)arg)=(int)d_audio->id;
3366 }
3367 return DEMUXER_CTRL_OK;
3368
3343 default: 3369 default:
3344 return DEMUXER_CTRL_NOTIMPL; 3370 return DEMUXER_CTRL_NOTIMPL;
3345 } 3371 }
3346 } 3372 }
3347 3373