[FFmpeg-devel] [PATCH] swresample/resample: Fix flush refelction length

Rostislav Pehlivanov atomnuker at gmail.com
Tue Aug 15 23:45:47 EEST 2017


On 15 August 2017 at 16:17, Michael Niedermayer <michael at niedermayer.cc>
wrote:

> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  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; 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;
>  }
>
> --
> 2.14.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

LGTM, patch tested

Thanks, I'll send a patch to have a FATE test for this.


More information about the ffmpeg-devel mailing list