From b9dea23766f52b8e059e72d34980bb7b456efe8f Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 4 Mar 2014 21:18:27 +0100 Subject: [PATCH] resample: fix avresample_get_delay() return value The correct "next" input sample is not the first sample of the resampling buffer, but the center sample of the filter_length-sized block at the beginning. CC:libav-stable@libav.org --- libavresample/resample.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavresample/resample.c b/libavresample/resample.c index 69c9bab893..d9c4e019ec 100644 --- a/libavresample/resample.c +++ b/libavresample/resample.c @@ -47,6 +47,7 @@ struct ResampleContext { void (*resample_one)(struct ResampleContext *c, int no_filter, void *dst0, int dst_index, const void *src0, int src_size, int index, int frac); + int padding_size; }; @@ -212,6 +213,7 @@ ResampleContext *ff_audio_resample_init(AVAudioResampleContext *avr) goto error; c->ideal_dst_incr = c->dst_incr; + c->padding_size = (c->filter_length - 1) / 2; c->index = -phase_count * ((c->filter_length - 1) / 2); c->frac = 0; @@ -462,8 +464,10 @@ int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src) int avresample_get_delay(AVAudioResampleContext *avr) { + ResampleContext *c = avr->resample; + if (!avr->resample_needed || !avr->resample) return 0; - return avr->resample->buffer->nb_samples; + return FFMAX(c->buffer->nb_samples - c->padding_size, 0); }