diff options
author | Anton Khirnov <anton@khirnov.net> | 2014-03-04 20:12:33 +0400 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2014-04-11 18:34:02 +0400 |
commit | 254c95cdd1b669a722204a4a65974fc2523c8f83 (patch) | |
tree | db10c45d5a728d76500aff6caef4c7d92c517167 /libavresample/resample_template.c | |
parent | be394968c81019887ef996a78a526bdd85d1e216 (diff) |
resample: split linear into its own function
Diffstat (limited to 'libavresample/resample_template.c')
-rw-r--r-- | libavresample/resample_template.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/libavresample/resample_template.c b/libavresample/resample_template.c index 661dd0dd76..d8ddcc988a 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); } |