diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-04-11 20:38:59 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-04-11 20:39:04 +0200 |
commit | 662a8d882758ac90cf55968fc7ab3540e51f2d0b (patch) | |
tree | aab4b2f82b340a4c449fa74d86e4e8fb4810dc0b | |
parent | 65088b925a0dc2defdeaffbbc24963ef34af7834 (diff) | |
parent | 254c95cdd1b669a722204a4a65974fc2523c8f83 (diff) | |
download | ffmpeg-662a8d882758ac90cf55968fc7ab3540e51f2d0b.tar.gz |
Merge commit '254c95cdd1b669a722204a4a65974fc2523c8f83'
* commit '254c95cdd1b669a722204a4a65974fc2523c8f83':
resample: split linear into its own function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavresample/resample.c | 8 | ||||
-rw-r--r-- | libavresample/resample_template.c | 34 |
2 files changed, 27 insertions, 15 deletions
diff --git a/libavresample/resample.c b/libavresample/resample.c index ca37320ab8..79275950b1 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 a9bbdae3f2..863852a3fd 100644 --- a/libavresample/resample_template.c +++ b/libavresample/resample_template.c @@ -61,6 +61,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) @@ -73,17 +94,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); } |