diff options
author | Paul B Mahol <onemda@gmail.com> | 2014-06-26 08:54:23 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2014-07-03 07:34:11 +0000 |
commit | 7e8c1f0c38791ba78d170189f4c33e1aac9ee7c0 (patch) | |
tree | 70a9a0509246659606db0a39eeff41e37a2872af /libavfilter/af_aphaser.c | |
parent | 126524720661a9adddec758e94729007a96f07f7 (diff) |
avfilter/af_aphaser: move wave table generation code into separate file
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/af_aphaser.c')
-rw-r--r-- | libavfilter/af_aphaser.c | 72 |
1 files changed, 4 insertions, 68 deletions
diff --git a/libavfilter/af_aphaser.c b/libavfilter/af_aphaser.c index 119e1a385e..9d8f696bd5 100644 --- a/libavfilter/af_aphaser.c +++ b/libavfilter/af_aphaser.c @@ -28,12 +28,7 @@ #include "audio.h" #include "avfilter.h" #include "internal.h" - -enum WaveType { - WAVE_SIN, - WAVE_TRI, - WAVE_NB, -}; +#include "generate_wave_table.h" typedef struct AudioPhaserContext { const AVClass *class; @@ -118,65 +113,6 @@ static int query_formats(AVFilterContext *ctx) return 0; } -static void generate_wave_table(enum WaveType wave_type, enum AVSampleFormat sample_fmt, - void *table, int table_size, - double min, double max, double phase) -{ - uint32_t i, phase_offset = phase / M_PI / 2 * table_size + 0.5; - - for (i = 0; i < table_size; i++) { - uint32_t point = (i + phase_offset) % table_size; - double d; - - switch (wave_type) { - case WAVE_SIN: - d = (sin((double)point / table_size * 2 * M_PI) + 1) / 2; - break; - case WAVE_TRI: - d = (double)point * 2 / table_size; - switch (4 * point / table_size) { - case 0: d = d + 0.5; break; - case 1: - case 2: d = 1.5 - d; break; - case 3: d = d - 1.5; break; - } - break; - default: - av_assert0(0); - } - - d = d * (max - min) + min; - switch (sample_fmt) { - case AV_SAMPLE_FMT_FLT: { - float *fp = (float *)table; - *fp++ = (float)d; - table = fp; - continue; } - case AV_SAMPLE_FMT_DBL: { - double *dp = (double *)table; - *dp++ = d; - table = dp; - continue; } - } - - d += d < 0 ? -0.5 : 0.5; - switch (sample_fmt) { - case AV_SAMPLE_FMT_S16: { - int16_t *sp = table; - *sp++ = (int16_t)d; - table = sp; - continue; } - case AV_SAMPLE_FMT_S32: { - int32_t *ip = table; - *ip++ = (int32_t)d; - table = ip; - continue; } - default: - av_assert0(0); - } - } -} - #define MOD(a, b) (((a) >= (b)) ? (a) - (b) : (a)) #define PHASER_PLANAR(name, type) \ @@ -274,9 +210,9 @@ static int config_output(AVFilterLink *outlink) if (!p->modulation_buffer || !p->delay_buffer) return AVERROR(ENOMEM); - generate_wave_table(p->type, AV_SAMPLE_FMT_S32, - p->modulation_buffer, p->modulation_buffer_length, - 1., p->delay_buffer_length, M_PI / 2.0); + ff_generate_wave_table(p->type, AV_SAMPLE_FMT_S32, + p->modulation_buffer, p->modulation_buffer_length, + 1., p->delay_buffer_length, M_PI / 2.0); p->delay_pos = p->modulation_pos = 0; |