diff options
author | wm4 <wm4@nowhere> | 2015-04-18 13:39:40 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-04-18 13:39:40 +0200 |
commit | d8dd4b6c39ad882c1c55655711eae415bc5f1191 (patch) | |
tree | f1f1ad74506b6e2db71bdef8def8830e92f191d1 /audio | |
parent | b0bd0a6e6b96c947ca2594463a1be9aea1a52a06 (diff) | |
download | mpv-d8dd4b6c39ad882c1c55655711eae415bc5f1191.tar.bz2 mpv-d8dd4b6c39ad882c1c55655711eae415bc5f1191.tar.xz |
af_lavrresample: fix draining
configure_lavrr() clears s->pending, so we have to assign it after that
call.
Diffstat (limited to 'audio')
-rw-r--r-- | audio/filter/af_lavrresample.c | 16 |
1 files changed, 8 insertions, 8 deletions
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; } |