ref: 22f6c327099d2f9cf9068bdf9a554250b469cf84
parent: 15c9b0d47b302f09348e69c9b5d22e505d916909
author: Christopher Snowhill <kode54@gmail.com>
date: Mon Sep 25 16:27:06 EDT 2017
Removed unused file.
--- a/include/internal/fir_resampler.h
+++ /dev/null
@@ -1,18 +1,0 @@
-#ifndef _FIR_RESAMPLER_H_
-#define _FIR_RESAMPLER_H_
-
-void fir_init();
-
-void *fir_resampler_create();
-void fir_resampler_delete(void *);
-void *fir_resampler_dup(void *);
-
-int fir_resampler_get_free_count(void *);
-void fir_resampler_write_sample(void *, short sample);
-void fir_resampler_set_rate(void *, double new_factor);
-int fir_resampler_ready(void *);
-void fir_resampler_clear(void *);
-int fir_resampler_get_sample(void *);
-void fir_resampler_remove_sample(void *);
-
-#endif
--- a/src/helpers/fir_resampler.c
+++ /dev/null
@@ -1,256 +1,0 @@
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "internal/fir_resampler.h"
-
-enum { fir_width = 16 };
-
-enum { fir_max_res = 1024 };
-enum { fir_min_width = (fir_width < 4 ? 4 : fir_width) };
-enum { fir_adj_width = fir_min_width / 4 * 4 + 2 };
-enum { fir_stereo = 1 }; /* channel count, not boolean value */
-enum { fir_write_offset = fir_adj_width * fir_stereo };
-
-enum { fir_buffer_size = fir_width * 2 };
-
-typedef short fir_impulse[fir_adj_width];
-
-/* exp slope to 31/32 of ln(8) */
-static const double fir_ratios[32] = {
- 1.000, 1.067, 1.139, 1.215, 1.297, 1.384, 1.477, 1.576, 1.682, 1.795, 1.915,
- 2.044, 2.181, 2.327, 2.484, 2.650, 2.828, 3.018, 3.221, 3.437, 3.668, 3.914,
- 4.177, 4.458, 4.757, 5.076, 5.417, 5.781, 6.169, 6.583, 7.025, 7.497};
-
-static fir_impulse fir_impulses[32][fir_max_res];
-
-#undef PI
-#define PI 3.1415926535897932384626433832795029
-
-static void gen_sinc(double rolloff, int width, double offset, double spacing,
- double scale, int count, short *out) {
- double const maxh = 256;
- double const step = PI / maxh * spacing;
- double const to_w = maxh * 2 / width;
- double const pow_a_n = pow(rolloff, maxh);
-
- double angle = (count / 2 - 1 + offset) * -step;
-
- scale /= maxh * 2;
-
- while (count--) {
- double w;
- *out++ = 0;
- w = angle * to_w;
- if (fabs(w) < PI) {
- double rolloff_cos_a = rolloff * cos(angle);
- double num = 1 - rolloff_cos_a - pow_a_n * cos(maxh * angle) +
- pow_a_n * rolloff * cos((maxh - 1) * angle);
- double den = 1 - rolloff_cos_a - rolloff_cos_a + rolloff * rolloff;
- double sinc = scale * num / den - scale;
-
- out[-1] = (short)(cos(w) * sinc + sinc);
- }
- angle += step;
- }
-}
-
-typedef struct fir_resampler {
- int write_pos, write_filled;
- int read_pos, read_filled;
- unsigned short phase;
- unsigned int phase_inc;
- unsigned int ratio_set;
- int buffer_in[fir_buffer_size * 2];
- int buffer_out[fir_buffer_size];
-} fir_resampler;
-
-void *fir_resampler_create() {
- fir_resampler *r = (fir_resampler *)malloc(sizeof(fir_resampler));
- if (!r)
- return 0;
-
- r->write_pos = 0;
- r->write_filled = 0;
- r->read_pos = 0;
- r->read_filled = 0;
- r->phase = 0;
- r->phase_inc = 0;
- r->ratio_set = 0;
- memset(r->buffer_in, 0, sizeof(r->buffer_in));
- memset(r->buffer_out, 0, sizeof(r->buffer_out));
-
- return r;
-}
-
-void fir_resampler_delete(void *_r) { free(_r); }
-
-void *fir_resampler_dup(void *_r) {
- fir_resampler *r_in = (fir_resampler *)_r;
- fir_resampler *r_out = (fir_resampler *)malloc(sizeof(fir_resampler));
- if (!r_out)
- return 0;
-
- r_out->write_pos = r_in->write_pos;
- r_out->write_filled = r_in->write_filled;
- r_out->read_pos = r_in->read_pos;
- r_out->read_filled = r_in->read_filled;
- r_out->phase = r_in->phase;
- r_out->phase_inc = r_in->phase_inc;
- r_out->ratio_set = r_in->ratio_set;
- memcpy(r_out->buffer_in, r_in->buffer_in, sizeof(r_in->buffer_in));
- memcpy(r_out->buffer_out, r_in->buffer_out, sizeof(r_in->buffer_out));
-
- return r_out;
-}
-
-int fir_resampler_get_free_count(void *_r) {
- fir_resampler *r = (fir_resampler *)_r;
- return fir_buffer_size - r->write_filled;
-}
-
-int fir_resampler_ready(void *_r) {
- fir_resampler *r = (fir_resampler *)_r;
- return r->write_filled > fir_adj_width;
-}
-
-void fir_resampler_clear(void *_r) {
- fir_resampler *r = (fir_resampler *)_r;
- r->write_pos = 0;
- r->write_filled = 0;
- r->read_pos = 0;
- r->read_filled = 0;
- r->phase = 0;
- memset(r->buffer_in, 0, sizeof(r->buffer_in));
-}
-
-void fir_resampler_set_rate(void *_r, double new_factor) {
- fir_resampler *r = (fir_resampler *)_r;
- r->phase_inc = (int)(new_factor * 65536.0);
- r->ratio_set = 0;
- while (r->ratio_set < 31 && new_factor > fir_ratios[r->ratio_set])
- r->ratio_set++;
-}
-
-void fir_resampler_write_sample(void *_r, short s) {
- fir_resampler *r = (fir_resampler *)_r;
-
- if (r->write_filled < fir_buffer_size) {
- int s32 = s;
-
- r->buffer_in[r->write_pos] = s32;
- r->buffer_in[r->write_pos + fir_buffer_size] = s32;
-
- ++r->write_filled;
-
- r->write_pos = (r->write_pos + 1) % fir_buffer_size;
- }
-}
-
-void fir_init() {
- double const rolloff = 0.999;
- double const gain = 1.0;
-
- int const res = fir_max_res;
-
- int i;
-
- for (i = 0; i < 32; i++) {
- double const ratio_ = fir_ratios[i];
-
- double fraction = 1.0 / (double)fir_max_res;
-
- double const filter = (ratio_ < 1.0) ? 1.0 : 1.0 / ratio_;
- double pos = 0.0;
- short *out = (short *)fir_impulses[i];
- int n;
- for (n = res; --n >= 0;) {
- gen_sinc(rolloff, (int)(fir_adj_width * filter + 1) & ~1, pos,
- filter, (double)(0x7FFF * gain * filter),
- (int)fir_adj_width, out);
- out += fir_adj_width;
-
- pos += fraction;
- }
- }
-}
-
-int fir_resampler_run(void *_r, int **out_, int *out_end) {
- fir_resampler *r = (fir_resampler *)_r;
- int in_size = r->write_filled;
- int const *in_ =
- r->buffer_in + fir_buffer_size + r->write_pos - r->write_filled;
- int used = 0;
- in_size -= fir_write_offset;
- if (in_size > 0) {
- int *out = *out_;
- int const *in = in_;
- int const *const in_end = in + in_size;
- int phase = r->phase;
- int phase_inc = r->phase_inc;
- int ratio_set = r->ratio_set;
-
- do {
- // accumulate in extended precision
- short const *imp = fir_impulses[ratio_set][(phase & 0xFFC0) >> 6];
- int pt = imp[0];
- int s = pt * in[0];
- int n;
- if (out >= out_end)
- break;
- for (n = (fir_adj_width - 2) / 2; n; --n) {
- pt = imp[1];
- s += pt * in[1];
-
- // pre-increment more efficient on some RISC processors
- imp += 2;
- pt = imp[0];
- in += 2;
- s += pt * in[0];
- }
- pt = imp[1];
- s += pt * in[1];
-
- phase += phase_inc;
-
- in += (phase >> 16) - fir_adj_width + 2;
-
- phase &= 65535;
-
- *out++ = (int)(s >> 7);
- } while (in < in_end);
-
- r->phase = phase;
- *out_ = out;
-
- used = in - in_;
-
- r->write_filled -= used;
- }
-
- return used;
-}
-
-int fir_resampler_get_sample(void *_r) {
- fir_resampler *r = (fir_resampler *)_r;
- if (r->read_filled < 1) {
- int write_pos = (r->read_pos + r->read_filled) % fir_buffer_size;
- int write_size = fir_buffer_size - write_pos;
- int *out = r->buffer_out + write_pos;
- if (write_size > (fir_buffer_size - r->read_filled))
- write_size = fir_buffer_size - r->read_filled;
- fir_resampler_run(r, &out, out + write_size);
- r->read_filled += out - r->buffer_out - write_pos;
- }
- if (r->read_filled < 1)
- return 0;
- return r->buffer_out[r->read_pos];
-}
-
-void fir_resampler_remove_sample(void *_r) {
- fir_resampler *r = (fir_resampler *)_r;
- if (r->read_filled > 0) {
- --r->read_filled;
- r->read_pos = (r->read_pos + 1) % fir_buffer_size;
- }
-}