On 03/05/2014 01:50 AM, Anton Khirnov wrote:
> ---
>  libavresample/resample.c          |    8 ++++----
>  libavresample/resample_template.c |   34 +++++++++++++++++++++++-----------
>  2 files changed, 27 insertions(+), 15 deletions(-)
> 
> diff --git a/libavresample/resample.c b/libavresample/resample.c
> index 01e2a3a..953f0e2 100644
> --- a/libavresample/resample.c
> +++ b/libavresample/resample.c
> @@ -181,22 +181,22 @@ ResampleContext 
> *ff_audio_resample_init(AVAudioResampleContext *avr)
>  
>      switch (avr->internal_sample_fmt) {
>      case AV_SAMPLE_FMT_DBLP:
> -        c->resample_one  = resample_one_dbl;
> +        c->resample_one  = c->linear ? resample_linear_dbl : 
> resample_one_dbl;
>          c->resample_nearest = resample_nearest_dbl;
>          c->set_filter    = set_filter_dbl;
>          break;
>      case AV_SAMPLE_FMT_FLTP:
> -        c->resample_one  = resample_one_flt;
> +        c->resample_one  = c->linear ? resample_linear_flt : 
> resample_one_flt;
>          c->resample_nearest = resample_nearest_flt;
>          c->set_filter    = set_filter_flt;
>          break;
>      case AV_SAMPLE_FMT_S32P:
> -        c->resample_one  = resample_one_s32;
> +        c->resample_one  = c->linear ? resample_linear_s32 : 
> resample_one_s32;
>          c->resample_nearest = resample_nearest_s32;
>          c->set_filter    = set_filter_s32;
>          break;
>      case AV_SAMPLE_FMT_S16P:
> -        c->resample_one  = resample_one_s16;
> +        c->resample_one  = c->linear ? resample_linear_s16 : 
> resample_one_s16;
>          c->resample_nearest = resample_nearest_s16;
>          c->set_filter    = set_filter_s16;
>          break;
> diff --git a/libavresample/resample_template.c 
> b/libavresample/resample_template.c
> index 36d97e8..8e55793 100644
> --- a/libavresample/resample_template.c
> +++ b/libavresample/resample_template.c
> @@ -55,6 +55,27 @@ static void SET_TYPE(resample_nearest)(void *dst0, int 
> dst_index, const void *sr
>      dst[dst_index] = src[index];
>  }
>  
> +static void SET_TYPE(resample_linear)(ResampleContext *c, void *dst0, int 
> dst_index,
> +                                      const void *src0, unsigned int index, 
> int frac)
> +{
> +    FELEM *dst = dst0;
> +    const FELEM *src = src0;
> +    int i;
> +    unsigned int sample_index = index >> c->phase_shift;
> +    FELEM2 val = 0;
> +    FELEM *filter = ((FELEM *)c->filter_bank) +
> +                    c->filter_length * (index & c->phase_mask);
> +    FELEM2 v2 = 0;
> +
> +    for (i = 0; i < c->filter_length; i++) {
> +        val += src[sample_index + i] * (FELEM2)filter[i];
> +        v2  += src[sample_index + i] * (FELEM2)filter[i + c->filter_length];
> +    }
> +    val += (v2 - val) * (FELEML)frac / c->src_incr;
> +
> +    OUT(dst[dst_index], val);
> +}
> +
>  static void SET_TYPE(resample_one)(ResampleContext *c,
>                                     void *dst0, int dst_index, const void 
> *src0,
>                                     unsigned int index, int frac)
> @@ -67,17 +88,8 @@ static void SET_TYPE(resample_one)(ResampleContext *c,
>      FELEM *filter = ((FELEM *)c->filter_bank) +
>                      c->filter_length * (index & c->phase_mask);
>  
> -    if (c->linear) {
> -        FELEM2 v2 = 0;
> -        for (i = 0; i < c->filter_length; i++) {
> -            val += src[sample_index + i] * (FELEM2)filter[i];
> -            v2  += src[sample_index + i] * (FELEM2)filter[i + 
> c->filter_length];
> -        }
> -        val += (v2 - val) * (FELEML)frac / c->src_incr;
> -    } else {
> -        for (i = 0; i < c->filter_length; i++)
> -            val += src[sample_index + i] * (FELEM2)filter[i];
> -    }
> +    for (i = 0; i < c->filter_length; i++)
> +        val += src[sample_index + i] * (FELEM2)filter[i];
>  
>      OUT(dst[dst_index], val);
>  }

ok.

-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to