Lines Matching full:plugin
4 * \brief ALSA Plugin <-> LADSPA Plugin Interface
10 * PCM - LADSPA integration plugin
31 * The LADSPA plugin rewrite was sponsored by MediaNet AG
60 /* Plugin custom fields */
108 struct list_head instances; /* one LADSPA plugin might be used multiple times */
184 snd_pcm_ladspa_plugin_t *plugin = list_entry(plugins->next, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_free_plugins() local
185 snd_pcm_ladspa_free_io(&plugin->input); in snd_pcm_ladspa_free_plugins()
186 snd_pcm_ladspa_free_io(&plugin->output); in snd_pcm_ladspa_free_plugins()
187 if (plugin->dl_handle) in snd_pcm_ladspa_free_plugins()
188 dlclose(plugin->dl_handle); in snd_pcm_ladspa_free_plugins()
189 free(plugin->filename); in snd_pcm_ladspa_free_plugins()
190 list_del(&plugin->list); in snd_pcm_ladspa_free_plugins()
191 free(plugin); in snd_pcm_ladspa_free_plugins()
326 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_free_instances() local
327 list_for_each_safe(pos1, next1, &plugin->instances) { in snd_pcm_ladspa_free_instances()
329 if (plugin->desc->deactivate) in snd_pcm_ladspa_free_instances()
330 plugin->desc->deactivate(instance->handle); in snd_pcm_ladspa_free_instances()
332 if (plugin->desc->cleanup) in snd_pcm_ladspa_free_instances()
333 plugin->desc->cleanup(instance->handle); in snd_pcm_ladspa_free_instances()
351 if (plugin->desc->activate) in snd_pcm_ladspa_free_instances()
352 plugin->desc->activate(instance->handle); in snd_pcm_ladspa_free_instances()
356 assert(list_empty(&plugin->instances)); in snd_pcm_ladspa_free_instances()
406 static int snd_pcm_ladspa_connect_plugin1(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_connect_plugin1() argument
413 assert(plugin->policy == SND_PCM_LADSPA_POLICY_NONE); in snd_pcm_ladspa_connect_plugin1()
416 snd_pcm_ladspa_count_ports(plugin, io->pdesc | LADSPA_PORT_AUDIO); in snd_pcm_ladspa_connect_plugin1()
421 err = snd_pcm_ladspa_find_port(&port, plugin, io->pdesc | LADSPA_PORT_AUDIO, idx); in snd_pcm_ladspa_connect_plugin1()
423 …DERR("unable to find audio %s port %u plugin '%s'", io->pdesc & LADSPA_PORT_INPUT ? "input" : "out… in snd_pcm_ladspa_connect_plugin1()
431 …unable to add channel %u for audio %s plugin '%s'", idx, io->pdesc & LADSPA_PORT_INPUT ? "input" :… in snd_pcm_ladspa_connect_plugin1()
436 …("unable to add port %u for audio %s plugin '%s'", port, io->pdesc & LADSPA_PORT_INPUT ? "input" :… in snd_pcm_ladspa_connect_plugin1()
444 static int snd_pcm_ladspa_connect_plugin(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_connect_plugin() argument
449 err = snd_pcm_ladspa_connect_plugin1(plugin, &plugin->input, &instance->input); in snd_pcm_ladspa_connect_plugin()
452 err = snd_pcm_ladspa_connect_plugin1(plugin, &plugin->output, &instance->output); in snd_pcm_ladspa_connect_plugin()
458 static int snd_pcm_ladspa_connect_plugin_duplicate1(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_connect_plugin_duplicate1() argument
466 assert(plugin->policy == SND_PCM_LADSPA_POLICY_DUPLICATE); in snd_pcm_ladspa_connect_plugin_duplicate1()
470 err = snd_pcm_ladspa_find_port(&port, plugin, io->pdesc | LADSPA_PORT_AUDIO, 0); in snd_pcm_ladspa_connect_plugin_duplicate1()
472 …unable to find audio %s port %u plugin '%s'", io->pdesc & LADSPA_PORT_INPUT ? "input" : "output", … in snd_pcm_ladspa_connect_plugin_duplicate1()
478 …unable to add channel %u for audio %s plugin '%s'", idx, io->pdesc & LADSPA_PORT_INPUT ? "input" :… in snd_pcm_ladspa_connect_plugin_duplicate1()
483 …("unable to add port %u for audio %s plugin '%s'", port, io->pdesc & LADSPA_PORT_INPUT ? "input" :… in snd_pcm_ladspa_connect_plugin_duplicate1()
489 static int snd_pcm_ladspa_connect_plugin_duplicate(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_connect_plugin_duplicate() argument
497 err = snd_pcm_ladspa_connect_plugin_duplicate1(plugin, in_io, &instance->input, idx); in snd_pcm_ladspa_connect_plugin_duplicate()
500 err = snd_pcm_ladspa_connect_plugin_duplicate1(plugin, out_io, &instance->output, idx); in snd_pcm_ladspa_connect_plugin_duplicate()
568 static int snd_pcm_ladspa_connect_controls(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_connect_controls() argument
574 for (idx = midx = 0; idx < plugin->desc->PortCount; idx++) in snd_pcm_ladspa_connect_controls()
575 …if ((plugin->desc->PortDescriptors[idx] & (io->pdesc | LADSPA_PORT_CONTROL)) == (io->pdesc | LADSP… in snd_pcm_ladspa_connect_controls()
578 snd_pcm_ladspa_get_default_cvalue(plugin->desc, idx, &io->controls[midx]); in snd_pcm_ladspa_connect_controls()
579 plugin->desc->connect_port(instance->handle, idx, &io->controls[midx]); in snd_pcm_ladspa_connect_controls()
588 static int snd_pcm_ladspa_check_connect(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_check_connect() argument
596 for (idx = midx = 0; idx < plugin->desc->PortCount; idx++) in snd_pcm_ladspa_check_connect()
597 …if ((plugin->desc->PortDescriptors[idx] & (io->pdesc | LADSPA_PORT_AUDIO)) == (io->pdesc | LADSPA_… in snd_pcm_ladspa_check_connect()
599 …SNDERR("%s port for plugin %s depth %u is not connected", io->pdesc & LADSPA_PORT_INPUT ? "input" … in snd_pcm_ladspa_check_connect()
625 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_allocate_instances() local
626 … in_ports = snd_pcm_ladspa_count_ports(plugin, LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO); in snd_pcm_ladspa_allocate_instances()
627 … out_ports = snd_pcm_ladspa_count_ports(plugin, LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO); in snd_pcm_ladspa_allocate_instances()
629 if (plugin->policy == SND_PCM_LADSPA_POLICY_DUPLICATE) { in snd_pcm_ladspa_allocate_instances()
633 plugin->policy = SND_PCM_LADSPA_POLICY_NONE; in snd_pcm_ladspa_allocate_instances()
639 instance->desc = plugin->desc; in snd_pcm_ladspa_allocate_instances()
640 instance->handle = plugin->desc->instantiate(plugin->desc, pcm->rate); in snd_pcm_ladspa_allocate_instances()
643 SNDERR("Unable to create instance of LADSPA plugin '%s'", plugin->desc->Name); in snd_pcm_ladspa_allocate_instances()
647 list_add_tail(&instance->list, &plugin->instances); in snd_pcm_ladspa_allocate_instances()
648 if (plugin->policy == SND_PCM_LADSPA_POLICY_DUPLICATE) { in snd_pcm_ladspa_allocate_instances()
649 …err = snd_pcm_ladspa_connect_plugin_duplicate(plugin, &plugin->input, &plugin->output, instance, i… in snd_pcm_ladspa_allocate_instances()
651 …SNDERR("Unable to connect duplicate port of plugin '%s' channel %u depth %u", plugin->desc->Name, … in snd_pcm_ladspa_allocate_instances()
655 err = snd_pcm_ladspa_connect_plugin(plugin, instance); in snd_pcm_ladspa_allocate_instances()
657 SNDERR("Unable to connect plugin '%s' depth %u", plugin->desc->Name, depth); in snd_pcm_ladspa_allocate_instances()
661 err = snd_pcm_ladspa_connect_controls(plugin, &plugin->input, instance); in snd_pcm_ladspa_allocate_instances()
663 err = snd_pcm_ladspa_connect_controls(plugin, &plugin->output, instance); in snd_pcm_ladspa_allocate_instances()
665 if (plugin->desc->activate) in snd_pcm_ladspa_allocate_instances()
666 plugin->desc->activate(instance->handle); in snd_pcm_ladspa_allocate_instances()
668 err = snd_pcm_ladspa_check_connect(plugin, &plugin->input, &instance->input, depth); in snd_pcm_ladspa_allocate_instances()
671 err = snd_pcm_ladspa_check_connect(plugin, &plugin->output, &instance->output, depth); in snd_pcm_ladspa_allocate_instances()
710 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_allocate_memory() local
711 list_for_each(pos1, &plugin->instances) { in snd_pcm_ladspa_allocate_memory()
769 /* if LADSPA plugin has no broken inplace */ in snd_pcm_ladspa_allocate_memory()
784 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_allocate_memory() local
785 list_for_each(pos1, &plugin->instances) { in snd_pcm_ladspa_allocate_memory()
809 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_allocate_memory()
810 list_for_each(pos1, &plugin->instances) { in snd_pcm_ladspa_allocate_memory()
878 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_write_areas() local
879 list_for_each(pos1, &plugin->instances) { in snd_pcm_ladspa_write_areas()
939 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_read_areas() local
940 list_for_each(pos1, &plugin->instances) { in snd_pcm_ladspa_read_areas()
972 static void snd_pcm_ladspa_dump_direction(snd_pcm_ladspa_plugin_t *plugin, in snd_pcm_ladspa_dump_direction() argument
991 for (idx = midx = 0; idx < plugin->desc->PortCount; idx++) { in snd_pcm_ladspa_dump_direction()
992 …if ((plugin->desc->PortDescriptors[idx] & (io->pdesc | LADSPA_PORT_CONTROL)) == (io->pdesc | LADSP… in snd_pcm_ladspa_dump_direction()
993 …snd_output_printf(out, " %i \"%s\" = %.8f\n", idx, plugin->desc->PortNames[idx], io->controls… in snd_pcm_ladspa_dump_direction()
1001 snd_pcm_ladspa_plugin_t *plugin) in snd_pcm_ladspa_dump_array() argument
1016 if (plugin && val != NO_ASSIGN) in snd_pcm_ladspa_dump_array()
1017 snd_output_printf(out, " \"%s\"", plugin->desc->PortNames[val]); in snd_pcm_ladspa_dump_array()
1026 snd_pcm_ladspa_plugin_t *plugin = list_entry(pos, snd_pcm_ladspa_plugin_t, list); in snd_pcm_ladspa_plugins_dump() local
1027 …snd_output_printf(out, " Policy: %s\n", plugin->policy == SND_PCM_LADSPA_POLICY_NONE ? "none" :… in snd_pcm_ladspa_plugins_dump()
1028 snd_output_printf(out, " Filename: %s\n", plugin->filename); in snd_pcm_ladspa_plugins_dump()
1029 snd_output_printf(out, " Plugin Name: %s\n", plugin->desc->Name); in snd_pcm_ladspa_plugins_dump()
1030 snd_output_printf(out, " Plugin Label: %s\n", plugin->desc->Label); in snd_pcm_ladspa_plugins_dump()
1031 snd_output_printf(out, " Plugin Unique ID: %lu\n", plugin->desc->UniqueID); in snd_pcm_ladspa_plugins_dump()
1033 list_for_each(pos2, &plugin->instances) { in snd_pcm_ladspa_plugins_dump()
1039 snd_pcm_ladspa_dump_array(out, &in->input.ports, plugin); in snd_pcm_ladspa_plugins_dump()
1043 snd_pcm_ladspa_dump_array(out, &in->output.ports, plugin); in snd_pcm_ladspa_plugins_dump()
1046 snd_pcm_ladspa_dump_direction(plugin, &plugin->input, out); in snd_pcm_ladspa_plugins_dump()
1047 snd_pcm_ladspa_dump_direction(plugin, &plugin->output, out); in snd_pcm_ladspa_plugins_dump()
1086 static int snd_pcm_ladspa_check_file(snd_pcm_ladspa_plugin_t * const plugin, in snd_pcm_ladspa_check_file() argument
1129 plugin->filename = strdup(filename); in snd_pcm_ladspa_check_file()
1130 if (plugin->filename == NULL) { in snd_pcm_ladspa_check_file()
1134 plugin->dl_handle = handle; in snd_pcm_ladspa_check_file()
1135 plugin->desc = d; in snd_pcm_ladspa_check_file()
1144 static int snd_pcm_ladspa_check_dir(snd_pcm_ladspa_plugin_t * const plugin, in snd_pcm_ladspa_check_dir() argument
1179 err = snd_pcm_ladspa_check_file(plugin, filename, label, ladspa_id); in snd_pcm_ladspa_check_dir()
1194 static int snd_pcm_ladspa_look_for_plugin(snd_pcm_ladspa_plugin_t * const plugin, in snd_pcm_ladspa_look_for_plugin() argument
1211 err = snd_pcm_ladspa_check_dir(plugin, fullpath, label, ladspa_id); in snd_pcm_ladspa_look_for_plugin()
1428 snd_config_t *plugin, in snd_pcm_ladspa_add_plugin() argument
1439 snd_config_for_each(i, next, plugin) { in snd_pcm_ladspa_add_plugin()
1489 SNDERR("no plugin label or id"); in snd_pcm_ladspa_add_plugin()
1502 SNDERR("Unable to load plugin '%s' ID %li, filename '%s'", label, ladspa_id, filename); in snd_pcm_ladspa_add_plugin()
1509 SNDERR("Unable to find or load plugin '%s' ID %li, path '%s'", label, ladspa_id, path); in snd_pcm_ladspa_add_plugin()
1565 SNDERR("empty plugin list is not accepted"); in snd_pcm_ladspa_build_plugins()
1572 * \brief Creates a new LADSPA<->ALSA Plugin
1576 * \param channels Force input channel count to LADSPA plugin chain, 0 = no force (auto)
1654 \section pcm_plugins_ladpsa Plugin: LADSPA <-> ALSA
1656 This plugin allows to apply a set of LADPSA plugins.
1662 If the LADSPA plugin has multiple audio inputs or outputs the policy duplicate
1665 The plugin serialization works as expected. You can eventually use more
1666 channels (inputs / outputs) inside the LADPSA plugin chain than processed
1667 in the ALSA plugin chain. If ALSA channel does not exist for given LADSPA
1669 side (ALSA next plugin input), the valid channels are checked, too.
1685 [channels INT] # count input channels (input to LADSPA plugin chain)
1690 N { # Configuration for LADPSA plugin N
1691 [id INT] # LADSPA plugin ID (for example 1043)
1692 [label STR] # LADSPA plugin label (for example 'delay_5s')
1693 [filename STR] # Full filename of .so library with LADSPA plugin code