diff --git a/src/modules/module-filter-chain/audio-plugin.h b/src/modules/module-filter-chain/audio-plugin.h new file mode 100644 index 000000000..d212d8209 --- /dev/null +++ b/src/modules/module-filter-chain/audio-plugin.h @@ -0,0 +1,115 @@ +/* PipeWire */ +/* SPDX-FileCopyrightText: Copyright © 2021 Wim Taymans */ +/* SPDX-License-Identifier: MIT */ + +#ifndef SPA_FGA_PLUGIN_H +#define SPA_FGA_PLUGIN_H + +#include +#include + +#include +#include +#include + +#include "dsp-ops.h" + + +#define SPA_TYPE_INTERFACE_FILTER_GRAPH_AudioPlugin SPA_TYPE_INFO_INTERFACE_BASE "FilterGraph:AudioPlugin" + +#define SPA_VERSION_FGA_PLUGIN 0 +struct spa_fga_plugin { struct spa_interface iface; }; + +struct spa_fga_plugin_methods { +#define SPA_VERSION_FGA_PLUGIN_METHODS 0 + uint32_t version; + + const struct spa_fga_descriptor *(*make_desc) (void *plugin, const char *name); + void (*free) (void *plugin); +}; + +struct spa_fga_port { + uint32_t index; + const char *name; +#define SPA_FGA_PORT_INPUT (1ULL << 0) +#define SPA_FGA_PORT_OUTPUT (1ULL << 1) +#define SPA_FGA_PORT_CONTROL (1ULL << 2) +#define SPA_FGA_PORT_AUDIO (1ULL << 3) + uint64_t flags; + +#define SPA_FGA_HINT_BOOLEAN (1ULL << 2) +#define SPA_FGA_HINT_SAMPLE_RATE (1ULL << 3) +#define SPA_FGA_HINT_INTEGER (1ULL << 5) + uint64_t hint; + float def; + float min; + float max; +}; + +#define SPA_FGA_IS_PORT_INPUT(x) ((x) & SPA_FGA_PORT_INPUT) +#define SPA_FGA_IS_PORT_OUTPUT(x) ((x) & SPA_FGA_PORT_OUTPUT) +#define SPA_FGA_IS_PORT_CONTROL(x) ((x) & SPA_FGA_PORT_CONTROL) +#define SPA_FGA_IS_PORT_AUDIO(x) ((x) & SPA_FGA_PORT_AUDIO) + +struct spa_fga_descriptor { + const char *name; +#define SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA (1ULL << 0) +#define SPA_FGA_DESCRIPTOR_COPY (1ULL << 1) + uint64_t flags; + + void (*free) (const struct spa_fga_descriptor *desc); + + uint32_t n_ports; + struct spa_fga_port *ports; + + void *(*instantiate) (const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor *desc, + unsigned long SampleRate, int index, const char *config); + + void (*cleanup) (void *instance); + + void (*connect_port) (void *instance, unsigned long port, float *data); + void (*control_changed) (void *instance); + + void (*activate) (void *instance); + void (*deactivate) (void *instance); + + void (*run) (void *instance, unsigned long SampleCount); +}; + +static inline void spa_fga_descriptor_free(const struct spa_fga_descriptor *desc) +{ + if (desc->free) + desc->free(desc); +} + +#define spa_fga_plugin_method_r(o,method,version,...) \ +({ \ + const void * _res = NULL; \ + struct spa_fga_plugin *_o = o; \ + spa_interface_call_fast_res(&_o->iface, \ + struct spa_fga_plugin_methods, _res, \ + method, version, ##__VA_ARGS__); \ + _res; \ +}) + +#define spa_fga_plugin_method(o,method,version,...) \ +({ \ + struct spa_fga_plugin *_o = o; \ + spa_interface_call_fast(&_o->iface, \ + struct spa_fga_plugin_methods, \ + method, version, ##__VA_ARGS__); \ +}) + + +#define spa_fga_plugin_make_desc(o,...) spa_fga_plugin_method_r(o,make_desc,0,__VA_ARGS__) +#define spa_fga_plugin_free(o,...) spa_fga_plugin_method(o,free,0,##__VA_ARGS__) + +typedef struct spa_fga_plugin *(spa_filter_graph_audio_plugin_load_func_t)(const struct spa_support *support, + uint32_t n_support, struct dsp_ops *dsp, + const char *path, const struct spa_dict *info); + +#define SPA_FILTER_GRAPH_AUDIO_PLUGIN_LOAD_FUNC_NAME "spa_filter_graph_audio_plugin_load" + + + +#endif /* PLUGIN_H */ diff --git a/src/modules/module-filter-chain/builtin_plugin.c b/src/modules/module-filter-chain/builtin_plugin.c index 355ef5d87..d7d8eb989 100644 --- a/src/modules/module-filter-chain/builtin_plugin.c +++ b/src/modules/module-filter-chain/builtin_plugin.c @@ -18,7 +18,7 @@ #include #include -#include "plugin.h" +#include "audio-plugin.h" #include "biquad.h" #include "pffft.h" @@ -28,7 +28,7 @@ #define MAX_RATES 32u struct plugin { - struct fc_plugin plugin; + struct spa_fga_plugin plugin; struct dsp_ops *dsp; struct spa_log *log; }; @@ -52,7 +52,7 @@ struct builtin { float accum; }; -static void *builtin_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void *builtin_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct builtin *impl; @@ -89,20 +89,20 @@ static void copy_run(void * Instance, unsigned long SampleCount) dsp_ops_copy(impl->dsp, out, in, SampleCount); } -static struct fc_port copy_ports[] = { +static struct spa_fga_port copy_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, } }; -static const struct fc_descriptor copy_desc = { +static const struct spa_fga_descriptor copy_desc = { .name = "copy", - .flags = FC_DESCRIPTOR_COPY, + .flags = SPA_FGA_DESCRIPTOR_COPY, .n_ports = 2, .ports = copy_ports, @@ -138,90 +138,90 @@ static void mixer_run(void * Instance, unsigned long SampleCount) dsp_ops_mix_gain(impl->dsp, out, src, gains, n_src, SampleCount); } -static struct fc_port mixer_ports[] = { +static struct spa_fga_port mixer_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In 1", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "In 2", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 3, .name = "In 3", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 4, .name = "In 4", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 5, .name = "In 5", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 6, .name = "In 6", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 7, .name = "In 7", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 8, .name = "In 8", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 9, .name = "Gain 1", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 10, .name = "Gain 2", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 11, .name = "Gain 3", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 12, .name = "Gain 4", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 13, .name = "Gain 5", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 14, .name = "Gain 6", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 15, .name = "Gain 7", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, { .index = 16, .name = "Gain 8", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 10.0f }, }; -static const struct fc_descriptor mixer_desc = { +static const struct spa_fga_descriptor mixer_desc = { .name = "mixer", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = 17, .ports = mixer_ports, @@ -311,7 +311,7 @@ static void bq_raw_update(struct builtin *impl, float b0, float b1, float b2, * ] * } */ -static void *bq_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void *bq_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct builtin *impl; @@ -423,59 +423,59 @@ error: } #define BQ_NUM_PORTS 11 -static struct fc_port bq_ports[] = { +static struct spa_fga_port bq_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Freq", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, - .hint = FC_HINT_SAMPLE_RATE, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, + .hint = SPA_FGA_HINT_SAMPLE_RATE, .def = 0.0f, .min = 0.0f, .max = 1.0f, }, { .index = 3, .name = "Q", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = 0.0f, .max = 10.0f, }, { .index = 4, .name = "Gain", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -120.0f, .max = 20.0f, }, { .index = 5, .name = "b0", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -10.0f, .max = 10.0f, }, { .index = 6, .name = "b1", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f, }, { .index = 7, .name = "b2", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f, }, { .index = 8, .name = "a0", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -10.0f, .max = 10.0f, }, { .index = 9, .name = "a1", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f, }, { .index = 10, .name = "a2", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f, }, @@ -544,7 +544,7 @@ static void bq_run(void *Instance, unsigned long samples) } /** bq_lowpass */ -static const struct fc_descriptor bq_lowpass_desc = { +static const struct spa_fga_descriptor bq_lowpass_desc = { .name = "bq_lowpass", .n_ports = BQ_NUM_PORTS, @@ -558,7 +558,7 @@ static const struct fc_descriptor bq_lowpass_desc = { }; /** bq_highpass */ -static const struct fc_descriptor bq_highpass_desc = { +static const struct spa_fga_descriptor bq_highpass_desc = { .name = "bq_highpass", .n_ports = BQ_NUM_PORTS, @@ -572,7 +572,7 @@ static const struct fc_descriptor bq_highpass_desc = { }; /** bq_bandpass */ -static const struct fc_descriptor bq_bandpass_desc = { +static const struct spa_fga_descriptor bq_bandpass_desc = { .name = "bq_bandpass", .n_ports = BQ_NUM_PORTS, @@ -586,7 +586,7 @@ static const struct fc_descriptor bq_bandpass_desc = { }; /** bq_lowshelf */ -static const struct fc_descriptor bq_lowshelf_desc = { +static const struct spa_fga_descriptor bq_lowshelf_desc = { .name = "bq_lowshelf", .n_ports = BQ_NUM_PORTS, @@ -600,7 +600,7 @@ static const struct fc_descriptor bq_lowshelf_desc = { }; /** bq_highshelf */ -static const struct fc_descriptor bq_highshelf_desc = { +static const struct spa_fga_descriptor bq_highshelf_desc = { .name = "bq_highshelf", .n_ports = BQ_NUM_PORTS, @@ -614,7 +614,7 @@ static const struct fc_descriptor bq_highshelf_desc = { }; /** bq_peaking */ -static const struct fc_descriptor bq_peaking_desc = { +static const struct spa_fga_descriptor bq_peaking_desc = { .name = "bq_peaking", .n_ports = BQ_NUM_PORTS, @@ -628,7 +628,7 @@ static const struct fc_descriptor bq_peaking_desc = { }; /** bq_notch */ -static const struct fc_descriptor bq_notch_desc = { +static const struct spa_fga_descriptor bq_notch_desc = { .name = "bq_notch", .n_ports = BQ_NUM_PORTS, @@ -643,7 +643,7 @@ static const struct fc_descriptor bq_notch_desc = { /** bq_allpass */ -static const struct fc_descriptor bq_allpass_desc = { +static const struct spa_fga_descriptor bq_allpass_desc = { .name = "bq_allpass", .n_ports = BQ_NUM_PORTS, @@ -657,7 +657,7 @@ static const struct fc_descriptor bq_allpass_desc = { }; /* bq_raw */ -static const struct fc_descriptor bq_raw_desc = { +static const struct spa_fga_descriptor bq_raw_desc = { .name = "bq_raw", .n_ports = BQ_NUM_PORTS, @@ -902,7 +902,7 @@ error: #endif } -static void * convolver_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void * convolver_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct convolver_impl *impl; @@ -1082,14 +1082,14 @@ static void convolver_cleanup(void * Instance) free(impl); } -static struct fc_port convolve_ports[] = { +static struct spa_fga_port convolve_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, }; @@ -1106,9 +1106,9 @@ static void convolve_run(void * Instance, unsigned long SampleCount) convolver_run(impl->conv, impl->port[1], impl->port[0], SampleCount); } -static const struct fc_descriptor convolve_desc = { +static const struct spa_fga_descriptor convolve_desc = { .name = "convolver", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = 2, .ports = convolve_ports, @@ -1144,7 +1144,7 @@ static void delay_cleanup(void * Instance) free(impl); } -static void *delay_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void *delay_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct plugin *pl = (struct plugin*) plugin; @@ -1224,25 +1224,25 @@ static void delay_run(void * Instance, unsigned long SampleCount) impl->delay_samples, out, in, SampleCount); } -static struct fc_port delay_ports[] = { +static struct spa_fga_port delay_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Delay (s)", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = 0.0f, .max = 100.0f }, }; -static const struct fc_descriptor delay_desc = { +static const struct spa_fga_descriptor delay_desc = { .name = "delay", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = 3, .ports = delay_ports, @@ -1263,18 +1263,18 @@ static void invert_run(void * Instance, unsigned long SampleCount) out[n] = -in[n]; } -static struct fc_port invert_ports[] = { +static struct spa_fga_port invert_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, }; -static const struct fc_descriptor invert_desc = { +static const struct spa_fga_descriptor invert_desc = { .name = "invert", .n_ports = 2, @@ -1303,38 +1303,38 @@ static void clamp_run(void * Instance, unsigned long SampleCount) notify[0] = SPA_CLAMPF(ctrl[0], min, max); } -static struct fc_port clamp_ports[] = { +static struct spa_fga_port clamp_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 3, .name = "Control", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, }, { .index = 4, .name = "Min", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -100.0f, .max = 100.0f }, { .index = 5, .name = "Max", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -100.0f, .max = 100.0f }, }; -static const struct fc_descriptor clamp_desc = { +static const struct spa_fga_descriptor clamp_desc = { .name = "clamp", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(clamp_ports), .ports = clamp_ports, @@ -1360,38 +1360,38 @@ static void linear_run(void * Instance, unsigned long SampleCount) notify[0] = ctrl[0] * mult + add; } -static struct fc_port linear_ports[] = { +static struct spa_fga_port linear_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 3, .name = "Control", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, }, { .index = 4, .name = "Mult", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 5, .name = "Add", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f }, }; -static const struct fc_descriptor linear_desc = { +static const struct spa_fga_descriptor linear_desc = { .name = "linear", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(linear_ports), .ports = linear_ports, @@ -1427,28 +1427,28 @@ static void recip_run(void * Instance, unsigned long SampleCount) } } -static struct fc_port recip_ports[] = { +static struct spa_fga_port recip_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 3, .name = "Control", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, }, }; -static const struct fc_descriptor recip_desc = { +static const struct spa_fga_descriptor recip_desc = { .name = "recip", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(recip_ports), .ports = recip_ports, @@ -1476,33 +1476,33 @@ static void exp_run(void * Instance, unsigned long SampleCount) notify[0] = powf(base, ctrl[0]); } -static struct fc_port exp_ports[] = { +static struct spa_fga_port exp_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 3, .name = "Control", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, }, { .index = 4, .name = "Base", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = (float)M_E, .min = -10.0f, .max = 10.0f }, }; -static const struct fc_descriptor exp_desc = { +static const struct spa_fga_descriptor exp_desc = { .name = "exp", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(exp_ports), .ports = exp_ports, @@ -1533,43 +1533,43 @@ static void log_run(void * Instance, unsigned long SampleCount) notify[0] = m2 * log2f(fabsf(ctrl[0] * m1)) / lb; } -static struct fc_port log_ports[] = { +static struct spa_fga_port log_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 3, .name = "Control", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, }, { .index = 4, .name = "Base", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = (float)M_E, .min = 2.0f, .max = 100.0f }, { .index = 5, .name = "M1", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -10.0f, .max = 10.0f }, { .index = 6, .name = "M2", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = -10.0f, .max = 10.0f }, }; -static const struct fc_descriptor log_desc = { +static const struct spa_fga_descriptor log_desc = { .name = "log", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(log_ports), .ports = log_ports, @@ -1602,48 +1602,48 @@ static void mult_run(void * Instance, unsigned long SampleCount) dsp_ops_mult(impl->dsp, out, src, n_src, SampleCount); } -static struct fc_port mult_ports[] = { +static struct spa_fga_port mult_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In 1", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "In 2", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 3, .name = "In 3", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 4, .name = "In 4", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 5, .name = "In 5", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 6, .name = "In 6", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 7, .name = "In 7", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 8, .name = "In 8", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, }; -static const struct fc_descriptor mult_desc = { +static const struct spa_fga_descriptor mult_desc = { .name = "mult", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(mult_ports), .ports = mult_ports, @@ -1679,40 +1679,40 @@ static void sine_run(void * Instance, unsigned long SampleCount) } } -static struct fc_port sine_ports[] = { +static struct spa_fga_port sine_ports[] = { { .index = 0, .name = "Out", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "Notify", - .flags = FC_PORT_OUTPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL, }, { .index = 2, .name = "Freq", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 440.0f, .min = 0.0f, .max = 1000000.0f }, { .index = 3, .name = "Ampl", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0, .min = 0.0f, .max = 10.0f }, { .index = 4, .name = "Phase", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = (float)-M_PI, .max = (float)M_PI }, { .index = 5, .name = "Offset", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -10.0f, .max = 10.0f }, }; -static const struct fc_descriptor sine_desc = { +static const struct spa_fga_descriptor sine_desc = { .name = "sine", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(sine_ports), .ports = sine_ports, @@ -1898,7 +1898,7 @@ static int parse_filters(struct plugin *pl, struct spa_json *iter, int rate, * filtersX = [ ... ] # to load channel X * } */ -static void *param_eq_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void *param_eq_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct plugin *pl = (struct plugin *) plugin; @@ -1997,77 +1997,77 @@ static void param_eq_run(void * Instance, unsigned long SampleCount) &impl->port[8], (const float**)impl->port, 8, SampleCount); } -static struct fc_port param_eq_ports[] = { +static struct spa_fga_port param_eq_ports[] = { { .index = 0, .name = "In 1", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "In 2", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "In 3", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 3, .name = "In 4", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 4, .name = "In 5", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 5, .name = "In 6", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 6, .name = "In 7", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 7, .name = "In 8", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 8, .name = "Out 1", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 9, .name = "Out 2", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 10, .name = "Out 3", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 11, .name = "Out 4", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 12, .name = "Out 5", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 13, .name = "Out 6", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 14, .name = "Out 7", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 15, .name = "Out 8", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, }; -static const struct fc_descriptor param_eq_desc = { +static const struct spa_fga_descriptor param_eq_desc = { .name = "param_eq", - .flags = FC_DESCRIPTOR_SUPPORTS_NULL_DATA, + .flags = SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA, .n_ports = SPA_N_ELEMENTS(param_eq_ports), .ports = param_eq_ports, @@ -2078,7 +2078,7 @@ static const struct fc_descriptor param_eq_desc = { .cleanup = free, }; -static const struct fc_descriptor * builtin_descriptor(unsigned long Index) +static const struct spa_fga_descriptor * builtin_descriptor(unsigned long Index) { switch(Index) { case 0: @@ -2129,11 +2129,11 @@ static const struct fc_descriptor * builtin_descriptor(unsigned long Index) return NULL; } -static const struct fc_descriptor *builtin_make_desc(struct fc_plugin *plugin, const char *name) +static const struct spa_fga_descriptor *builtin_plugin_make_desc(void *plugin, const char *name) { unsigned long i; for (i = 0; ;i++) { - const struct fc_descriptor *d = builtin_descriptor(i); + const struct spa_fga_descriptor *d = builtin_descriptor(i); if (d == NULL) break; if (spa_streq(d->name, name)) @@ -2142,19 +2142,30 @@ static const struct fc_descriptor *builtin_make_desc(struct fc_plugin *plugin, c return NULL; } -static void builtin_plugin_unload(struct fc_plugin *p) +static void builtin_plugin_free(void *p) { free(p); } -struct fc_plugin *load_builtin_plugin(const struct spa_support *support, uint32_t n_support, +static struct spa_fga_plugin_methods impl_plugin = { + SPA_VERSION_FGA_PLUGIN_METHODS, + .make_desc = builtin_plugin_make_desc, + .free = builtin_plugin_free +}; + +struct spa_fga_plugin *load_builtin_plugin(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *plugin, const struct spa_dict *info) { struct plugin *impl = calloc (1, sizeof (struct plugin)); - impl->plugin.make_desc = builtin_make_desc; - impl->plugin.unload = builtin_plugin_unload; + + impl->plugin.iface = SPA_INTERFACE_INIT( + SPA_TYPE_INTERFACE_FILTER_GRAPH_AudioPlugin, + SPA_VERSION_FGA_PLUGIN, + &impl_plugin, impl); + impl->dsp = dsp; pffft_select_cpu(dsp->cpu_flags); impl->log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log); - return (struct fc_plugin *) impl; + + return (struct spa_fga_plugin *) impl; } diff --git a/src/modules/module-filter-chain/filter-graph.c b/src/modules/module-filter-chain/filter-graph.c index c927a45f0..9f64f6e9d 100644 --- a/src/modules/module-filter-chain/filter-graph.c +++ b/src/modules/module-filter-chain/filter-graph.c @@ -15,7 +15,7 @@ #include "config.h" -#include "plugin.h" +#include "audio-plugin.h" #include "filter-graph.h" #include @@ -56,9 +56,9 @@ SPA_LOG_TOPIC_DEFINE_STATIC(log_topic, "spa.filter-graph"); #define spa_filter_graph_emit_props_changed(hooks,...) spa_filter_graph_emit(hooks,props_changed, 0, __VA_ARGS__) -struct fc_plugin *load_ladspa_plugin(const struct spa_support *support, uint32_t n_support, +struct spa_fga_plugin *load_ladspa_plugin(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *path, const struct spa_dict *info); -struct fc_plugin *load_builtin_plugin(const struct spa_support *support, uint32_t n_support, +struct spa_fga_plugin *load_builtin_plugin(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *path, const struct spa_dict *info); struct plugin { @@ -67,14 +67,14 @@ struct plugin { char type[256]; char path[PATH_MAX]; - struct fc_plugin *plugin; + struct spa_fga_plugin *plugin; struct spa_list descriptor_list; }; struct plugin_func { struct spa_list link; char type[256]; - fc_plugin_load_func *func; + spa_filter_graph_audio_plugin_load_func_t *func; void *hndl; }; @@ -84,7 +84,7 @@ struct descriptor { struct plugin *plugin; char label[256]; - const struct fc_descriptor *desc; + const struct spa_fga_descriptor *desc; uint32_t n_input; uint32_t n_output; @@ -147,14 +147,14 @@ struct link { }; struct graph_port { - const struct fc_descriptor *desc; + const struct spa_fga_descriptor *desc; void **hndl; uint32_t port; unsigned next:1; }; struct graph_hndl { - const struct fc_descriptor *desc; + const struct spa_fga_descriptor *desc; void **hndl; }; @@ -280,7 +280,7 @@ static int impl_process(void *object, static float get_default(struct impl *impl, struct descriptor *desc, uint32_t p) { - struct fc_port *port = &desc->desc->ports[p]; + struct spa_fga_port *port = &desc->desc->ports[p]; return port->def; } @@ -304,7 +304,7 @@ static struct port *find_port(struct node *node, const char *name, int descripto { char *col, *node_name, *port_name, *str; struct port *ports; - const struct fc_descriptor *d; + const struct spa_fga_descriptor *d; uint32_t i, n_ports, port_id = SPA_ID_INVALID; str = strdupa(name); @@ -334,16 +334,16 @@ static struct port *find_port(struct node *node, const char *name, int descripto if (!spa_atou32(port_name, &port_id, 0)) port_id = SPA_ID_INVALID; - if (FC_IS_PORT_INPUT(descriptor)) { - if (FC_IS_PORT_CONTROL(descriptor)) { + if (SPA_FGA_IS_PORT_INPUT(descriptor)) { + if (SPA_FGA_IS_PORT_CONTROL(descriptor)) { ports = node->control_port; n_ports = node->desc->n_control; } else { ports = node->input_port; n_ports = node->desc->n_input; } - } else if (FC_IS_PORT_OUTPUT(descriptor)) { - if (FC_IS_PORT_CONTROL(descriptor)) { + } else if (SPA_FGA_IS_PORT_OUTPUT(descriptor)) { + if (SPA_FGA_IS_PORT_CONTROL(descriptor)) { ports = node->notify_port; n_ports = node->desc->n_notify; } else { @@ -371,8 +371,8 @@ static int impl_enum_prop_info(void *object, uint32_t idx, struct spa_pod_builde struct port *port; struct node *node; struct descriptor *desc; - const struct fc_descriptor *d; - struct fc_port *p; + const struct spa_fga_descriptor *d; + struct spa_fga_port *p; float def, min, max; char name[512]; uint32_t rate = impl->rate ? impl->rate : DEFAULT_RATE; @@ -386,7 +386,7 @@ static int impl_enum_prop_info(void *object, uint32_t idx, struct spa_pod_builde d = desc->desc; p = &d->ports[port->p]; - if (p->hint & FC_HINT_SAMPLE_RATE) { + if (p->hint & SPA_FGA_HINT_SAMPLE_RATE) { def = p->def * rate; min = p->min * rate; max = p->max * rate; @@ -407,7 +407,7 @@ static int impl_enum_prop_info(void *object, uint32_t idx, struct spa_pod_builde SPA_PROP_INFO_name, SPA_POD_String(name), 0); spa_pod_builder_prop(b, SPA_PROP_INFO_type, 0); - if (p->hint & FC_HINT_BOOLEAN) { + if (p->hint & SPA_FGA_HINT_BOOLEAN) { if (min == max) { spa_pod_builder_bool(b, def <= 0.0f ? false : true); } else { @@ -417,7 +417,7 @@ static int impl_enum_prop_info(void *object, uint32_t idx, struct spa_pod_builde spa_pod_builder_bool(b, true); spa_pod_builder_pop(b, &f[1]); } - } else if (p->hint & FC_HINT_INTEGER) { + } else if (p->hint & SPA_FGA_HINT_INTEGER) { if (min == max) { spa_pod_builder_int(b, (int32_t)def); } else { @@ -464,8 +464,8 @@ static int impl_get_props(void *object, struct spa_pod_builder *b, const struct struct port *port = graph->control_port[i]; struct node *node = port->node; struct descriptor *desc = node->desc; - const struct fc_descriptor *d = desc->desc; - struct fc_port *p = &d->ports[port->p]; + const struct spa_fga_descriptor *d = desc->desc; + struct spa_fga_port *p = &d->ports[port->p]; if (node->name[0] != '\0') snprintf(name, sizeof(name), "%s:%s", node->name, p->name); @@ -473,9 +473,9 @@ static int impl_get_props(void *object, struct spa_pod_builder *b, const struct snprintf(name, sizeof(name), "%s", p->name); spa_pod_builder_string(b, name); - if (p->hint & FC_HINT_BOOLEAN) { + if (p->hint & SPA_FGA_HINT_BOOLEAN) { spa_pod_builder_bool(b, port->control_data[0] <= 0.0f ? false : true); - } else if (p->hint & FC_HINT_INTEGER) { + } else if (p->hint & SPA_FGA_HINT_INTEGER) { spa_pod_builder_int(b, (int32_t)port->control_data[0]); } else { spa_pod_builder_float(b, port->control_data[0]); @@ -514,7 +514,7 @@ static int set_control_value(struct node *node, const char *name, float *value) int count = 0; uint32_t i, n_hndl; - port = find_port(node, name, FC_PORT_INPUT | FC_PORT_CONTROL); + port = find_port(node, name, SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL); if (port == NULL) return -ENOENT; @@ -577,7 +577,7 @@ static int impl_reset(void *object) uint32_t i; for (i = 0; i < graph->n_hndl; i++) { struct graph_hndl *hndl = &graph->hndl[i]; - const struct fc_descriptor *d = hndl->desc; + const struct spa_fga_descriptor *d = hndl->desc; if (hndl->hndl == NULL || *hndl->hndl == NULL) continue; if (d->deactivate) @@ -590,7 +590,7 @@ static int impl_reset(void *object) static void node_control_changed(struct node *node) { - const struct fc_descriptor *d = node->desc->desc; + const struct spa_fga_descriptor *d = node->desc->desc; uint32_t i; if (!node->control_changed) @@ -740,7 +740,7 @@ static void plugin_unref(struct plugin *hndl) if (--hndl->ref > 0) return; - fc_plugin_free(hndl->plugin); + spa_fga_plugin_free(hndl->plugin); spa_list_remove(&hndl->link); free(hndl); @@ -748,7 +748,7 @@ static void plugin_unref(struct plugin *hndl) static struct plugin_func *add_plugin_func(struct impl *impl, const char *type, - fc_plugin_load_func *func, void *hndl) + spa_filter_graph_audio_plugin_load_func_t *func, void *hndl) { struct plugin_func *pl; @@ -785,9 +785,9 @@ static inline const char *split_walk(const char *str, const char *delimiter, siz return s; } -static fc_plugin_load_func *find_plugin_func(struct impl *impl, const char *type) +static spa_filter_graph_audio_plugin_load_func_t *find_plugin_func(struct impl *impl, const char *type) { - fc_plugin_load_func *func = NULL; + spa_filter_graph_audio_plugin_load_func_t *func = NULL; void *hndl = NULL; int res; struct plugin_func *pl; @@ -821,7 +821,7 @@ static fc_plugin_load_func *find_plugin_func(struct impl *impl, const char *type errno = ENOENT; return NULL; } - func = dlsym(hndl, FC_PLUGIN_LOAD_FUNC); + func = dlsym(hndl, SPA_FILTER_GRAPH_AUDIO_PLUGIN_LOAD_FUNC_NAME); if (func != NULL) { spa_log_info(impl->log, "opened plugin module %s", module); pl = add_plugin_func(impl, type, func, hndl); @@ -841,9 +841,9 @@ error_close: static struct plugin *plugin_load(struct impl *impl, const char *type, const char *path) { - struct fc_plugin *pl = NULL; + struct spa_fga_plugin *pl = NULL; struct plugin *hndl; - fc_plugin_load_func *plugin_func; + spa_filter_graph_audio_plugin_load_func_t *plugin_func; spa_list_for_each(hndl, &impl->plugin_list, link) { if (spa_streq(hndl->type, type) && @@ -891,7 +891,7 @@ static void descriptor_unref(struct descriptor *desc) spa_list_remove(&desc->link); plugin_unref(desc->plugin); if (desc->desc) - fc_descriptor_free(desc->desc); + spa_fga_descriptor_free(desc->desc); free(desc->input); free(desc->output); free(desc->control); @@ -905,7 +905,7 @@ static struct descriptor *descriptor_load(struct impl *impl, const char *type, { struct plugin *hndl; struct descriptor *desc; - const struct fc_descriptor *d; + const struct spa_fga_descriptor *d; uint32_t i, n_input, n_output, n_control, n_notify; unsigned long p; int res; @@ -934,7 +934,7 @@ static struct descriptor *descriptor_load(struct impl *impl, const char *type, desc->plugin = hndl; spa_list_init(&desc->link); - if ((d = hndl->plugin->make_desc(hndl->plugin, label)) == NULL) { + if ((d = spa_fga_plugin_make_desc(hndl->plugin, label)) == NULL) { spa_log_error(impl->log, "cannot find label %s", label); res = -ENOENT; goto exit; @@ -944,16 +944,16 @@ static struct descriptor *descriptor_load(struct impl *impl, const char *type, n_input = n_output = n_control = n_notify = 0; for (p = 0; p < d->n_ports; p++) { - struct fc_port *fp = &d->ports[p]; - if (FC_IS_PORT_AUDIO(fp->flags)) { - if (FC_IS_PORT_INPUT(fp->flags)) + struct spa_fga_port *fp = &d->ports[p]; + if (SPA_FGA_IS_PORT_AUDIO(fp->flags)) { + if (SPA_FGA_IS_PORT_INPUT(fp->flags)) n_input++; - else if (FC_IS_PORT_OUTPUT(fp->flags)) + else if (SPA_FGA_IS_PORT_OUTPUT(fp->flags)) n_output++; - } else if (FC_IS_PORT_CONTROL(fp->flags)) { - if (FC_IS_PORT_INPUT(fp->flags)) + } else if (SPA_FGA_IS_PORT_CONTROL(fp->flags)) { + if (SPA_FGA_IS_PORT_INPUT(fp->flags)) n_control++; - else if (FC_IS_PORT_OUTPUT(fp->flags)) + else if (SPA_FGA_IS_PORT_OUTPUT(fp->flags)) n_notify++; } } @@ -964,26 +964,26 @@ static struct descriptor *descriptor_load(struct impl *impl, const char *type, desc->notify = calloc(n_notify, sizeof(unsigned long)); for (p = 0; p < d->n_ports; p++) { - struct fc_port *fp = &d->ports[p]; + struct spa_fga_port *fp = &d->ports[p]; - if (FC_IS_PORT_AUDIO(fp->flags)) { - if (FC_IS_PORT_INPUT(fp->flags)) { + if (SPA_FGA_IS_PORT_AUDIO(fp->flags)) { + if (SPA_FGA_IS_PORT_INPUT(fp->flags)) { spa_log_info(impl->log, "using port %lu ('%s') as input %d", p, fp->name, desc->n_input); desc->input[desc->n_input++] = p; } - else if (FC_IS_PORT_OUTPUT(fp->flags)) { + else if (SPA_FGA_IS_PORT_OUTPUT(fp->flags)) { spa_log_info(impl->log, "using port %lu ('%s') as output %d", p, fp->name, desc->n_output); desc->output[desc->n_output++] = p; } - } else if (FC_IS_PORT_CONTROL(fp->flags)) { - if (FC_IS_PORT_INPUT(fp->flags)) { + } else if (SPA_FGA_IS_PORT_CONTROL(fp->flags)) { + if (SPA_FGA_IS_PORT_INPUT(fp->flags)) { spa_log_info(impl->log, "using port %lu ('%s') as control %d", p, fp->name, desc->n_control); desc->control[desc->n_control++] = p; } - else if (FC_IS_PORT_OUTPUT(fp->flags)) { + else if (SPA_FGA_IS_PORT_OUTPUT(fp->flags)) { spa_log_info(impl->log, "using port %lu ('%s') as notify %d", p, fp->name, desc->n_notify); desc->notify[desc->n_notify++] = p; @@ -1119,13 +1119,13 @@ static int parse_link(struct graph *graph, struct spa_json *json) def_out_node = spa_list_first(&graph->node_list, struct node, link); def_in_node = spa_list_last(&graph->node_list, struct node, link); - out_port = find_port(def_out_node, output, FC_PORT_OUTPUT); - in_port = find_port(def_in_node, input, FC_PORT_INPUT); + out_port = find_port(def_out_node, output, SPA_FGA_PORT_OUTPUT); + in_port = find_port(def_in_node, input, SPA_FGA_PORT_INPUT); if (out_port == NULL && out_port == NULL) { /* try control ports */ - out_port = find_port(def_out_node, output, FC_PORT_OUTPUT | FC_PORT_CONTROL); - in_port = find_port(def_in_node, input, FC_PORT_INPUT | FC_PORT_CONTROL); + out_port = find_port(def_out_node, output, SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_CONTROL); + in_port = find_port(def_in_node, input, SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL); } if (in_port == NULL || out_port == NULL) { if (out_port == NULL) @@ -1235,7 +1235,7 @@ static int parse_volume(struct graph *graph, struct spa_json *json, bool capture else def_control = spa_list_last(&graph->node_list, struct node, link); - port = find_port(def_control, control, FC_PORT_INPUT | FC_PORT_CONTROL); + port = find_port(def_control, control, SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL); if (port == NULL) { spa_log_error(impl->log, "unknown control port %s", control); return -ENOENT; @@ -1402,7 +1402,7 @@ static int load_node(struct graph *graph, struct spa_json *json) static void node_cleanup(struct node *node) { - const struct fc_descriptor *d = node->desc->desc; + const struct spa_fga_descriptor *d = node->desc->desc; struct impl *impl = node->graph->impl; uint32_t i; @@ -1421,7 +1421,7 @@ static int port_ensure_data(struct port *port, uint32_t i, uint32_t max_samples) { float *data; struct node *node = port->node; - const struct fc_descriptor *d = node->desc->desc; + const struct spa_fga_descriptor *d = node->desc->desc; struct impl *impl = node->graph->impl; if ((data = port->audio_mem[i]) == NULL) { @@ -1488,8 +1488,8 @@ static int impl_activate(void *object, const struct spa_fraction *rate) struct port *port; struct link *link; struct descriptor *desc; - const struct fc_descriptor *d; - const struct fc_plugin *p; + const struct spa_fga_descriptor *d; + const struct spa_fga_plugin *p; uint32_t i, j, max_samples = impl->quantum_limit; int res; float *sd, *dd; @@ -1524,7 +1524,7 @@ static int impl_activate(void *object, const struct spa_fraction *rate) spa_list_for_each(node, &graph->node_list, link) { desc = node->desc; d = desc->desc; - if (d->flags & FC_DESCRIPTOR_SUPPORTS_NULL_DATA) { + if (d->flags & SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA) { sd = dd = NULL; } else { @@ -1625,7 +1625,7 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ uint32_t i, j, n_nodes, n_input, n_output, n_control, n_hndl = 0; int res; struct descriptor *desc; - const struct fc_descriptor *d; + const struct spa_fga_descriptor *d; char v[256]; bool allow_unused; @@ -1649,8 +1649,8 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ /* we allow unconnected ports when not explicitly given and the nodes support * NULL data */ allow_unused = inputs == NULL && outputs == NULL && - SPA_FLAG_IS_SET(first->desc->desc->flags, FC_DESCRIPTOR_SUPPORTS_NULL_DATA) && - SPA_FLAG_IS_SET(last->desc->desc->flags, FC_DESCRIPTOR_SUPPORTS_NULL_DATA); + SPA_FLAG_IS_SET(first->desc->desc->flags, SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA) && + SPA_FLAG_IS_SET(last->desc->desc->flags, SPA_FGA_DESCRIPTOR_SUPPORTS_NULL_DATA); if (n_input == 0) { spa_log_error(impl->log, "no inputs"); @@ -1733,7 +1733,7 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ gp = &graph->input[graph->n_input++]; gp->desc = NULL; spa_log_info(impl->log, "ignore input port %d", graph->n_input); - } else if ((port = find_port(first, v, FC_PORT_INPUT)) == NULL) { + } else if ((port = find_port(first, v, SPA_FGA_PORT_INPUT)) == NULL) { res = -ENOENT; spa_log_error(impl->log, "input port %s not found", v); goto error; @@ -1756,7 +1756,7 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ goto error; } - if (d->flags & FC_DESCRIPTOR_COPY) { + if (d->flags & SPA_FGA_DESCRIPTOR_COPY) { for (j = 0; j < desc->n_output; j++) { struct port *p = &port->node->output_port[j]; struct link *link; @@ -1812,7 +1812,7 @@ static int setup_graph(struct graph *graph, struct spa_json *inputs, struct spa_ if (spa_streq(v, "null")) { gp->desc = NULL; spa_log_info(impl->log, "silence output port %d", graph->n_output); - } else if ((port = find_port(last, v, FC_PORT_OUTPUT)) == NULL) { + } else if ((port = find_port(last, v, SPA_FGA_PORT_OUTPUT)) == NULL) { res = -ENOENT; spa_log_error(impl->log, "output port %s not found", v); goto error; diff --git a/src/modules/module-filter-chain/ladspa_plugin.c b/src/modules/module-filter-chain/ladspa_plugin.c index a133f7a7b..e5f20aa0b 100644 --- a/src/modules/module-filter-chain/ladspa_plugin.c +++ b/src/modules/module-filter-chain/ladspa_plugin.c @@ -13,11 +13,11 @@ #include #include -#include "plugin.h" +#include "audio-plugin.h" #include "ladspa.h" struct plugin { - struct fc_plugin plugin; + struct spa_fga_plugin plugin; struct spa_log *log; @@ -26,11 +26,11 @@ struct plugin { }; struct descriptor { - struct fc_descriptor desc; + struct spa_fga_descriptor desc; const LADSPA_Descriptor *d; }; -static void *ladspa_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor *desc, +static void *ladspa_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor *desc, unsigned long SampleRate, int index, const char *config) { struct descriptor *d = (struct descriptor *)desc; @@ -50,7 +50,7 @@ static const LADSPA_Descriptor *find_desc(LADSPA_Descriptor_Function desc_func, return NULL; } -static float get_default(struct fc_port *port, LADSPA_PortRangeHintDescriptor hint, +static float get_default(struct spa_fga_port *port, LADSPA_PortRangeHintDescriptor hint, LADSPA_Data lower, LADSPA_Data upper) { LADSPA_Data def; @@ -104,7 +104,7 @@ static float get_default(struct fc_port *port, LADSPA_PortRangeHintDescriptor hi return def; } -static void ladspa_port_update_ranges(struct descriptor *dd, struct fc_port *port) +static void ladspa_port_update_ranges(struct descriptor *dd, struct spa_fga_port *port) { const LADSPA_Descriptor *d = dd->d; unsigned long p = port->index; @@ -120,14 +120,14 @@ static void ladspa_port_update_ranges(struct descriptor *dd, struct fc_port *por port->max = upper; } -static void ladspa_free(const struct fc_descriptor *desc) +static void ladspa_free(const struct spa_fga_descriptor *desc) { struct descriptor *d = (struct descriptor*)desc; free(d->desc.ports); free(d); } -static const struct fc_descriptor *ladspa_make_desc(struct fc_plugin *plugin, const char *name) +static const struct spa_fga_descriptor *ladspa_plugin_make_desc(void *plugin, const char *name) { struct plugin *p = (struct plugin *)plugin; struct descriptor *desc; @@ -154,7 +154,7 @@ static const struct fc_descriptor *ladspa_make_desc(struct fc_plugin *plugin, co desc->desc.flags = 0; desc->desc.n_ports = d->PortCount; - desc->desc.ports = calloc(desc->desc.n_ports, sizeof(struct fc_port)); + desc->desc.ports = calloc(desc->desc.n_ports, sizeof(struct spa_fga_port)); for (i = 0; i < desc->desc.n_ports; i++) { desc->desc.ports[i].index = i; @@ -165,7 +165,7 @@ static const struct fc_descriptor *ladspa_make_desc(struct fc_plugin *plugin, co return &desc->desc; } -static void ladspa_unload(struct fc_plugin *plugin) +static void ladspa_plugin_free(void *plugin) { struct plugin *p = (struct plugin *)plugin; if (p->handle) @@ -173,7 +173,13 @@ static void ladspa_unload(struct fc_plugin *plugin) free(p); } -static struct fc_plugin *ladspa_handle_load_by_path(struct spa_log *log, const char *path) +static struct spa_fga_plugin_methods impl_plugin = { + SPA_VERSION_FGA_PLUGIN_METHODS, + .make_desc = ladspa_plugin_make_desc, + .free = ladspa_plugin_free +}; + +static struct spa_fga_plugin *ladspa_handle_load_by_path(struct spa_log *log, const char *path) { struct plugin *p; int res; @@ -204,8 +210,11 @@ static struct fc_plugin *ladspa_handle_load_by_path(struct spa_log *log, const c p->log = log; p->handle = handle; p->desc_func = desc_func; - p->plugin.make_desc = ladspa_make_desc; - p->plugin.unload = ladspa_unload; + + p->plugin.iface = SPA_INTERFACE_INIT( + SPA_TYPE_INTERFACE_FILTER_GRAPH_AudioPlugin, + SPA_VERSION_FGA_PLUGIN, + &impl_plugin, p); return &p->plugin; @@ -230,10 +239,10 @@ static inline const char *split_walk(const char *str, const char *delimiter, siz return s; } -struct fc_plugin *load_ladspa_plugin(const struct spa_support *support, uint32_t n_support, +struct spa_fga_plugin *load_ladspa_plugin(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *plugin, const struct spa_dict *info) { - struct fc_plugin *pl = NULL; + struct spa_fga_plugin *pl = NULL; struct spa_log *log; log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log); diff --git a/src/modules/module-filter-chain/lv2_plugin.c b/src/modules/module-filter-chain/lv2_plugin.c index 0059b37c4..570df2ed6 100644 --- a/src/modules/module-filter-chain/lv2_plugin.c +++ b/src/modules/module-filter-chain/lv2_plugin.c @@ -34,7 +34,7 @@ #endif -#include "plugin.h" +#include "audio-plugin.h" static struct context *_context; @@ -216,13 +216,13 @@ static void context_unref(struct context *context) } struct plugin { - struct fc_plugin plugin; + struct spa_fga_plugin plugin; struct context *c; const LilvPlugin *p; }; struct descriptor { - struct fc_descriptor desc; + struct spa_fga_descriptor desc; struct plugin *p; }; @@ -280,7 +280,7 @@ work_schedule(LV2_Worker_Schedule_Handle handle, uint32_t size, const void *data return LV2_WORKER_SUCCESS; } -static void *lv2_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor *desc, +static void *lv2_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor *desc, unsigned long SampleRate, int index, const char *config) { struct descriptor *d = (struct descriptor*)desc; @@ -385,7 +385,7 @@ static void lv2_run(void *instance, unsigned long SampleCount) i->work_iface->end_run(i->instance); } -static void lv2_free(const struct fc_descriptor *desc) +static void lv2_free(const struct spa_fga_descriptor *desc) { struct descriptor *d = (struct descriptor*)desc; free((char*)d->desc.name); @@ -393,7 +393,7 @@ static void lv2_free(const struct fc_descriptor *desc) free(d); } -static const struct fc_descriptor *lv2_make_desc(struct fc_plugin *plugin, const char *name) +static const struct spa_fga_descriptor *lv2_plugin_make_desc(void *plugin, const char *name) { struct plugin *p = (struct plugin *)plugin; struct context *c = p->c; @@ -419,7 +419,7 @@ static const struct fc_descriptor *lv2_make_desc(struct fc_plugin *plugin, const desc->desc.flags = 0; desc->desc.n_ports = lilv_plugin_get_num_ports(p->p); - desc->desc.ports = calloc(desc->desc.n_ports, sizeof(struct fc_port)); + desc->desc.ports = calloc(desc->desc.n_ports, sizeof(struct spa_fga_port)); mins = alloca(desc->desc.n_ports * sizeof(float)); maxes = alloca(desc->desc.n_ports * sizeof(float)); @@ -430,20 +430,20 @@ static const struct fc_descriptor *lv2_make_desc(struct fc_plugin *plugin, const for (i = 0; i < desc->desc.n_ports; i++) { const LilvPort *port = lilv_plugin_get_port_by_index(p->p, i); const LilvNode *symbol = lilv_port_get_symbol(p->p, port); - struct fc_port *fp = &desc->desc.ports[i]; + struct spa_fga_port *fp = &desc->desc.ports[i]; fp->index = i; fp->name = strdup(lilv_node_as_string(symbol)); fp->flags = 0; if (lilv_port_is_a(p->p, port, c->lv2_InputPort)) - fp->flags |= FC_PORT_INPUT; + fp->flags |= SPA_FGA_PORT_INPUT; if (lilv_port_is_a(p->p, port, c->lv2_OutputPort)) - fp->flags |= FC_PORT_OUTPUT; + fp->flags |= SPA_FGA_PORT_OUTPUT; if (lilv_port_is_a(p->p, port, c->lv2_ControlPort)) - fp->flags |= FC_PORT_CONTROL; + fp->flags |= SPA_FGA_PORT_CONTROL; if (lilv_port_is_a(p->p, port, c->lv2_AudioPort)) - fp->flags |= FC_PORT_AUDIO; + fp->flags |= SPA_FGA_PORT_AUDIO; fp->hint = 0; fp->min = mins[i]; @@ -453,15 +453,21 @@ static const struct fc_descriptor *lv2_make_desc(struct fc_plugin *plugin, const return &desc->desc; } -static void lv2_unload(struct fc_plugin *plugin) +static void lv2_plugin_free(void *plugin) { struct plugin *p = (struct plugin *)plugin; context_unref(p->c); free(p); } +static struct spa_fga_plugin_methods impl_plugin = { + SPA_VERSION_FGA_PLUGIN_METHODS, + .make_desc = lv2_plugin_make_desc, + .free = lv2_plugin_free +}; + SPA_EXPORT -struct fc_plugin *pipewire__filter_chain_plugin_load(const struct spa_support *support, uint32_t n_support, +struct spa_fga_plugin *spa_filter_graph_audio_plugin_load(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *plugin_uri, const struct spa_dict *info) { struct context *c; @@ -500,8 +506,10 @@ struct fc_plugin *pipewire__filter_chain_plugin_load(const struct spa_support *s p->p = plugin; p->c = c; - p->plugin.make_desc = lv2_make_desc; - p->plugin.unload = lv2_unload; + p->plugin.iface = SPA_INTERFACE_INIT( + SPA_TYPE_INTERFACE_FILTER_GRAPH_AudioPlugin, + SPA_VERSION_FGA_PLUGIN, + &impl_plugin, p); return &p->plugin; diff --git a/src/modules/module-filter-chain/plugin.h b/src/modules/module-filter-chain/plugin.h deleted file mode 100644 index 08932615f..000000000 --- a/src/modules/module-filter-chain/plugin.h +++ /dev/null @@ -1,86 +0,0 @@ -/* PipeWire */ -/* SPDX-FileCopyrightText: Copyright © 2021 Wim Taymans */ -/* SPDX-License-Identifier: MIT */ - -#ifndef PLUGIN_H -#define PLUGIN_H - -#include -#include - -#include - -#include "dsp-ops.h" - -struct fc_plugin { - const struct fc_descriptor *(*make_desc)(struct fc_plugin *plugin, const char *name); - void (*unload) (struct fc_plugin *plugin); -}; - -struct fc_port { - uint32_t index; - const char *name; -#define FC_PORT_INPUT (1ULL << 0) -#define FC_PORT_OUTPUT (1ULL << 1) -#define FC_PORT_CONTROL (1ULL << 2) -#define FC_PORT_AUDIO (1ULL << 3) - uint64_t flags; - -#define FC_HINT_BOOLEAN (1ULL << 2) -#define FC_HINT_SAMPLE_RATE (1ULL << 3) -#define FC_HINT_INTEGER (1ULL << 5) - uint64_t hint; - float def; - float min; - float max; -}; - -#define FC_IS_PORT_INPUT(x) ((x) & FC_PORT_INPUT) -#define FC_IS_PORT_OUTPUT(x) ((x) & FC_PORT_OUTPUT) -#define FC_IS_PORT_CONTROL(x) ((x) & FC_PORT_CONTROL) -#define FC_IS_PORT_AUDIO(x) ((x) & FC_PORT_AUDIO) - -struct fc_descriptor { - const char *name; -#define FC_DESCRIPTOR_SUPPORTS_NULL_DATA (1ULL << 0) -#define FC_DESCRIPTOR_COPY (1ULL << 1) - uint64_t flags; - - void (*free) (const struct fc_descriptor *desc); - - uint32_t n_ports; - struct fc_port *ports; - - void *(*instantiate) (const struct fc_plugin *plugin, const struct fc_descriptor *desc, - unsigned long SampleRate, int index, const char *config); - - void (*cleanup) (void *instance); - - void (*connect_port) (void *instance, unsigned long port, float *data); - void (*control_changed) (void *instance); - - void (*activate) (void *instance); - void (*deactivate) (void *instance); - - void (*run) (void *instance, unsigned long SampleCount); -}; - -static inline void fc_plugin_free(struct fc_plugin *plugin) -{ - if (plugin->unload) - plugin->unload(plugin); -} - -static inline void fc_descriptor_free(const struct fc_descriptor *desc) -{ - if (desc->free) - desc->free(desc); -} - -#define FC_PLUGIN_LOAD_FUNC "pipewire__filter_chain_plugin_load" - -typedef struct fc_plugin *(fc_plugin_load_func)(const struct spa_support *support, uint32_t n_support, - struct dsp_ops *dsp, const char *path, const struct spa_dict *info); - - -#endif /* PLUGIN_H */ diff --git a/src/modules/module-filter-chain/sofa_plugin.c b/src/modules/module-filter-chain/sofa_plugin.c index a8ed118d5..0733717e9 100644 --- a/src/modules/module-filter-chain/sofa_plugin.c +++ b/src/modules/module-filter-chain/sofa_plugin.c @@ -6,7 +6,7 @@ #include #include -#include "plugin.h" +#include "audio-plugin.h" #include "convolver.h" #include "dsp-ops.h" #include "pffft.h" @@ -14,7 +14,7 @@ #include struct plugin { - struct fc_plugin plugin; + struct spa_fga_plugin plugin; struct dsp_ops *dsp; struct spa_log *log; @@ -40,7 +40,7 @@ struct spatializer_impl { struct convolver *r_conv[3]; }; -static void * spatializer_instantiate(const struct fc_plugin *plugin, const struct fc_descriptor * Descriptor, +static void * spatializer_instantiate(const struct spa_fga_plugin *plugin, const struct spa_fga_descriptor * Descriptor, unsigned long SampleRate, int index, const char *config) { struct spatializer_impl *impl; @@ -356,38 +356,38 @@ static void spatializer_deactivate(void * Instance) impl->interpolate = false; } -static struct fc_port spatializer_ports[] = { +static struct spa_fga_port spatializer_ports[] = { { .index = 0, .name = "Out L", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 1, .name = "Out R", - .flags = FC_PORT_OUTPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_OUTPUT | SPA_FGA_PORT_AUDIO, }, { .index = 2, .name = "In", - .flags = FC_PORT_INPUT | FC_PORT_AUDIO, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_AUDIO, }, { .index = 3, .name = "Azimuth", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = 0.0f, .max = 360.0f }, { .index = 4, .name = "Elevation", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 0.0f, .min = -90.0f, .max = 90.0f }, { .index = 5, .name = "Radius", - .flags = FC_PORT_INPUT | FC_PORT_CONTROL, + .flags = SPA_FGA_PORT_INPUT | SPA_FGA_PORT_CONTROL, .def = 1.0f, .min = 0.0f, .max = 100.0f }, }; -static const struct fc_descriptor spatializer_desc = { +static const struct spa_fga_descriptor spatializer_desc = { .name = "spatializer", .n_ports = 6, @@ -401,7 +401,7 @@ static const struct fc_descriptor spatializer_desc = { .cleanup = spatializer_cleanup, }; -static const struct fc_descriptor * sofa_descriptor(unsigned long Index) +static const struct spa_fga_descriptor * sofa_descriptor(unsigned long Index) { switch(Index) { case 0: @@ -411,11 +411,11 @@ static const struct fc_descriptor * sofa_descriptor(unsigned long Index) } -static const struct fc_descriptor *sofa_make_desc(struct fc_plugin *plugin, const char *name) +static const struct spa_fga_descriptor *sofa_plugin_make_desc(void *plugin, const char *name) { unsigned long i; for (i = 0; ;i++) { - const struct fc_descriptor *d = sofa_descriptor(i); + const struct spa_fga_descriptor *d = sofa_descriptor(i); if (d == NULL) break; if (spa_streq(d->name, name)) @@ -424,19 +424,28 @@ static const struct fc_descriptor *sofa_make_desc(struct fc_plugin *plugin, cons return NULL; } -static void sofa_plugin_unload(struct fc_plugin *p) +static void sofa_plugin_free(void *plugin) { - free(p); + struct plugin *impl = plugin; + free(impl); } +static struct spa_fga_plugin_methods impl_plugin = { + SPA_VERSION_FGA_PLUGIN_METHODS, + .make_desc = sofa_plugin_make_desc, + .free = sofa_plugin_free +}; + SPA_EXPORT -struct fc_plugin *pipewire__filter_chain_plugin_load(const struct spa_support *support, uint32_t n_support, +struct spa_fga_plugin *spa_filter_graph_audio_plugin_load(const struct spa_support *support, uint32_t n_support, struct dsp_ops *dsp, const char *plugin, const struct spa_dict *info) { struct plugin *impl = calloc(1, sizeof (struct plugin)); - impl->plugin.make_desc = sofa_make_desc; - impl->plugin.unload = sofa_plugin_unload; + impl->plugin.iface = SPA_INTERFACE_INIT( + SPA_TYPE_INTERFACE_FILTER_GRAPH_AudioPlugin, + SPA_VERSION_FGA_PLUGIN, + &impl_plugin, impl); impl->quantum_limit = 8192u; @@ -453,5 +462,5 @@ struct fc_plugin *pipewire__filter_chain_plugin_load(const struct spa_support *s impl->main_loop = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Loop); impl->log = spa_support_find(support, n_support, SPA_TYPE_INTERFACE_Log); - return (struct fc_plugin *) impl; + return (struct spa_fga_plugin *) impl; }