From d8dd4b6c39ad882c1c55655711eae415bc5f1191 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 18 Apr 2015 13:39:40 +0200 Subject: af_lavrresample: fix draining configure_lavrr() clears s->pending, so we have to assign it after that call. --- audio/filter/af_lavrresample.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'audio/filter/af_lavrresample.c') diff --git a/audio/filter/af_lavrresample.c b/audio/filter/af_lavrresample.c index 41d5a8bdf4..412846a78e 100644 --- a/audio/filter/af_lavrresample.c +++ b/audio/filter/af_lavrresample.c @@ -318,17 +318,17 @@ static int control(struct af_instance *af, int cmd, void *arg) if (new_rate != s->ctx.in_rate && s->avrctx_ok && af->fmt_out.format) { // Before reconfiguring, drain the audio that is still buffered // in the resampler. - talloc_free(s->pending); - s->pending = talloc_zero(NULL, struct mp_audio); - mp_audio_copy_config(s->pending, &af->fmt_out); - s->pending->samples = get_drain_samples(s); - if (s->pending->samples > 0) { - mp_audio_realloc_min(s->pending, s->pending->samples); - int r = resample_frame(s->avrctx, s->pending, NULL); - s->pending->samples = MPMAX(r, 0); + struct mp_audio *pending = talloc_zero(NULL, struct mp_audio); + mp_audio_copy_config(pending, &af->fmt_out); + pending->samples = get_drain_samples(s); + if (pending->samples > 0) { + mp_audio_realloc_min(pending, pending->samples); + int r = resample_frame(s->avrctx, pending, NULL); + pending->samples = MPMAX(r, 0); } // Reinitialize resampler. configure_lavrr(af, &af->fmt_in, &af->fmt_out); + s->pending = pending; } return AF_OK; } -- cgit v1.2.3