summaryrefslogtreecommitdiff
path: root/libavfilter/af_aphaser.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2014-06-26 08:54:23 +0000
committerPaul B Mahol <onemda@gmail.com>2014-07-03 07:34:11 +0000
commit7e8c1f0c38791ba78d170189f4c33e1aac9ee7c0 (patch)
tree70a9a0509246659606db0a39eeff41e37a2872af /libavfilter/af_aphaser.c
parent126524720661a9adddec758e94729007a96f07f7 (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.c72
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;