filter-chain: move functions to separate struct

So that it's easier to copy them.
This commit is contained in:
Wim Taymans 2022-12-16 09:37:45 +01:00
parent fa10849139
commit cd38d7b53b
3 changed files with 27 additions and 24 deletions

View file

@ -31,7 +31,7 @@
#include "dsp-ops.h"
static inline void dsp_clear_c(struct dsp_ops *ops, void * SPA_RESTRICT dst, uint32_t n_samples)
void dsp_clear_c(struct dsp_ops *ops, void * SPA_RESTRICT dst, uint32_t n_samples)
{
memset(dst, 0, sizeof(float) * n_samples);
}

View file

@ -35,30 +35,24 @@
struct dsp_info {
uint32_t cpu_flags;
void (*copy) (struct dsp_ops *ops,
void * SPA_RESTRICT dst,
const void * SPA_RESTRICT src, uint32_t n_samples);
void (*mix_gain) (struct dsp_ops *ops,
void * SPA_RESTRICT dst,
const void * SPA_RESTRICT src[],
float gain[], uint32_t n_src, uint32_t n_samples);
void (*biquad_run) (struct dsp_ops *ops, struct biquad *bq,
float *out, const float *in, uint32_t n_samples);
struct dsp_ops_funcs funcs;
};
static struct dsp_info dsp_table[] =
{
#if defined (HAVE_SSE)
{ SPA_CPU_FLAG_SSE,
.copy = dsp_copy_c,
.mix_gain = dsp_mix_gain_sse,
.biquad_run = dsp_biquad_run_c,
.funcs.clear = dsp_clear_c,
.funcs.copy = dsp_copy_c,
.funcs.mix_gain = dsp_mix_gain_sse,
.funcs.biquad_run = dsp_biquad_run_c,
},
#endif
{ 0,
.copy = dsp_copy_c,
.mix_gain = dsp_mix_gain_c,
.biquad_run = dsp_biquad_run_c,
.funcs.clear = dsp_clear_c,
.funcs.copy = dsp_copy_c,
.funcs.mix_gain = dsp_mix_gain_c,
.funcs.biquad_run = dsp_biquad_run_c,
},
};
@ -88,10 +82,8 @@ int dsp_ops_init(struct dsp_ops *ops)
ops->priv = info;
ops->cpu_flags = info->cpu_flags;
ops->copy = info->copy;
ops->mix_gain = info->mix_gain;
ops->biquad_run = info->biquad_run;
ops->free = impl_dsp_ops_free;
ops->funcs = info->funcs;
return 0;
}

View file

@ -29,9 +29,9 @@
#include "biquad.h"
struct dsp_ops {
uint32_t cpu_flags;
struct dsp_ops;
struct dsp_ops_funcs {
void (*clear) (struct dsp_ops *ops, void * SPA_RESTRICT dst, uint32_t n_samples);
void (*copy) (struct dsp_ops *ops,
void * SPA_RESTRICT dst,
@ -42,19 +42,29 @@ struct dsp_ops {
float gain[], uint32_t n_src, uint32_t n_samples);
void (*biquad_run) (struct dsp_ops *ops, struct biquad *bq,
float *out, const float *in, uint32_t n_samples);
};
struct dsp_ops {
uint32_t cpu_flags;
void (*free) (struct dsp_ops *ops);
struct dsp_ops_funcs funcs;
const void *priv;
};
int dsp_ops_init(struct dsp_ops *ops);
#define dsp_ops_copy(ops,...) (ops)->copy(ops, __VA_ARGS__)
#define dsp_ops_mix_gain(ops,...) (ops)->mix_gain(ops, __VA_ARGS__)
#define dsp_ops_biquad_run(ops,...) (ops)->biquad_run(ops, __VA_ARGS__)
#define dsp_ops_free(ops) (ops)->free(ops)
#define dsp_ops_clear(ops,...) (ops)->funcs.clear(ops, __VA_ARGS__)
#define dsp_ops_copy(ops,...) (ops)->funcs.copy(ops, __VA_ARGS__)
#define dsp_ops_mix_gain(ops,...) (ops)->funcs.mix_gain(ops, __VA_ARGS__)
#define dsp_ops_biquad_run(ops,...) (ops)->funcs.biquad_run(ops, __VA_ARGS__)
#define MAKE_CLEAR_FUNC(arch) \
void dsp_clear_##arch(struct dsp_ops *ops, void * SPA_RESTRICT dst, uint32_t n_samples)
#define MAKE_COPY_FUNC(arch) \
void dsp_copy_##arch(struct dsp_ops *ops, void * SPA_RESTRICT dst, \
const void * SPA_RESTRICT src, uint32_t n_samples)
@ -66,6 +76,7 @@ void dsp_biquad_run_##arch (struct dsp_ops *ops, struct biquad *bq, \
float *out, const float *in, uint32_t n_samples)
MAKE_CLEAR_FUNC(c);
MAKE_COPY_FUNC(c);
MAKE_MIX_GAIN_FUNC(c);
MAKE_BIQUAD_RUN_FUNC(c);