mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
ladspa: use the registry cache for plugin details
Split the introspection and registration part. This way we only need to open all plugins when updating the registry. When reading the registry we can register the elements entierly from the cache.
This commit is contained in:
parent
407f3e1856
commit
f65bdac49b
10 changed files with 211 additions and 179 deletions
|
@ -130,7 +130,6 @@
|
||||||
#include "gstladspasink.h"
|
#include "gstladspasink.h"
|
||||||
#include <gst/gst-i18n-plugin.h>
|
#include <gst/gst-i18n-plugin.h>
|
||||||
|
|
||||||
#include <gmodule.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ladspa.h>
|
#include <ladspa.h>
|
||||||
#ifdef HAVE_LRDF
|
#ifdef HAVE_LRDF
|
||||||
|
@ -153,29 +152,107 @@ GST_DEBUG_CATEGORY (ladspa_debug);
|
||||||
"/usr/local/lib/ladspa" G_SEARCHPATH_SEPARATOR_S \
|
"/usr/local/lib/ladspa" G_SEARCHPATH_SEPARATOR_S \
|
||||||
LIBDIR "/ladspa"
|
LIBDIR "/ladspa"
|
||||||
|
|
||||||
GQuark descriptor_quark = 0;
|
GstStructure *ladspa_meta_all = NULL;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ladspa_describe_plugin (GstPlugin * plugin,
|
ladspa_plugin_register_element (GstPlugin * plugin, GstStructure * ladspa_meta)
|
||||||
const gchar * filename, LADSPA_Descriptor_Function descriptor_function)
|
{
|
||||||
|
guint audio_in, audio_out;
|
||||||
|
|
||||||
|
gst_structure_get_uint (ladspa_meta, "audio-in", &audio_in);
|
||||||
|
gst_structure_get_uint (ladspa_meta, "audio-out", &audio_out);
|
||||||
|
|
||||||
|
if (audio_in == 0) {
|
||||||
|
ladspa_register_source_element (plugin, ladspa_meta);
|
||||||
|
} else if (audio_out == 0) {
|
||||||
|
ladspa_register_sink_element (plugin, ladspa_meta);
|
||||||
|
} else {
|
||||||
|
ladspa_register_filter_element (plugin, ladspa_meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ladspa_count_ports (const LADSPA_Descriptor * descriptor,
|
||||||
|
guint * audio_in, guint * audio_out, guint * control_in,
|
||||||
|
guint * control_out)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
|
||||||
|
*audio_in = *audio_out = *control_in = *control_out = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < descriptor->PortCount; i++) {
|
||||||
|
LADSPA_PortDescriptor p = descriptor->PortDescriptors[i];
|
||||||
|
|
||||||
|
if (LADSPA_IS_PORT_AUDIO (p)) {
|
||||||
|
if (LADSPA_IS_PORT_INPUT (p))
|
||||||
|
(*audio_in)++;
|
||||||
|
else
|
||||||
|
(*audio_out)++;
|
||||||
|
} else if (LADSPA_IS_PORT_CONTROL (p)) {
|
||||||
|
if (LADSPA_IS_PORT_INPUT (p))
|
||||||
|
(*control_in)++;
|
||||||
|
else
|
||||||
|
(*control_out)++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ladspa_describe_plugin (const gchar * file_name, const gchar * entry_name,
|
||||||
|
LADSPA_Descriptor_Function descriptor_function)
|
||||||
{
|
{
|
||||||
const LADSPA_Descriptor *desc;
|
const LADSPA_Descriptor *desc;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
/* walk through all the plugins in this plugin library */
|
/* walk through all the plugins in this plugin library */
|
||||||
for (i = 0; (desc = descriptor_function (i)); i++) {
|
for (i = 0; (desc = descriptor_function (i)); i++) {
|
||||||
|
GstStructure *ladspa_meta = NULL;
|
||||||
|
GValue value = { 0, };
|
||||||
|
gchar *tmp;
|
||||||
|
gchar *type_name;
|
||||||
guint audio_in, audio_out, control_in, control_out;
|
guint audio_in, audio_out, control_in, control_out;
|
||||||
|
|
||||||
/* count ports of this plugin */
|
/* count ports of this plugin */
|
||||||
ladspa_count_ports (desc, &audio_in, &audio_out, &control_in, &control_out);
|
ladspa_count_ports (desc, &audio_in, &audio_out, &control_in, &control_out);
|
||||||
|
|
||||||
/* categorize and register it */
|
/* categorize */
|
||||||
if (audio_in == 0)
|
if (audio_in == 0 && audio_out == 0) {
|
||||||
ladspa_describe_source_plugin (plugin, filename, desc);
|
GST_WARNING ("Skipping control only element (%s:%lu/%s)",
|
||||||
else if (audio_out == 0)
|
entry_name, desc->UniqueID, desc->Label);
|
||||||
ladspa_describe_sink_plugin (plugin, filename, desc);
|
continue;
|
||||||
else
|
} else if (audio_in == 0) {
|
||||||
ladspa_describe_filter_plugin (plugin, filename, desc);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +312,7 @@ ladspa_plugin_directory_search (GstPlugin * ladspa_plugin, const char *dir_name)
|
||||||
(gpointer *) & descriptor_function)) {
|
(gpointer *) & descriptor_function)) {
|
||||||
/* we've found a ladspa_descriptor function, now introspect it. */
|
/* we've found a ladspa_descriptor function, now introspect it. */
|
||||||
GST_INFO ("describe %s", file_name);
|
GST_INFO ("describe %s", file_name);
|
||||||
ladspa_describe_plugin (ladspa_plugin, entry_name, descriptor_function);
|
ladspa_describe_plugin (file_name, entry_name, descriptor_function);
|
||||||
ok = TRUE;
|
ok = TRUE;
|
||||||
} else {
|
} else {
|
||||||
/* it was a library, but not a LADSPA one. Unload it. */
|
/* it was a library, but not a LADSPA one. Unload it. */
|
||||||
|
@ -322,6 +399,9 @@ ladspa_plugin_path_search (GstPlugin * plugin)
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_init (GstPlugin * plugin)
|
plugin_init (GstPlugin * plugin)
|
||||||
{
|
{
|
||||||
|
gboolean res = FALSE;
|
||||||
|
gint n = 0;
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
|
GST_DEBUG ("binding text domain %s to locale dir %s", GETTEXT_PACKAGE,
|
||||||
LOCALEDIR);
|
LOCALEDIR);
|
||||||
|
@ -331,8 +411,6 @@ plugin_init (GstPlugin * plugin)
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_INIT (ladspa_debug, "ladspa", 0, "LADSPA plugins");
|
GST_DEBUG_CATEGORY_INIT (ladspa_debug, "ladspa", 0, "LADSPA plugins");
|
||||||
|
|
||||||
descriptor_quark = g_quark_from_static_string ("ladspa-descriptor");
|
|
||||||
|
|
||||||
gst_plugin_add_dependency_simple (plugin,
|
gst_plugin_add_dependency_simple (plugin,
|
||||||
"LADSPA_PATH",
|
"LADSPA_PATH",
|
||||||
GST_LADSPA_DEFAULT_PATH, NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
|
GST_LADSPA_DEFAULT_PATH, NULL, GST_PLUGIN_DEPENDENCY_FLAG_NONE);
|
||||||
|
@ -341,8 +419,44 @@ plugin_init (GstPlugin * plugin)
|
||||||
lrdf_init ();
|
lrdf_init ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!ladspa_plugin_path_search (plugin))
|
ladspa_meta_all = (GstStructure *) gst_plugin_get_cache_data (plugin);
|
||||||
|
if (ladspa_meta_all) {
|
||||||
|
n = gst_structure_n_fields (ladspa_meta_all);
|
||||||
|
}
|
||||||
|
GST_INFO ("%d entries in cache", n);
|
||||||
|
if (!n) {
|
||||||
|
ladspa_meta_all = gst_structure_new_empty ("ladspa");
|
||||||
|
res = ladspa_plugin_path_search (plugin);
|
||||||
|
if (res) {
|
||||||
|
n = gst_structure_n_fields (ladspa_meta_all);
|
||||||
|
GST_INFO ("%d entries after scanning", n);
|
||||||
|
gst_plugin_set_cache_data (plugin, ladspa_meta_all);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n) {
|
||||||
|
gint i;
|
||||||
|
const gchar *name;
|
||||||
|
const GValue *value;
|
||||||
|
|
||||||
|
GST_INFO ("register types");
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
name = gst_structure_nth_field_name (ladspa_meta_all, i);
|
||||||
|
value = gst_structure_get_value (ladspa_meta_all, name);
|
||||||
|
if (G_VALUE_TYPE (value) == GST_TYPE_STRUCTURE) {
|
||||||
|
GstStructure *ladspa_meta = g_value_get_boxed (value);
|
||||||
|
|
||||||
|
ladspa_plugin_register_element (plugin, ladspa_meta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res) {
|
||||||
GST_WARNING ("no LADSPA plugins found, check LADSPA_PATH");
|
GST_WARNING ("no LADSPA plugins found, check LADSPA_PATH");
|
||||||
|
}
|
||||||
|
|
||||||
/* we don't want to fail, even if there are no elements registered */
|
/* we don't want to fail, even if there are no elements registered */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
|
* Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
* Copyright (C) 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
* Copyright (C) 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
||||||
|
* 2013 Stefan Sauer <ensonic@users.sf.net>
|
||||||
*
|
*
|
||||||
* gstladspa.h: Header for LADSPA plugin
|
* gstladspa.h: Header for LADSPA plugin
|
||||||
*
|
*
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
extern GQuark descriptor_quark;
|
extern GstStructure *ladspa_meta_all;
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -236,8 +236,8 @@ gst_ladspa_filter_type_init (GstLADSPAFilter * ladspa, LADSPA_Descriptor * desc)
|
||||||
gst_base_transform_set_in_place (base,
|
gst_base_transform_set_in_place (base,
|
||||||
ladspa_class->ladspa.count.audio.in ==
|
ladspa_class->ladspa.count.audio.in ==
|
||||||
ladspa_class->ladspa.count.audio.out
|
ladspa_class->ladspa.count.audio.out
|
||||||
&& !LADSPA_IS_INPLACE_BROKEN (ladspa_class->ladspa.
|
&& !LADSPA_IS_INPLACE_BROKEN (ladspa_class->ladspa.descriptor->
|
||||||
descriptor->Properties));
|
Properties));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,16 +270,11 @@ gst_ladspa_filter_type_finalize (GObject * object)
|
||||||
static void
|
static void
|
||||||
gst_ladspa_filter_type_base_init (GstLADSPAFilterClass * ladspa_class)
|
gst_ladspa_filter_type_base_init (GstLADSPAFilterClass * ladspa_class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (ladspa_class);
|
|
||||||
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
||||||
GstAudioFilterClass *audio_class = GST_AUDIO_FILTER_CLASS (ladspa_class);
|
GstAudioFilterClass *audio_class = GST_AUDIO_FILTER_CLASS (ladspa_class);
|
||||||
LADSPA_Descriptor *desc;
|
|
||||||
|
|
||||||
desc =
|
gst_ladspa_class_init (&ladspa_class->ladspa,
|
||||||
g_type_get_qdata (G_OBJECT_CLASS_TYPE (object_class), descriptor_quark);
|
G_TYPE_FROM_CLASS (ladspa_class));
|
||||||
g_assert (desc);
|
|
||||||
|
|
||||||
gst_ladspa_class_init (&ladspa_class->ladspa, desc);
|
|
||||||
|
|
||||||
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
||||||
GST_LADSPA_FILTER_CLASS_TAGS);
|
GST_LADSPA_FILTER_CLASS_TAGS);
|
||||||
|
@ -345,8 +340,7 @@ gst_ladspa_filter_class_init (GstLADSPAFilterClass * ladspa_class)
|
||||||
* Construct the type.
|
* Construct the type.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ladspa_describe_filter_plugin (GstPlugin * plugin,
|
ladspa_register_filter_element (GstPlugin * plugin, GstStructure * ladspa_meta)
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc)
|
|
||||||
{
|
{
|
||||||
GTypeInfo info = {
|
GTypeInfo info = {
|
||||||
sizeof (GstLADSPAFilterClass),
|
sizeof (GstLADSPAFilterClass),
|
||||||
|
@ -354,16 +348,11 @@ ladspa_describe_filter_plugin (GstPlugin * plugin,
|
||||||
(GBaseFinalizeFunc) gst_ladspa_filter_type_base_finalize,
|
(GBaseFinalizeFunc) gst_ladspa_filter_type_base_finalize,
|
||||||
(GClassInitFunc) gst_ladspa_filter_type_class_init,
|
(GClassInitFunc) gst_ladspa_filter_type_class_init,
|
||||||
NULL,
|
NULL,
|
||||||
desc,
|
NULL,
|
||||||
sizeof (GstLADSPAFilter),
|
sizeof (GstLADSPAFilter),
|
||||||
0,
|
0,
|
||||||
(GInstanceInitFunc) gst_ladspa_filter_type_init,
|
(GInstanceInitFunc) gst_ladspa_filter_type_init,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
gchar *tmp;
|
ladspa_register_element (plugin, GST_TYPE_LADSPA_FILTER, &info, ladspa_meta);
|
||||||
|
|
||||||
tmp = g_strdup_printf ("ladspa-%s-%s", filename, desc->Label);
|
|
||||||
ladspa_register_plugin (plugin, GST_TYPE_LADSPA_FILTER, tmp, &info,
|
|
||||||
descriptor_quark, filename, desc);
|
|
||||||
g_free (tmp);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,8 +60,7 @@ GType
|
||||||
gst_ladspa_filter_get_type (void);
|
gst_ladspa_filter_get_type (void);
|
||||||
|
|
||||||
void
|
void
|
||||||
ladspa_describe_filter_plugin (GstPlugin * plugin,
|
ladspa_register_filter_element (GstPlugin * plugin, GstStructure *ladspa_meta);
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_my_audio_filter_class_add_pad_templates (GstAudioFilterClass * audio_class,
|
gst_my_audio_filter_class_add_pad_templates (GstAudioFilterClass * audio_class,
|
||||||
|
|
|
@ -270,16 +270,11 @@ gst_ladspa_sink_type_finalize (GObject * object)
|
||||||
static void
|
static void
|
||||||
gst_ladspa_sink_type_base_init (GstLADSPASinkClass * ladspa_class)
|
gst_ladspa_sink_type_base_init (GstLADSPASinkClass * ladspa_class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (ladspa_class);
|
|
||||||
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
||||||
GstBaseSinkClass *base_class = GST_BASE_SINK_CLASS (ladspa_class);
|
GstBaseSinkClass *base_class = GST_BASE_SINK_CLASS (ladspa_class);
|
||||||
LADSPA_Descriptor *desc;
|
|
||||||
|
|
||||||
desc =
|
gst_ladspa_class_init (&ladspa_class->ladspa,
|
||||||
g_type_get_qdata (G_OBJECT_CLASS_TYPE (object_class), descriptor_quark);
|
G_TYPE_FROM_CLASS (ladspa_class));
|
||||||
g_assert (desc);
|
|
||||||
|
|
||||||
gst_ladspa_class_init (&ladspa_class->ladspa, desc);
|
|
||||||
|
|
||||||
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
||||||
GST_LADSPA_SINK_CLASS_TAGS);
|
GST_LADSPA_SINK_CLASS_TAGS);
|
||||||
|
@ -362,8 +357,7 @@ gst_ladspa_sink_class_init (GstLADSPASinkClass * ladspa_class)
|
||||||
* Construct the type.
|
* Construct the type.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ladspa_describe_sink_plugin (GstPlugin * plugin,
|
ladspa_register_sink_element (GstPlugin * plugin, GstStructure * ladspa_meta)
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc)
|
|
||||||
{
|
{
|
||||||
GTypeInfo info = {
|
GTypeInfo info = {
|
||||||
sizeof (GstLADSPASinkClass),
|
sizeof (GstLADSPASinkClass),
|
||||||
|
@ -371,16 +365,11 @@ ladspa_describe_sink_plugin (GstPlugin * plugin,
|
||||||
(GBaseFinalizeFunc) gst_ladspa_sink_type_base_finalize,
|
(GBaseFinalizeFunc) gst_ladspa_sink_type_base_finalize,
|
||||||
(GClassInitFunc) gst_ladspa_sink_type_class_init,
|
(GClassInitFunc) gst_ladspa_sink_type_class_init,
|
||||||
NULL,
|
NULL,
|
||||||
desc,
|
NULL,
|
||||||
sizeof (GstLADSPASink),
|
sizeof (GstLADSPASink),
|
||||||
0,
|
0,
|
||||||
(GInstanceInitFunc) gst_ladspa_sink_type_init,
|
(GInstanceInitFunc) gst_ladspa_sink_type_init,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
gchar *tmp;
|
ladspa_register_element (plugin, GST_TYPE_LADSPA_SINK, &info, ladspa_meta);
|
||||||
|
|
||||||
tmp = g_strdup_printf ("ladspasink-%s-%s", filename, desc->Label);
|
|
||||||
ladspa_register_plugin (plugin, GST_TYPE_LADSPA_SINK, tmp, &info,
|
|
||||||
descriptor_quark, filename, desc);
|
|
||||||
g_free (tmp);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,8 +66,7 @@ GType
|
||||||
gst_ladspa_sink_get_type (void);
|
gst_ladspa_sink_get_type (void);
|
||||||
|
|
||||||
void
|
void
|
||||||
ladspa_describe_sink_plugin (GstPlugin * plugin,
|
ladspa_register_sink_element (GstPlugin * plugin, GstStructure *ladspa_meta);
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_my_base_sink_class_add_pad_template (GstBaseSinkClass * base_class,
|
gst_my_base_sink_class_add_pad_template (GstBaseSinkClass * base_class,
|
||||||
|
|
|
@ -451,8 +451,7 @@ gst_ladspa_source_type_get_property (GObject * object, guint prop_id,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_ladspa_source_type_init (GstLADSPASource * ladspa,
|
gst_ladspa_source_type_init (GstLADSPASource * ladspa, LADSPA_Descriptor * desc)
|
||||||
LADSPA_Descriptor * desc)
|
|
||||||
{
|
{
|
||||||
GstLADSPASourceClass *ladspa_class = GST_LADSPA_SOURCE_GET_CLASS (ladspa);
|
GstLADSPASourceClass *ladspa_class = GST_LADSPA_SOURCE_GET_CLASS (ladspa);
|
||||||
|
|
||||||
|
@ -500,16 +499,11 @@ gst_ladspa_source_type_finalize (GObject * object)
|
||||||
static void
|
static void
|
||||||
gst_ladspa_source_type_base_init (GstLADSPASourceClass * ladspa_class)
|
gst_ladspa_source_type_base_init (GstLADSPASourceClass * ladspa_class)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (ladspa_class);
|
|
||||||
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
GstElementClass *elem_class = GST_ELEMENT_CLASS (ladspa_class);
|
||||||
GstBaseSrcClass *base_class = GST_BASE_SRC_CLASS (ladspa_class);
|
GstBaseSrcClass *base_class = GST_BASE_SRC_CLASS (ladspa_class);
|
||||||
LADSPA_Descriptor *desc;
|
|
||||||
|
|
||||||
desc =
|
gst_ladspa_class_init (&ladspa_class->ladspa,
|
||||||
g_type_get_qdata (G_OBJECT_CLASS_TYPE (object_class), descriptor_quark);
|
G_TYPE_FROM_CLASS (ladspa_class));
|
||||||
g_assert (desc);
|
|
||||||
|
|
||||||
gst_ladspa_class_init (&ladspa_class->ladspa, desc);
|
|
||||||
|
|
||||||
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
gst_ladspa_element_class_set_metadata (&ladspa_class->ladspa, elem_class,
|
||||||
GST_LADSPA_SOURCE_CLASS_TAGS);
|
GST_LADSPA_SOURCE_CLASS_TAGS);
|
||||||
|
@ -531,27 +525,22 @@ gst_ladspa_source_type_class_init (GstLADSPASourceClass * ladspa_class,
|
||||||
GObjectClass *object_class = (GObjectClass *) ladspa_class;
|
GObjectClass *object_class = (GObjectClass *) ladspa_class;
|
||||||
GstBaseSrcClass *base_class = (GstBaseSrcClass *) ladspa_class;
|
GstBaseSrcClass *base_class = (GstBaseSrcClass *) ladspa_class;
|
||||||
|
|
||||||
gst_ladspa_source_type_parent_class =
|
gst_ladspa_source_type_parent_class = g_type_class_peek_parent (ladspa_class);
|
||||||
g_type_class_peek_parent (ladspa_class);
|
|
||||||
|
|
||||||
object_class->dispose =
|
object_class->dispose = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_dispose);
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_dispose);
|
object_class->finalize = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_finalize);
|
||||||
object_class->finalize =
|
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_finalize);
|
|
||||||
object_class->set_property =
|
object_class->set_property =
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_set_property);
|
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_set_property);
|
||||||
object_class->get_property =
|
object_class->get_property =
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_get_property);
|
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_get_property);
|
||||||
|
|
||||||
base_class->set_caps =
|
base_class->set_caps = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_set_caps);
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_set_caps);
|
|
||||||
base_class->fixate = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_fixate);
|
base_class->fixate = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_fixate);
|
||||||
base_class->is_seekable =
|
base_class->is_seekable =
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_is_seekable);
|
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_is_seekable);
|
||||||
base_class->do_seek = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_do_seek);
|
base_class->do_seek = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_do_seek);
|
||||||
base_class->query = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_query);
|
base_class->query = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_query);
|
||||||
base_class->get_times =
|
base_class->get_times = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_get_times);
|
||||||
GST_DEBUG_FUNCPTR (gst_ladspa_source_type_get_times);
|
|
||||||
base_class->start = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_start);
|
base_class->start = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_start);
|
||||||
base_class->stop = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_stop);
|
base_class->stop = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_stop);
|
||||||
base_class->fill = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_fill);
|
base_class->fill = GST_DEBUG_FUNCPTR (gst_ladspa_source_type_fill);
|
||||||
|
@ -609,8 +598,7 @@ gst_ladspa_source_class_init (GstLADSPASourceClass * ladspa_class)
|
||||||
* Construct the type.
|
* Construct the type.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ladspa_describe_source_plugin (GstPlugin * plugin,
|
ladspa_register_source_element (GstPlugin * plugin, GstStructure * ladspa_meta)
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc)
|
|
||||||
{
|
{
|
||||||
GTypeInfo info = {
|
GTypeInfo info = {
|
||||||
sizeof (GstLADSPASourceClass),
|
sizeof (GstLADSPASourceClass),
|
||||||
|
@ -618,16 +606,11 @@ ladspa_describe_source_plugin (GstPlugin * plugin,
|
||||||
(GBaseFinalizeFunc) gst_ladspa_source_type_base_finalize,
|
(GBaseFinalizeFunc) gst_ladspa_source_type_base_finalize,
|
||||||
(GClassInitFunc) gst_ladspa_source_type_class_init,
|
(GClassInitFunc) gst_ladspa_source_type_class_init,
|
||||||
NULL,
|
NULL,
|
||||||
desc,
|
NULL,
|
||||||
sizeof (GstLADSPASource),
|
sizeof (GstLADSPASource),
|
||||||
0,
|
0,
|
||||||
(GInstanceInitFunc) gst_ladspa_source_type_init,
|
(GInstanceInitFunc) gst_ladspa_source_type_init,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
gchar *tmp;
|
ladspa_register_element (plugin, GST_TYPE_LADSPA_SOURCE, &info, ladspa_meta);
|
||||||
|
|
||||||
tmp = g_strdup_printf ("ladspasrc-%s-%s", filename, desc->Label);
|
|
||||||
ladspa_register_plugin (plugin, GST_TYPE_LADSPA_SOURCE, tmp, &info,
|
|
||||||
descriptor_quark, filename, desc);
|
|
||||||
g_free (tmp);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,8 +78,7 @@ GType
|
||||||
gst_ladspa_source_get_type (void);
|
gst_ladspa_source_get_type (void);
|
||||||
|
|
||||||
void
|
void
|
||||||
ladspa_describe_source_plugin (GstPlugin * plugin,
|
ladspa_register_source_element (GstPlugin * plugin, GstStructure *ladspa_meta);
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_my_base_source_class_add_pad_template (GstBaseSrcClass * base_class,
|
gst_my_base_source_class_add_pad_template (GstBaseSrcClass * base_class,
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
* Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
|
* Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
|
||||||
* 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
|
* 2001 Steve Baker <stevebaker_org@yahoo.co.uk>
|
||||||
* 2003 Andy Wingo <wingo at pobox.com>
|
* 2003 Andy Wingo <wingo at pobox.com>
|
||||||
* Copyright (C) 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
* 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
||||||
|
* 2013 Stefan Sauer <ensonic@users.sf.net>
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Library General Public
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
@ -49,6 +50,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "gstladspa.h"
|
||||||
#include "gstladspautils.h"
|
#include "gstladspautils.h"
|
||||||
#include "gstladspafilter.h"
|
#include "gstladspafilter.h"
|
||||||
#include "gstladspasource.h"
|
#include "gstladspasource.h"
|
||||||
|
@ -286,12 +288,10 @@ static gchar *
|
||||||
gst_ladspa_object_class_get_param_name (GstLADSPAClass * ladspa_class,
|
gst_ladspa_object_class_get_param_name (GstLADSPAClass * ladspa_class,
|
||||||
GObjectClass * object_class, unsigned long portnum)
|
GObjectClass * object_class, unsigned long portnum)
|
||||||
{
|
{
|
||||||
LADSPA_Descriptor *desc;
|
const LADSPA_Descriptor *desc = ladspa_class->descriptor;
|
||||||
gchar *name, **namev, **v, *tmp;
|
gchar *name, **namev, **v, *tmp;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
desc = ladspa_class->descriptor;
|
|
||||||
|
|
||||||
/* beauty in the mess */
|
/* beauty in the mess */
|
||||||
name = g_strdup ("");
|
name = g_strdup ("");
|
||||||
namev = g_strsplit_set (desc->PortNames[portnum], "[]()", 0);
|
namev = g_strsplit_set (desc->PortNames[portnum], "[]()", 0);
|
||||||
|
@ -342,14 +342,12 @@ static GParamSpec *
|
||||||
gst_ladspa_object_class_get_param_spec (GstLADSPAClass * ladspa_class,
|
gst_ladspa_object_class_get_param_spec (GstLADSPAClass * ladspa_class,
|
||||||
GObjectClass * object_class, unsigned long portnum)
|
GObjectClass * object_class, unsigned long portnum)
|
||||||
{
|
{
|
||||||
LADSPA_Descriptor *desc;
|
const LADSPA_Descriptor *desc = ladspa_class->descriptor;
|
||||||
GParamSpec *ret;
|
GParamSpec *ret;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gint hintdesc, perms;
|
gint hintdesc, perms;
|
||||||
gfloat lower, upper, def;
|
gfloat lower, upper, def;
|
||||||
|
|
||||||
desc = ladspa_class->descriptor;
|
|
||||||
|
|
||||||
name =
|
name =
|
||||||
gst_ladspa_object_class_get_param_name (ladspa_class, object_class,
|
gst_ladspa_object_class_get_param_name (ladspa_class, object_class,
|
||||||
portnum);
|
portnum);
|
||||||
|
@ -544,7 +542,7 @@ void
|
||||||
gst_ladspa_element_class_set_metadata (GstLADSPAClass * ladspa_class,
|
gst_ladspa_element_class_set_metadata (GstLADSPAClass * ladspa_class,
|
||||||
GstElementClass * elem_class, const gchar * ladspa_class_tags)
|
GstElementClass * elem_class, const gchar * ladspa_class_tags)
|
||||||
{
|
{
|
||||||
LADSPA_Descriptor *desc = ladspa_class->descriptor;
|
const LADSPA_Descriptor *desc = ladspa_class->descriptor;
|
||||||
gchar *longname, *author, *extra_ladspa_class_tags = NULL, *tmp;
|
gchar *longname, *author, *extra_ladspa_class_tags = NULL, *tmp;
|
||||||
#ifdef HAVE_LRDF
|
#ifdef HAVE_LRDF
|
||||||
gchar *uri;
|
gchar *uri;
|
||||||
|
@ -564,7 +562,7 @@ gst_ladspa_element_class_set_metadata (GstLADSPAClass * ladspa_class,
|
||||||
"Andy Wingo <wingo at pobox.com>",
|
"Andy Wingo <wingo at pobox.com>",
|
||||||
"Steve Baker <stevebaker_org@yahoo.co.uk>",
|
"Steve Baker <stevebaker_org@yahoo.co.uk>",
|
||||||
"Erik Walthinsen <omega@cse.ogi.edu>",
|
"Erik Walthinsen <omega@cse.ogi.edu>",
|
||||||
"Stefan Kost <ensonic@users.sf.net>",
|
"Stefan Sauer <ensonic@users.sf.net>",
|
||||||
"Wim Taymans <wim@fluendo.com>", NULL);
|
"Wim Taymans <wim@fluendo.com>", NULL);
|
||||||
g_free (tmp);
|
g_free (tmp);
|
||||||
|
|
||||||
|
@ -760,30 +758,35 @@ gst_ladspa_finalize (GstLADSPA * ladspa)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_ladspa_class_init (GstLADSPAClass * ladspa_class,
|
gst_ladspa_class_init (GstLADSPAClass * ladspa_class, GType type)
|
||||||
LADSPA_Descriptor * descriptor)
|
|
||||||
{
|
{
|
||||||
guint mapper;
|
guint mapper, ix;
|
||||||
struct
|
guint audio_in = 0, audio_out = 0, control_in = 0, control_out = 0;
|
||||||
{
|
const GValue *value =
|
||||||
struct
|
gst_structure_get_value (ladspa_meta_all, g_type_name (type));
|
||||||
{
|
GstStructure *ladspa_meta = g_value_get_boxed (value);
|
||||||
guint in, out;
|
const gchar *file_name;
|
||||||
} control;
|
LADSPA_Descriptor_Function descriptor_function;
|
||||||
struct
|
|
||||||
{
|
|
||||||
guint in, out;
|
|
||||||
} audio;
|
|
||||||
} count;
|
|
||||||
|
|
||||||
GST_DEBUG ("LADSPA initializing class");
|
GST_DEBUG ("LADSPA initializing class");
|
||||||
|
|
||||||
ladspa_class->descriptor = descriptor;
|
file_name = gst_structure_get_string (ladspa_meta, "plugin-filename");
|
||||||
ladspa_class->properties = 1;
|
ladspa_class->plugin =
|
||||||
|
g_module_open (file_name, G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
|
||||||
|
g_module_symbol (ladspa_class->plugin, "ladspa_descriptor",
|
||||||
|
(gpointer *) & descriptor_function);
|
||||||
|
gst_structure_get_uint (ladspa_meta, "element-ix", &ix);
|
||||||
|
|
||||||
ladspa_count_ports (ladspa_class->descriptor, &ladspa_class->count.audio.in,
|
ladspa_class->descriptor = descriptor_function (ix);
|
||||||
&ladspa_class->count.audio.out, &ladspa_class->count.control.in,
|
gst_structure_get_uint (ladspa_meta, "audio-in",
|
||||||
|
&ladspa_class->count.audio.in);
|
||||||
|
gst_structure_get_uint (ladspa_meta, "audio-out",
|
||||||
|
&ladspa_class->count.audio.out);
|
||||||
|
gst_structure_get_uint (ladspa_meta, "control-in",
|
||||||
|
&ladspa_class->count.control.in);
|
||||||
|
gst_structure_get_uint (ladspa_meta, "control-out",
|
||||||
&ladspa_class->count.control.out);
|
&ladspa_class->count.control.out);
|
||||||
|
ladspa_class->properties = 1;
|
||||||
|
|
||||||
ladspa_class->map.audio.in =
|
ladspa_class->map.audio.in =
|
||||||
g_new0 (unsigned long, ladspa_class->count.audio.in);
|
g_new0 (unsigned long, ladspa_class->count.audio.in);
|
||||||
|
@ -795,29 +798,27 @@ gst_ladspa_class_init (GstLADSPAClass * ladspa_class,
|
||||||
ladspa_class->map.control.out =
|
ladspa_class->map.control.out =
|
||||||
g_new0 (unsigned long, ladspa_class->count.control.out);
|
g_new0 (unsigned long, ladspa_class->count.control.out);
|
||||||
|
|
||||||
count.audio.in = count.audio.out = count.control.in = count.control.out = 0;
|
|
||||||
|
|
||||||
for (mapper = 0; mapper < ladspa_class->descriptor->PortCount; mapper++) {
|
for (mapper = 0; mapper < ladspa_class->descriptor->PortCount; mapper++) {
|
||||||
LADSPA_PortDescriptor p = ladspa_class->descriptor->PortDescriptors[mapper];
|
LADSPA_PortDescriptor p = ladspa_class->descriptor->PortDescriptors[mapper];
|
||||||
|
|
||||||
if (LADSPA_IS_PORT_AUDIO (p)) {
|
if (LADSPA_IS_PORT_AUDIO (p)) {
|
||||||
if (LADSPA_IS_PORT_INPUT (p))
|
if (LADSPA_IS_PORT_INPUT (p))
|
||||||
ladspa_class->map.audio.in[count.audio.in++] = mapper;
|
ladspa_class->map.audio.in[audio_in++] = mapper;
|
||||||
else
|
else
|
||||||
ladspa_class->map.audio.out[count.audio.out++] = mapper;
|
ladspa_class->map.audio.out[audio_out++] = mapper;
|
||||||
} else if (LADSPA_IS_PORT_CONTROL (p)) {
|
} else if (LADSPA_IS_PORT_CONTROL (p)) {
|
||||||
if (LADSPA_IS_PORT_INPUT (p))
|
if (LADSPA_IS_PORT_INPUT (p))
|
||||||
ladspa_class->map.control.in[count.control.in++] = mapper;
|
ladspa_class->map.control.in[control_in++] = mapper;
|
||||||
else
|
else
|
||||||
ladspa_class->map.control.out[count.control.out++] = mapper;
|
ladspa_class->map.control.out[control_out++] = mapper;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_assert (count.control.out == ladspa_class->count.control.out);
|
g_assert (control_out == ladspa_class->count.control.out);
|
||||||
g_assert (count.control.in == ladspa_class->count.control.in);
|
g_assert (control_in == ladspa_class->count.control.in);
|
||||||
|
|
||||||
g_assert (count.audio.out == ladspa_class->count.audio.out);
|
g_assert (audio_out == ladspa_class->count.audio.out);
|
||||||
g_assert (count.audio.in == ladspa_class->count.audio.in);
|
g_assert (audio_in == ladspa_class->count.audio.in);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -834,61 +835,21 @@ gst_ladspa_class_finalize (GstLADSPAClass * ladspa_class)
|
||||||
ladspa_class->map.audio.out = NULL;
|
ladspa_class->map.audio.out = NULL;
|
||||||
g_free (ladspa_class->map.audio.in);
|
g_free (ladspa_class->map.audio.in);
|
||||||
ladspa_class->map.audio.in = NULL;
|
ladspa_class->map.audio.in = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
void
|
g_module_close (ladspa_class->plugin);
|
||||||
ladspa_count_ports (const LADSPA_Descriptor * descriptor,
|
ladspa_class->plugin = NULL;
|
||||||
guint * audio_in, guint * audio_out, guint * control_in,
|
|
||||||
guint * control_out)
|
|
||||||
{
|
|
||||||
guint i;
|
|
||||||
|
|
||||||
*audio_in = *audio_out = *control_in = *control_out = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < descriptor->PortCount; i++) {
|
|
||||||
LADSPA_PortDescriptor p = descriptor->PortDescriptors[i];
|
|
||||||
|
|
||||||
if (LADSPA_IS_PORT_AUDIO (p)) {
|
|
||||||
if (LADSPA_IS_PORT_INPUT (p))
|
|
||||||
(*audio_in)++;
|
|
||||||
else
|
|
||||||
(*audio_out)++;
|
|
||||||
} else if (LADSPA_IS_PORT_CONTROL (p)) {
|
|
||||||
if (LADSPA_IS_PORT_INPUT (p))
|
|
||||||
(*control_in)++;
|
|
||||||
else
|
|
||||||
(*control_out)++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register the type.
|
* Create the type & register the element.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
ladspa_register_plugin (GstPlugin * plugin, GType parent_type,
|
ladspa_register_element (GstPlugin * plugin, GType parent_type,
|
||||||
const gchar * tmp, const GTypeInfo * info, GQuark descriptor_quark,
|
const GTypeInfo * info, GstStructure * ladspa_meta)
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc)
|
|
||||||
{
|
{
|
||||||
gchar *name;
|
const gchar *type_name =
|
||||||
GType type;
|
gst_structure_get_string (ladspa_meta, "element-type-name");
|
||||||
|
|
||||||
name = g_ascii_strdown (tmp, -1);
|
gst_element_register (plugin, type_name, GST_RANK_NONE,
|
||||||
g_strcanon (name, G_CSET_A_2_Z G_CSET_a_2_z G_CSET_DIGITS "-+", '-');
|
g_type_register_static (parent_type, type_name, info, 0));
|
||||||
|
|
||||||
/* if it's not already registered, do it */
|
|
||||||
if (!g_type_from_name (name)) {
|
|
||||||
/* create the type now */
|
|
||||||
type = g_type_register_static (parent_type, name, info, 0);
|
|
||||||
|
|
||||||
/* base init is expected to initialize dynamic data */
|
|
||||||
g_type_set_qdata (type, descriptor_quark, (gpointer) desc);
|
|
||||||
|
|
||||||
/* register the element */
|
|
||||||
gst_element_register (plugin, name, GST_RANK_NONE, type);
|
|
||||||
} else
|
|
||||||
GST_WARNING ("Plugin identifier collision for %s (%s:%lu/%s)", name,
|
|
||||||
filename, desc->UniqueID, desc->Label);
|
|
||||||
|
|
||||||
g_free (name);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
* Copyright (C) 2013 Juan Manuel Borges Caño <juanmabcmail@gmail.com>
|
||||||
|
* 2013 Stefan Sauer <ensonic@users.sf.net>
|
||||||
*
|
*
|
||||||
* gstladspautils.h: Header for LADSPA plugin utils
|
* gstladspautils.h: Header for LADSPA plugin utils
|
||||||
*
|
*
|
||||||
|
@ -22,6 +23,7 @@
|
||||||
#ifndef __GST_LADSPA_UTILS_H__
|
#ifndef __GST_LADSPA_UTILS_H__
|
||||||
#define __GST_LADSPA_UTILS_H__
|
#define __GST_LADSPA_UTILS_H__
|
||||||
|
|
||||||
|
#include <gmodule.h>
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <gst/audio/gstaudiofilter.h>
|
#include <gst/audio/gstaudiofilter.h>
|
||||||
#include <gst/base/gstbasesrc.h>
|
#include <gst/base/gstbasesrc.h>
|
||||||
|
@ -63,7 +65,8 @@ struct _GstLADSPAClass
|
||||||
{
|
{
|
||||||
guint properties;
|
guint properties;
|
||||||
|
|
||||||
LADSPA_Descriptor *descriptor;
|
GModule *plugin;
|
||||||
|
const LADSPA_Descriptor *descriptor;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -141,19 +144,14 @@ void
|
||||||
gst_ladspa_finalize (GstLADSPA * ladspa);
|
gst_ladspa_finalize (GstLADSPA * ladspa);
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_ladspa_class_init (GstLADSPAClass * ladspa_class, LADSPA_Descriptor * desc);
|
gst_ladspa_class_init (GstLADSPAClass * ladspa_class, GType type);
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_ladspa_class_finalize (GstLADSPAClass * ladspa_class);
|
gst_ladspa_class_finalize (GstLADSPAClass * ladspa_class);
|
||||||
|
|
||||||
void
|
void
|
||||||
ladspa_count_ports (const LADSPA_Descriptor * desc, guint * audio_in,
|
ladspa_register_element (GstPlugin * plugin, GType parent_type,
|
||||||
guint * audio_out, guint * control_in, guint * control_out);
|
const GTypeInfo * info, GstStructure * ladspa_meta);
|
||||||
|
|
||||||
void
|
|
||||||
ladspa_register_plugin (GstPlugin * plugin, GType parent_type,
|
|
||||||
const gchar * tmp, const GTypeInfo * info, GQuark descriptor_quark,
|
|
||||||
const gchar * filename, const LADSPA_Descriptor * desc);
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue