From cd38d7b53bb38e7017c14f0292cdb91db130bb5f Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 16 Dec 2022 09:37:45 +0100 Subject: [PATCH] filter-chain: move functions to separate struct So that it's easier to copy them. --- src/modules/module-filter-chain/dsp-ops-c.c | 2 +- src/modules/module-filter-chain/dsp-ops.c | 28 ++++++++------------- src/modules/module-filter-chain/dsp-ops.h | 21 ++++++++++++---- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/modules/module-filter-chain/dsp-ops-c.c b/src/modules/module-filter-chain/dsp-ops-c.c index d559a415b..a371229ff 100644 --- a/src/modules/module-filter-chain/dsp-ops-c.c +++ b/src/modules/module-filter-chain/dsp-ops-c.c @@ -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); } diff --git a/src/modules/module-filter-chain/dsp-ops.c b/src/modules/module-filter-chain/dsp-ops.c index 2fbf5c32f..f0b4e2a72 100644 --- a/src/modules/module-filter-chain/dsp-ops.c +++ b/src/modules/module-filter-chain/dsp-ops.c @@ -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; } diff --git a/src/modules/module-filter-chain/dsp-ops.h b/src/modules/module-filter-chain/dsp-ops.h index 87f0e71de..568f56505 100644 --- a/src/modules/module-filter-chain/dsp-ops.h +++ b/src/modules/module-filter-chain/dsp-ops.h @@ -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);