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