summaryrefslogtreecommitdiff
path: root/libswresample
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2017-08-15 14:58:25 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-08-16 00:54:17 +0200
commit0ac8fce2679e76e7caffde091141d6834405dbc1 (patch)
treed272c67b20ff652be0c0b454a65583693dd8fa2f /libswresample
parent62dfa2ba14d9adbf88e8748a7e1c5ce68f0f8fa8 (diff)
downloadffmpeg-0ac8fce2679e76e7caffde091141d6834405dbc1.tar.gz
swresample/resample: Fix flush refelction length
Reviewed-by: atomnuker Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libswresample')
-rw-r--r--libswresample/resample.c9
1 files 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; i<a->ch_count; i++){
- for(j=0; j<s->in_buffer_count; j++){
+ for(j=0; j<reflection; j++){
memcpy(a->ch[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;
}