- /* categorize and register it */
- if (audio_in == 0)
- ladspa_describe_source_plugin (plugin, filename, desc);
- else if (audio_out == 0)
- ladspa_describe_sink_plugin (plugin, filename, desc);
- else
- ladspa_describe_filter_plugin (plugin, filename, desc);
+ /* categorize */
+ if (audio_in == 0 && audio_out == 0) {
+ GST_WARNING ("Skipping control only element (%s:%lu/%s)",
+ entry_name, desc->UniqueID, desc->Label);
+ continue;
+ } else if (audio_in == 0) {
+ tmp = g_strdup_printf ("ladspasrc-%s-%s", entry_name, desc->Label);
+ } else if (audio_out == 0) {
+ tmp = g_strdup_printf ("ladspasink-%s-%s", entry_name, desc->Label);
+ } else {
+ tmp = g_strdup_printf ("ladspa-%s-%s", entry_name, desc->Label);
+ }
+ type_name = g_ascii_strdown (tmp, -1);
+ g_free (tmp);
+ g_strcanon (type_name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-');
+
+ /* check if the type is already registered */
+ if (g_type_from_name (type_name)) {
+ GST_WARNING ("Plugin identifier collision for %s (%s:%lu/%s)", type_name,
+ entry_name, desc->UniqueID, desc->Label);
+ g_free (type_name);
+ continue;
+ }
+
+ ladspa_meta = gst_structure_new_empty ("ladspa");
+ gst_structure_set (ladspa_meta,
+ "plugin-filename", G_TYPE_STRING, file_name,
+ "element-ix", G_TYPE_UINT, i,
+ "element-type-name", G_TYPE_STRING, type_name,
+ "audio-in", G_TYPE_UINT, audio_in,
+ "audio-out", G_TYPE_UINT, audio_out,
+ "control-in", G_TYPE_UINT, control_in,
+ "control-out", G_TYPE_UINT, control_out, NULL);
+
+ g_value_init (&value, GST_TYPE_STRUCTURE);
+ g_value_set_boxed (&value, ladspa_meta);
+ gst_structure_set_value (ladspa_meta_all, type_name, &value);
+ g_value_unset (&value);