From 0ac8fce2679e76e7caffde091141d6834405dbc1 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 15 Aug 2017 14:58:25 +0200 Subject: [PATCH] swresample/resample: Fix flush refelction length Reviewed-by: atomnuker Signed-off-by: Michael Niedermayer --- libswresample/resample.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libswresample/resample.c b/libswresample/resample.c index 39c242bf41..df49505bf9 100644 --- a/libswresample/resample.c +++ b/libswresample/resample.c @@ -544,18 +544,21 @@ static int64_t get_out_samples(struct SwrContext *s, int in_samples) { } static int resample_flush(struct SwrContext *s) { + ResampleContext *c = s->resample; AudioData *a= &s->in_buffer; int i, j, ret; - if((ret = swri_realloc_audio(a, s->in_buffer_index + 2*s->in_buffer_count)) < 0) + int reflection = (FFMIN(s->in_buffer_count, c->filter_length) + 1) / 2; + + if((ret = swri_realloc_audio(a, s->in_buffer_index + s->in_buffer_count + reflection)) < 0) return ret; av_assert0(a->planar); for(i=0; ich_count; i++){ - for(j=0; jin_buffer_count; j++){ + for(j=0; jch[i] + (s->in_buffer_index+s->in_buffer_count+j )*a->bps, a->ch[i] + (s->in_buffer_index+s->in_buffer_count-j-1)*a->bps, a->bps); } } - s->in_buffer_count += (s->in_buffer_count+1)/2; + s->in_buffer_count += reflection; return 0; }