Updated for the new plugin loading code

Original commit message from CVS:
Updated for the new plugin loading code
This commit is contained in:
Jan Schmidt 2003-11-02 14:09:39 +00:00
parent bd4206da03
commit 75658894ac
5 changed files with 80 additions and 54 deletions

View file

@ -39,15 +39,13 @@
#include <string.h> /* memmove */ #include <string.h> /* memmove */
/* elementfactory information */ /* elementfactory information */
GstElementDetails gst_bpwsinc_details = { static GstElementDetails gst_bpwsinc_details = GST_ELEMENT_DETAILS (
"BPWSinc", "BPWSinc",
"Filter/Audio/Effect", "Filter/Audio/Effect",
"LGPL",
"Band-Pass Windowed sinc filter", "Band-Pass Windowed sinc filter",
VERSION, "Thomas <thomas@apestaart.org>, "
"Thomas <thomas@apestaart.org>", "Steven W. Smith"
"(C) 2002 Steven W. Smith", );
};
enum { enum {
/* FILL ME */ /* FILL ME */
@ -95,6 +93,7 @@ struct _GstBPWSincClass
GstElementClass parent_class; GstElementClass parent_class;
}; };
static void gst_bpwsinc_base_init (gpointer g_class);
static void gst_bpwsinc_class_init (GstBPWSincClass * klass); static void gst_bpwsinc_class_init (GstBPWSincClass * klass);
static void gst_bpwsinc_init (GstBPWSinc * filter); static void gst_bpwsinc_init (GstBPWSinc * filter);
@ -117,7 +116,9 @@ GType gst_bpwsinc_get_type (void)
if (!bpwsinc_type) { if (!bpwsinc_type) {
static const GTypeInfo bpwsinc_info = { static const GTypeInfo bpwsinc_info = {
sizeof (GstBPWSincClass), NULL, NULL, sizeof (GstBPWSincClass),
gst_bpwsinc_base_init,
NULL,
(GClassInitFunc) gst_bpwsinc_class_init, NULL, NULL, (GClassInitFunc) gst_bpwsinc_class_init, NULL, NULL,
sizeof (GstBPWSinc), 0, sizeof (GstBPWSinc), 0,
(GInstanceInitFunc) gst_bpwsinc_init, (GInstanceInitFunc) gst_bpwsinc_init,
@ -129,6 +130,18 @@ GType gst_bpwsinc_get_type (void)
return bpwsinc_type; return bpwsinc_type;
} }
static void
gst_bpwsinc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
/* register src pads */
gst_element_class_add_pad_template (element_class, gst_filter_src_factory ());
gst_element_class_add_pad_template (element_class, gst_filter_sink_factory ());
gst_element_class_set_details (element_class, &gst_bpwsinc_details);
}
static void static void
gst_bpwsinc_class_init (GstBPWSincClass * klass) gst_bpwsinc_class_init (GstBPWSincClass * klass)
{ {

View file

@ -20,6 +20,9 @@
* Boston, MA 02111-1307, USA. * Boston, MA 02111-1307, USA.
*/ */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "gstfilter.h" #include "gstfilter.h"
#include <gst/audio/audio.h> #include <gst/audio/audio.h>
@ -27,14 +30,12 @@
struct _elements_entry { struct _elements_entry {
gchar *name; gchar *name;
GType (*type) (void); GType (*type) (void);
GstElementDetails *details;
gboolean (*factoryinit) (GstElementFactory *factory);
}; };
static struct _elements_entry _elements[] = { static struct _elements_entry _elements[] = {
{ "iir", gst_iir_get_type, &gst_iir_details, NULL }, { "iir", gst_iir_get_type },
{ "lpwsinc", gst_lpwsinc_get_type, &gst_lpwsinc_details, NULL }, { "lpwsinc", gst_lpwsinc_get_type },
{ "bpwsinc", gst_bpwsinc_get_type, &gst_bpwsinc_details, NULL }, { "bpwsinc", gst_bpwsinc_get_type },
{ NULL, 0 }, { NULL, 0 },
}; };
@ -77,37 +78,29 @@ gst_filter_sink_factory (void)
} }
static gboolean static gboolean
plugin_init (GModule * module, GstPlugin * plugin) plugin_init (GstPlugin * plugin)
{ {
GstElementFactory *factory;
gint i = 0; gint i = 0;
while (_elements[i].name) { while (_elements[i].name) {
factory = gst_element_factory_new (_elements[i].name, if (!gst_element_register (plugin, _elements[i].name, GST_RANK_NONE, _elements[i].type()))
(_elements[i].type) (), return FALSE;
_elements[i].details);
if (!factory) {
g_warning ("gst_filter_new failed for `%s'",
_elements[i].name);
continue;
}
gst_element_factory_add_pad_template (factory, gst_filter_src_factory ());
gst_element_factory_add_pad_template (factory, gst_filter_sink_factory ());
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory));
if (_elements[i].factoryinit) {
_elements[i].factoryinit (factory);
}
i++; i++;
} }
return TRUE; return TRUE;
} }
GstPluginDesc plugin_desc = { GST_PLUGIN_DEFINE (
GST_VERSION_MAJOR, GST_VERSION_MAJOR,
GST_VERSION_MINOR, GST_VERSION_MINOR,
"filter", "filter",
plugin_init "IIR, lpwsinc and bpwsinc audio filter elements",
}; plugin_init,
VERSION,
"LGPL",
GST_COPYRIGHT,
GST_PACKAGE,
GST_ORIGIN
);

View file

@ -26,15 +26,10 @@
#include <gst/gst.h> #include <gst/gst.h>
GType gst_iir_get_type (void); GType gst_iir_get_type (void);
extern GstElementDetails gst_iir_details; GType gst_lpwsinc_get_type (void);
GType gst_bpwsinc_get_type (void);
extern GstPadTemplate *gst_filter_sink_factory (); extern GstPadTemplate *gst_filter_sink_factory ();
extern GstPadTemplate *gst_filter_src_factory (); extern GstPadTemplate *gst_filter_src_factory ();
GType gst_lpwsinc_get_type (void);
extern GstElementDetails gst_lpwsinc_details;
GType gst_bpwsinc_get_type (void);
extern GstElementDetails gst_bpwsinc_details;
#endif /* __GST_FILTER_H__ */ #endif /* __GST_FILTER_H__ */

View file

@ -25,16 +25,13 @@
#include "gstfilter.h" #include "gstfilter.h"
#include "iir.h" #include "iir.h"
GstElementDetails gst_iir_details = { static GstElementDetails gst_iir_details = GST_ELEMENT_DETAILS (
"IIR", "IIR",
"Filter/Audio/Effect", "Filter/Audio/Effect",
"LGPL",
"IIR filter based on vorbis code", "IIR filter based on vorbis code",
VERSION, "Monty <monty@xiph.org>, "
"Monty <monty@xiph.org>, "\ "Thomas <thomas@apestaart.org>"
"Thomas <thomas@apestaart.org>", );
"(C) 2001",
};
enum { enum {
/* FILL ME */ /* FILL ME */
@ -80,6 +77,7 @@ struct _GstIIRClass
GstElementClass parent_class; GstElementClass parent_class;
}; };
static void gst_iir_base_init (gpointer g_class);
static void gst_iir_class_init (GstIIRClass * klass); static void gst_iir_class_init (GstIIRClass * klass);
static void gst_iir_init (GstIIR * filter); static void gst_iir_init (GstIIR * filter);
@ -102,7 +100,9 @@ GType gst_iir_get_type (void)
if (!iir_type) { if (!iir_type) {
static const GTypeInfo iir_info = { static const GTypeInfo iir_info = {
sizeof (GstIIRClass), NULL, NULL, sizeof (GstIIRClass),
gst_iir_base_init,
NULL,
(GClassInitFunc) gst_iir_class_init, NULL, NULL, (GClassInitFunc) gst_iir_class_init, NULL, NULL,
sizeof (GstIIR), 0, sizeof (GstIIR), 0,
(GInstanceInitFunc) gst_iir_init, (GInstanceInitFunc) gst_iir_init,
@ -114,6 +114,18 @@ GType gst_iir_get_type (void)
return iir_type; return iir_type;
} }
static void
gst_iir_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
/* register src pads */
gst_element_class_add_pad_template (element_class, gst_filter_src_factory ());
gst_element_class_add_pad_template (element_class, gst_filter_sink_factory ());
gst_element_class_set_details (element_class, &gst_iir_details);
}
static void static void
gst_iir_class_init (GstIIRClass * klass) gst_iir_class_init (GstIIRClass * klass)
{ {

View file

@ -38,15 +38,13 @@
#include <math.h> /* M_PI */ #include <math.h> /* M_PI */
#include <string.h> /* memmove */ #include <string.h> /* memmove */
GstElementDetails gst_lpwsinc_details = { static GstElementDetails gst_lpwsinc_details = GST_ELEMENT_DETAILS (
"LPWSinc", "LPWSinc",
"Filter/Audio/Effect", "Filter/Audio/Effect",
"LGPL",
"Low-pass Windowed sinc filter", "Low-pass Windowed sinc filter",
VERSION, "Thomas <thomas@apestaart.org>, "
"Thomas <thomas@apestaart.org>", "Steven W. Smith"
"(C) 2002 Steven W. Smith", );
};
enum { enum {
/* FILL ME */ /* FILL ME */
@ -92,6 +90,7 @@ struct _GstLPWSincClass
GstElementClass parent_class; GstElementClass parent_class;
}; };
static void gst_lpwsinc_base_init (gpointer g_class);
static void gst_lpwsinc_class_init (GstLPWSincClass * klass); static void gst_lpwsinc_class_init (GstLPWSincClass * klass);
static void gst_lpwsinc_init (GstLPWSinc * filter); static void gst_lpwsinc_init (GstLPWSinc * filter);
@ -114,7 +113,9 @@ GType gst_lpwsinc_get_type (void)
if (!lpwsinc_type) { if (!lpwsinc_type) {
static const GTypeInfo lpwsinc_info = { static const GTypeInfo lpwsinc_info = {
sizeof (GstLPWSincClass), NULL, NULL, sizeof (GstLPWSincClass),
gst_lpwsinc_base_init,
NULL,
(GClassInitFunc) gst_lpwsinc_class_init, NULL, NULL, (GClassInitFunc) gst_lpwsinc_class_init, NULL, NULL,
sizeof (GstLPWSinc), 0, sizeof (GstLPWSinc), 0,
(GInstanceInitFunc) gst_lpwsinc_init, (GInstanceInitFunc) gst_lpwsinc_init,
@ -126,6 +127,18 @@ GType gst_lpwsinc_get_type (void)
return lpwsinc_type; return lpwsinc_type;
} }
static void
gst_lpwsinc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
/* register src pads */
gst_element_class_add_pad_template (element_class, gst_filter_src_factory ());
gst_element_class_add_pad_template (element_class, gst_filter_sink_factory ());
gst_element_class_set_details (element_class, &gst_lpwsinc_details);
}
static void static void
gst_lpwsinc_class_init (GstLPWSincClass * klass) gst_lpwsinc_class_init (GstLPWSincClass * klass)
{ {