diff --git a/Makefile.in b/Makefile.in index a5cc649b6..104619316 100644 --- a/Makefile.in +++ b/Makefile.in @@ -16,7 +16,7 @@ clean: ninja -C $(BUILD_ROOT) clean run: all - SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins:$(BUILD_ROOT)/src/modules \ + SPA_PLUGIN_DIR=$(BUILD_ROOT)/spa/plugins \ SPA_DATA_DIR=$(SOURCE_ROOT)/spa/plugins \ PIPEWIRE_MODULE_DIR=$(BUILD_ROOT)/src/modules \ PATH=$(BUILD_ROOT)/src/examples:$(PATH) \ diff --git a/pw-uninstalled.sh b/pw-uninstalled.sh index 4167c4f4a..1bb6c55c2 100755 --- a/pw-uninstalled.sh +++ b/pw-uninstalled.sh @@ -37,7 +37,7 @@ fi # the config file read by the daemon export PIPEWIRE_CONFIG_DIR="${BUILDDIR}/src/daemon" # the directory with SPA plugins -export SPA_PLUGIN_DIR="${BUILDDIR}/spa/plugins:${BUILDDIR}/src/modules" +export SPA_PLUGIN_DIR="${BUILDDIR}/spa/plugins" export SPA_DATA_DIR="${SCRIPT_DIR}/spa/plugins" # the directory with pipewire modules export PIPEWIRE_MODULE_DIR="${BUILDDIR}/src/modules" diff --git a/src/modules/module-filter-chain/filter-graph.h b/spa/include/spa/filter-graph/filter-graph.h similarity index 100% rename from src/modules/module-filter-chain/filter-graph.h rename to spa/include/spa/filter-graph/filter-graph.h diff --git a/src/modules/module-filter-chain/audio-dsp-avx.c b/spa/plugins/filter-graph/audio-dsp-avx.c similarity index 100% rename from src/modules/module-filter-chain/audio-dsp-avx.c rename to spa/plugins/filter-graph/audio-dsp-avx.c diff --git a/src/modules/module-filter-chain/audio-dsp-c.c b/spa/plugins/filter-graph/audio-dsp-c.c similarity index 100% rename from src/modules/module-filter-chain/audio-dsp-c.c rename to spa/plugins/filter-graph/audio-dsp-c.c diff --git a/src/modules/module-filter-chain/audio-dsp-impl.h b/spa/plugins/filter-graph/audio-dsp-impl.h similarity index 100% rename from src/modules/module-filter-chain/audio-dsp-impl.h rename to spa/plugins/filter-graph/audio-dsp-impl.h diff --git a/src/modules/module-filter-chain/audio-dsp-sse.c b/spa/plugins/filter-graph/audio-dsp-sse.c similarity index 100% rename from src/modules/module-filter-chain/audio-dsp-sse.c rename to spa/plugins/filter-graph/audio-dsp-sse.c diff --git a/src/modules/module-filter-chain/audio-dsp.c b/spa/plugins/filter-graph/audio-dsp.c similarity index 100% rename from src/modules/module-filter-chain/audio-dsp.c rename to spa/plugins/filter-graph/audio-dsp.c diff --git a/src/modules/module-filter-chain/audio-dsp.h b/spa/plugins/filter-graph/audio-dsp.h similarity index 100% rename from src/modules/module-filter-chain/audio-dsp.h rename to spa/plugins/filter-graph/audio-dsp.h diff --git a/src/modules/module-filter-chain/audio-plugin.h b/spa/plugins/filter-graph/audio-plugin.h similarity index 100% rename from src/modules/module-filter-chain/audio-plugin.h rename to spa/plugins/filter-graph/audio-plugin.h diff --git a/src/modules/module-filter-chain/biquad.c b/spa/plugins/filter-graph/biquad.c similarity index 100% rename from src/modules/module-filter-chain/biquad.c rename to spa/plugins/filter-graph/biquad.c diff --git a/src/modules/module-filter-chain/biquad.h b/spa/plugins/filter-graph/biquad.h similarity index 100% rename from src/modules/module-filter-chain/biquad.h rename to spa/plugins/filter-graph/biquad.h diff --git a/src/modules/module-filter-chain/builtin_plugin.c b/spa/plugins/filter-graph/builtin_plugin.c similarity index 99% rename from src/modules/module-filter-chain/builtin_plugin.c rename to spa/plugins/filter-graph/builtin_plugin.c index 1ba7741c9..999f0de08 100644 --- a/src/modules/module-filter-chain/builtin_plugin.c +++ b/spa/plugins/filter-graph/builtin_plugin.c @@ -2238,7 +2238,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -struct spa_handle_factory spa_fga_plugin_builtin_factory = { +static struct spa_handle_factory spa_fga_plugin_builtin_factory = { SPA_VERSION_HANDLE_FACTORY, "filter.graph.plugin.builtin", NULL, diff --git a/src/modules/module-filter-chain/convolver.c b/spa/plugins/filter-graph/convolver.c similarity index 100% rename from src/modules/module-filter-chain/convolver.c rename to spa/plugins/filter-graph/convolver.c diff --git a/src/modules/module-filter-chain/convolver.h b/spa/plugins/filter-graph/convolver.h similarity index 100% rename from src/modules/module-filter-chain/convolver.h rename to spa/plugins/filter-graph/convolver.h diff --git a/src/modules/module-filter-chain/filter-graph.c b/spa/plugins/filter-graph/filter-graph.c similarity index 99% rename from src/modules/module-filter-chain/filter-graph.c rename to spa/plugins/filter-graph/filter-graph.c index 9d9693aa0..6ae50109b 100644 --- a/src/modules/module-filter-chain/filter-graph.c +++ b/spa/plugins/filter-graph/filter-graph.c @@ -29,9 +29,9 @@ #include #include #include +#include #include "audio-plugin.h" -#include "filter-graph.h" #include "audio-dsp-impl.h" #undef SPA_LOG_TOPIC_DEFAULT @@ -762,8 +762,7 @@ static struct plugin *plugin_load(struct impl *impl, const char *type, const cha } spa_scnprintf(module, sizeof(module), - //"filter-graph/libspa-filter-graph-plugin-%s", type); - "libspa-filter-graph-plugin-%s", type); + "filter-graph/libspa-filter-graph-plugin-%s", type); spa_scnprintf(factory_name, sizeof(factory_name), "filter.graph.plugin.%s", type); spa_scnprintf(dsp_ptr, sizeof(dsp_ptr), @@ -818,9 +817,9 @@ static void descriptor_unref(struct descriptor *desc) return; spa_list_remove(&desc->link); - plugin_unref(desc->plugin); if (desc->desc) spa_fga_descriptor_free(desc->desc); + plugin_unref(desc->plugin); free(desc->input); free(desc->output); free(desc->control); @@ -2089,7 +2088,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -struct spa_handle_factory spa_filter_graph_factory = { +static struct spa_handle_factory spa_filter_graph_factory = { SPA_VERSION_HANDLE_FACTORY, "filter.graph", NULL, diff --git a/src/modules/module-filter-chain/ladspa.h b/spa/plugins/filter-graph/ladspa.h similarity index 100% rename from src/modules/module-filter-chain/ladspa.h rename to spa/plugins/filter-graph/ladspa.h diff --git a/src/modules/module-filter-chain/ladspa_plugin.c b/spa/plugins/filter-graph/ladspa_plugin.c similarity index 99% rename from src/modules/module-filter-chain/ladspa_plugin.c rename to spa/plugins/filter-graph/ladspa_plugin.c index 122091708..45026c8e7 100644 --- a/src/modules/module-filter-chain/ladspa_plugin.c +++ b/spa/plugins/filter-graph/ladspa_plugin.c @@ -358,7 +358,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -struct spa_handle_factory spa_fga_plugin_ladspa_factory = { +static struct spa_handle_factory spa_fga_plugin_ladspa_factory = { SPA_VERSION_HANDLE_FACTORY, "filter.graph.plugin.ladspa", NULL, diff --git a/src/modules/module-filter-chain/lv2_plugin.c b/spa/plugins/filter-graph/lv2_plugin.c similarity index 100% rename from src/modules/module-filter-chain/lv2_plugin.c rename to spa/plugins/filter-graph/lv2_plugin.c diff --git a/spa/plugins/filter-graph/meson.build b/spa/plugins/filter-graph/meson.build new file mode 100644 index 000000000..6ee6338c3 --- /dev/null +++ b/spa/plugins/filter-graph/meson.build @@ -0,0 +1,107 @@ +plugin_dependencies = [] +if get_option('spa-plugins').allowed() + plugin_dependencies += audioconvert_dep +endif + +simd_cargs = [] +simd_dependencies = [] + +if have_sse + filter_graph_sse = static_library('filter_graph_sse', + ['pffft.c', + 'audio-dsp-sse.c' ], + include_directories : [configinc], + c_args : [sse_args, '-O3', '-DHAVE_SSE'], + dependencies : [ spa_dep ], + install : false + ) + simd_cargs += ['-DHAVE_SSE'] + simd_dependencies += filter_graph_sse +endif +if have_avx + filter_graph_avx = static_library('filter_graph_avx', + ['audio-dsp-avx.c' ], + include_directories : [configinc], + c_args : [avx_args, fma_args,'-O3', '-DHAVE_AVX'], + dependencies : [ spa_dep ], + install : false + ) + simd_cargs += ['-DHAVE_AVX'] + simd_dependencies += filter_graph_avx +endif +if have_neon + filter_graph_neon = static_library('filter_graph_neon', + ['pffft.c' ], + c_args : [neon_args, '-O3', '-DHAVE_NEON'], + dependencies : [ spa_dep ], + install : false + ) + simd_cargs += ['-DHAVE_NEON'] + simd_dependencies += filter_graph_neon +endif + +filter_graph_c = static_library('filter_graph_c', + ['pffft.c', + 'audio-dsp.c', + 'audio-dsp-c.c' ], + include_directories : [configinc], + c_args : [simd_cargs, '-O3', '-DPFFFT_SIMD_DISABLE'], + dependencies : [ spa_dep, fftw_dep], + install : false +) +simd_dependencies += filter_graph_c + +spa_filter_graph = shared_library('spa-filter-graph', + ['biquad.c', + 'filter-graph.c' ], + include_directories : [configinc], + dependencies : [ spa_dep, sndfile_dep, plugin_dependencies, mathlib ], + install : true, + install_dir : spa_plugindir / 'filter-graph', + link_with: simd_dependencies +) + + +filter_graph_dependencies = [ + spa_dep, mathlib, sndfile_dep, plugin_dependencies +] + +spa_filter_graph_plugin_builtin = shared_library('spa-filter-graph-plugin-builtin', + [ 'builtin_plugin.c', + 'convolver.c' ], + include_directories : [configinc], + install : true, + install_dir : spa_plugindir / 'filter-graph', + dependencies : [ filter_graph_dependencies ] +) + +spa_filter_graph_plugin_ladspa = shared_library('spa-filter-graph-plugin-ladspa', + [ 'ladspa_plugin.c' ], + include_directories : [configinc], + install : true, + install : true, + install_dir : spa_plugindir / 'filter-graph', + dependencies : [ filter_graph_dependencies ] +) + +if libmysofa_dep.found() +spa_filter_graph_plugin_sofa = shared_library('spa-filter-graph-plugin-sofa', + [ 'sofa_plugin.c', + 'convolver.c' ], + include_directories : [configinc], + install : true, + install_dir : spa_plugindir / 'filter-graph', + dependencies : [ filter_graph_dependencies, libmysofa_dep ] +) +endif + +if lilv_lib.found() +spa_filter_graph_plugin_lv2 = shared_library('spa-filter-graph-plugin-lv2', + [ 'lv2_plugin.c' ], + include_directories : [configinc], + install : true, + install_dir : spa_plugindir / 'filter-graph', + dependencies : [ filter_graph_dependencies, lilv_lib ] +) +endif + diff --git a/src/modules/module-filter-chain/pffft.c b/spa/plugins/filter-graph/pffft.c similarity index 100% rename from src/modules/module-filter-chain/pffft.c rename to spa/plugins/filter-graph/pffft.c diff --git a/src/modules/module-filter-chain/pffft.h b/spa/plugins/filter-graph/pffft.h similarity index 100% rename from src/modules/module-filter-chain/pffft.h rename to spa/plugins/filter-graph/pffft.h diff --git a/src/modules/module-filter-chain/sofa_plugin.c b/spa/plugins/filter-graph/sofa_plugin.c similarity index 99% rename from src/modules/module-filter-chain/sofa_plugin.c rename to spa/plugins/filter-graph/sofa_plugin.c index de2367817..d348bc97a 100644 --- a/src/modules/module-filter-chain/sofa_plugin.c +++ b/spa/plugins/filter-graph/sofa_plugin.c @@ -528,7 +528,7 @@ impl_enum_interface_info(const struct spa_handle_factory *factory, return 1; } -struct spa_handle_factory spa_fga_sofa_plugin_factory = { +static struct spa_handle_factory spa_fga_sofa_plugin_factory = { SPA_VERSION_HANDLE_FACTORY, "filter.graph.plugin.sofa", NULL, diff --git a/spa/plugins/meson.build b/spa/plugins/meson.build index 97ba78af7..42aec7ed3 100644 --- a/spa/plugins/meson.build +++ b/spa/plugins/meson.build @@ -55,3 +55,4 @@ if libcamera_dep.found() endif subdir('aec') +subdir('filter-graph') diff --git a/src/daemon/pipewire.conf.in b/src/daemon/pipewire.conf.in index e51b70b44..f18aee20f 100644 --- a/src/daemon/pipewire.conf.in +++ b/src/daemon/pipewire.conf.in @@ -84,6 +84,7 @@ context.spa-libs = { api.jack.* = jack/libspa-jack support.* = support/libspa-support video.convert.* = videoconvert/libspa-videoconvert + #filter.graph = filter-graph/libspa-filter-graph #videotestsrc = videotestsrc/libspa-videotestsrc #audiotestsrc = audiotestsrc/libspa-audiotestsrc } diff --git a/src/modules/meson.build b/src/modules/meson.build index 219fa6170..b3ad12ce4 100644 --- a/src/modules/meson.build +++ b/src/modules/meson.build @@ -71,122 +71,15 @@ pipewire_module_loopback = shared_library('pipewire-module-loopback', dependencies : [spa_dep, mathlib, dl_lib, pipewire_dep], ) -plugin_dependencies = [] -if get_option('spa-plugins').allowed() - plugin_dependencies += audioconvert_dep -endif - -simd_cargs = [] -simd_dependencies = [] - -if have_sse - filter_graph_sse = static_library('filter_graph_sse', - ['module-filter-chain/pffft.c', - 'module-filter-chain/audio-dsp-sse.c' ], - include_directories : [configinc], - c_args : [sse_args, '-O3', '-DHAVE_SSE'], - dependencies : [ spa_dep ], - install : false - ) - simd_cargs += ['-DHAVE_SSE'] - simd_dependencies += filter_graph_sse -endif -if have_avx - filter_graph_avx = static_library('filter_graph_avx', - ['module-filter-chain/audio-dsp-avx.c' ], - include_directories : [configinc], - c_args : [avx_args, fma_args,'-O3', '-DHAVE_AVX'], - dependencies : [ spa_dep ], - install : false - ) - simd_cargs += ['-DHAVE_AVX'] - simd_dependencies += filter_graph_avx -endif -if have_neon - filter_graph_neon = static_library('filter_graph_neon', - ['module-filter-chain/pffft.c' ], - c_args : [neon_args, '-O3', '-DHAVE_NEON'], - dependencies : [ spa_dep ], - install : false - ) - simd_cargs += ['-DHAVE_NEON'] - simd_dependencies += filter_graph_neon -endif - -filter_graph_c = static_library('filter_graph_c', - ['module-filter-chain/pffft.c', - 'module-filter-chain/audio-dsp.c', - 'module-filter-chain/audio-dsp-c.c' ], - include_directories : [configinc], - c_args : [simd_cargs, '-O3', '-DPFFFT_SIMD_DISABLE'], - dependencies : [ spa_dep, fftw_dep], - install : false -) -simd_dependencies += filter_graph_c - -filter_graph = static_library('filter_graph', - ['module-filter-chain/biquad.c', - 'module-filter-chain/filter-graph.c' ], - include_directories : [configinc], - dependencies : [ spa_dep, sndfile_dep, plugin_dependencies ], - install : false -) -simd_dependencies += filter_graph - -filter_graph_dependencies = [ - spa_dep, mathlib, dl_lib, sndfile_dep, plugin_dependencies -] - pipewire_module_filter_chain = shared_library('pipewire-module-filter-chain', [ 'module-filter-chain.c' ], include_directories : [configinc], install : true, install_dir : modules_install_dir, install_rpath: modules_install_dir, - link_with : simd_dependencies, dependencies : [spa_dep, mathlib, dl_lib, pipewire_dep], ) -pipewire_module_filter_graph_builtin = shared_library('spa-filter-graph-plugin-builtin', - [ 'module-filter-chain/builtin_plugin.c', - 'module-filter-chain/convolver.c' ], - include_directories : [configinc], - install : true, - install_dir : spa_plugindir / 'filter-graph', - dependencies : [ filter_graph_dependencies ] -) - -pipewire_module_filter_graph_ladspa = shared_library('spa-filter-graph-plugin-ladspa', - [ 'module-filter-chain/ladspa_plugin.c' ], - include_directories : [configinc], - install : true, - install : true, - install_dir : spa_plugindir / 'filter-graph', - dependencies : [ filter_graph_dependencies ] -) - -if libmysofa_dep.found() -pipewire_module_filter_graph_sofa = shared_library('spa-filter-graph-plugin-sofa', - [ 'module-filter-chain/sofa_plugin.c', - 'module-filter-chain/convolver.c' ], - include_directories : [configinc], - install : true, - install_dir : spa_plugindir / 'filter-graph', - dependencies : [ filter_graph_dependencies, libmysofa_dep ] -) -endif - -if lilv_lib.found() -pipewire_module_filter_graph_lv2 = shared_library('spa-filter-graph-plugin-lv2', - [ 'module-filter-chain/lv2_plugin.c' ], - include_directories : [configinc], - install : true, - install_dir : spa_plugindir / 'filter-graph', - dependencies : [ filter_graph_dependencies, lilv_lib ] -) -endif - - pipewire_module_combine_stream = shared_library('pipewire-module-combine-stream', [ 'module-combine-stream.c' ], include_directories : [configinc], diff --git a/src/modules/module-filter-chain.c b/src/modules/module-filter-chain.c index 5add83ef0..b09b94895 100644 --- a/src/modules/module-filter-chain.c +++ b/src/modules/module-filter-chain.c @@ -17,11 +17,10 @@ #include #include #include +#include #include -#include "module-filter-chain/filter-graph.h" - #define NAME "filter-chain" PW_LOG_TOPIC_STATIC(mod_topic, "mod." NAME); @@ -1168,8 +1167,7 @@ static void impl_destroy(struct impl *impl) pw_core_disconnect(impl->core); if (impl->handle) - spa_handle_clear(impl->handle); - free(impl->handle); + pw_unload_spa_handle(impl->handle); pw_properties_free(impl->capture_props); pw_properties_free(impl->playback_props); @@ -1222,8 +1220,6 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) uint32_t pid = getpid(); const char *str; int res; - const struct spa_support *support; - uint32_t n_support; void *iface = NULL; PW_LOG_TOPIC_INIT(mod_topic); @@ -1330,20 +1326,13 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) pw_properties_setf(props, "filter-graph.n_inputs", "%d", impl->capture_info.channels); pw_properties_setf(props, "filter-graph.n_outputs", "%d", impl->playback_info.channels); - impl->handle = calloc(1, spa_handle_factory_get_size(&spa_filter_graph_factory, &props->dict)); + pw_properties_set(props, SPA_KEY_LIBRARY_NAME, "filter-graph/libspa-filter-graph"); + impl->handle = pw_context_load_spa_handle(impl->context, "filter.graph", &props->dict); if (impl->handle == NULL) { res = -errno; goto error; } - support = pw_context_get_support(impl->context, &n_support); - if ((res = spa_handle_factory_init(&spa_filter_graph_factory, - impl->handle, &props->dict, - support, n_support)) < 0) { - pw_log_debug("can't make factory instance: %d (%s)", - res, spa_strerror(res)); - goto error; - } res = spa_handle_get_interface(impl->handle, SPA_TYPE_INTERFACE_FilterGraph, &iface); if (res < 0 || iface == NULL) goto error;