summaryrefslogtreecommitdiffstats
path: root/audio/filter/af_lavrresample.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-04-18 13:39:40 +0200
committerwm4 <wm4@nowhere>2015-04-18 13:39:40 +0200
commitd8dd4b6c39ad882c1c55655711eae415bc5f1191 (patch)
treef1f1ad74506b6e2db71bdef8def8830e92f191d1 /audio/filter/af_lavrresample.c
parentb0bd0a6e6b96c947ca2594463a1be9aea1a52a06 (diff)
downloadmpv-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/filter/af_lavrresample.c')
-rw-r--r--audio/filter/af_lavrresample.c16
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;
}