static int recreate_audio_filters(struct MPContext *mpctx) { assert(mpctx->d_audio); struct af_stream *afs = mpctx->d_audio->afilter; struct MPOpts *opts = mpctx->opts; struct mp_audio in_format; mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &in_format); int new_srate = in_format.rate; if (!af_control_any_rev(afs, AF_CONTROL_SET_PLAYBACK_SPEED, &opts->playback_speed)) { new_srate = in_format.rate * opts->playback_speed; if (new_srate != afs->output.rate) opts->playback_speed = new_srate / (double)in_format.rate; } afs->input.rate = new_srate; if (af_init(afs) < 0) { MP_ERR(mpctx, "Couldn't find matching filter/ao format!\n"); return -1; } mixer_reinit_audio(mpctx->mixer, mpctx->ao, afs); return 0; }
static int recreate_audio_filters(struct MPContext *mpctx) { assert(mpctx->sh_audio); // init audio filters: if (!build_afilter_chain(mpctx)) { MP_ERR(mpctx, "Couldn't find matching filter/ao format!\n"); return -1; } mixer_reinit_audio(mpctx->mixer, mpctx->ao, mpctx->sh_audio->afilter); return 0; }