diff options
Diffstat (limited to 'chromium/third_party/ffmpeg/libavresample/resample_template.c')
-rw-r--r-- | chromium/third_party/ffmpeg/libavresample/resample_template.c | 72 |
1 files changed, 44 insertions, 28 deletions
diff --git a/chromium/third_party/ffmpeg/libavresample/resample_template.c b/chromium/third_party/ffmpeg/libavresample/resample_template.c index 06da90fe9fc..863852a3fd5 100644 --- a/chromium/third_party/ffmpeg/libavresample/resample_template.c +++ b/chromium/third_party/ffmpeg/libavresample/resample_template.c @@ -18,6 +18,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include <math.h> +#include <stdint.h> + +#include "libavutil/common.h" +#include "internal.h" + #if defined(CONFIG_RESAMPLE_DBL) #define SET_TYPE(func) func ## _dbl #define FELEM double @@ -48,40 +54,50 @@ #define DBL_TO_FELEM(d, v) d = av_clip_int16(lrint(v * (1 << 15))) #endif -static void SET_TYPE(resample_one)(ResampleContext *c, int no_filter, - void *dst0, int dst_index, const void *src0, - int src_size, int index, int frac) +static void SET_TYPE(resample_nearest)(void *dst0, int dst_index, const void *src0, unsigned int index) { FELEM *dst = dst0; const FELEM *src = src0; + dst[dst_index] = src[index]; +} - if (no_filter) { - dst[dst_index] = src[index]; - } else { - int i; - int sample_index = index >> c->phase_shift; - FELEM2 val = 0; - FELEM *filter = ((FELEM *)c->filter_bank) + - c->filter_length * (index & c->phase_mask); - - if (sample_index < 0) { - for (i = 0; i < c->filter_length; i++) - val += src[FFABS(sample_index + i) % src_size] * - (FELEM2)filter[i]; - } else if (c->linear) { - FELEM2 v2 = 0; - for (i = 0; i < c->filter_length; i++) { - val += src[abs(sample_index + i)] * (FELEM2)filter[i]; - v2 += src[abs(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]; - } +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; - OUT(dst[dst_index], val); + 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) +{ + 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); + + for (i = 0; i < c->filter_length; i++) + val += src[sample_index + i] * (FELEM2)filter[i]; + + OUT(dst[dst_index], val); } static void SET_TYPE(set_filter)(void *filter0, double *tab, int phase, |