From 6e15cb6ce9c67feb008253bad09871b52de9475e Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 11 Aug 2004 09:54:52 +0000 Subject: [PATCH] add gst_scheduler_register shortcut similar to gst_element_register Original commit message from CVS: * docs/gst/gstreamer-sections.txt: * gst/gstscheduler.c: (gst_scheduler_register): * gst/gstscheduler.h: add gst_scheduler_register shortcut similar to gst_element_register * gst/schedulers/entryscheduler.c: (plugin_init): * gst/schedulers/gstbasicscheduler.c: (plugin_init): * gst/schedulers/gstoptimalscheduler.c: (plugin_init): use it --- ChangeLog | 11 +++++++++ docs/gst/gstreamer-sections.txt | 1 + gst/gstscheduler.c | 37 ++++++++++++++++++++++++++++ gst/gstscheduler.h | 2 ++ gst/schedulers/entryscheduler.c | 12 +++------ gst/schedulers/gstbasicscheduler.c | 14 +++-------- gst/schedulers/gstoptimalscheduler.c | 25 ++++++++----------- 7 files changed, 69 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0e496ccb94..3fd6025fbd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-08-11 Benjamin Otte + + * docs/gst/gstreamer-sections.txt: + * gst/gstscheduler.c: (gst_scheduler_register): + * gst/gstscheduler.h: + add gst_scheduler_register shortcut similar to gst_element_register + * gst/schedulers/entryscheduler.c: (plugin_init): + * gst/schedulers/gstbasicscheduler.c: (plugin_init): + * gst/schedulers/gstoptimalscheduler.c: (plugin_init): + use it + 2004-08-10 Steve Lhomme * gst/gstvalue.h: diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index e3d57fb7a1..2b7b67f3b0 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -1418,6 +1418,7 @@ gst_scheduler_get_type GstSchedulerFactory GstSchedulerFactory GST_TYPE_SCHEDULER_FACTORY +gst_scheduler_register gst_scheduler_factory_new gst_scheduler_factory_destroy gst_scheduler_factory_find diff --git a/gst/gstscheduler.c b/gst/gstscheduler.c index f86a5e3265..6ea86d5fe1 100644 --- a/gst/gstscheduler.c +++ b/gst/gstscheduler.c @@ -793,6 +793,43 @@ gst_scheduler_factory_init (GstSchedulerFactory * factory) } +/** + * gst_scheduler_register: + * @plugin: a #GstPlugin + * @name: name of the scheduler to register + * @longdesc: description of the scheduler + * @type: #GType of the scheduler to register + * + * Registers a scheduler with GStreamer. + * + * Returns: TRUE, if the registering succeeded, FALSE on error + **/ +gboolean +gst_scheduler_register (GstPlugin * plugin, const gchar * name, + const gchar * longdesc, GType type) +{ + GstSchedulerFactory *factory; + + g_return_val_if_fail (plugin != NULL, FALSE); + g_return_val_if_fail (name != NULL, FALSE); + g_return_val_if_fail (longdesc != NULL, FALSE); + g_return_val_if_fail (g_type_is_a (type, GST_TYPE_SCHEDULER), FALSE); + + factory = gst_scheduler_factory_find (name); + if (factory) { + g_return_val_if_fail (factory->type == 0, FALSE); + g_free (factory->longdesc); + factory->longdesc = g_strdup (longdesc); + factory->type = type; + } else { + factory = gst_scheduler_factory_new (name, longdesc, type); + g_return_val_if_fail (factory, FALSE); + gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory)); + } + + return TRUE; +} + /** * gst_scheduler_factory_new: * @name: name of schedulerfactory to create diff --git a/gst/gstscheduler.h b/gst/gstscheduler.h index 5a0deb302c..9cca5ad1d6 100644 --- a/gst/gstscheduler.h +++ b/gst/gstscheduler.h @@ -181,6 +181,8 @@ struct _GstSchedulerFactoryClass { GType gst_scheduler_factory_get_type (void); +gboolean gst_scheduler_register (GstPlugin *plugin, const gchar *name, + const gchar *longdesc, GType type); GstSchedulerFactory* gst_scheduler_factory_new (const gchar *name, const gchar *longdesc, GType type); void gst_scheduler_factory_destroy (GstSchedulerFactory *factory); diff --git a/gst/schedulers/entryscheduler.c b/gst/schedulers/entryscheduler.c index 491b962954..e9dac3fb50 100644 --- a/gst/schedulers/entryscheduler.c +++ b/gst/schedulers/entryscheduler.c @@ -1160,18 +1160,14 @@ gst_entry_scheduler_show (GstScheduler * scheduler) static gboolean plugin_init (GstPlugin * plugin) { - GstSchedulerFactory *factory; + if (!gst_scheduler_register (plugin, "entry" COTHREADS_NAME, + "A entry scheduler using " COTHREADS_NAME " cothreads", + GST_TYPE_ENTRY_SCHEDULER)) + return FALSE; GST_DEBUG_CATEGORY_INIT (debug_scheduler, "entry" COTHREADS_NAME, 0, "entry " COTHREADS_NAME "scheduler"); - factory = gst_scheduler_factory_new ("entry" COTHREADS_NAME, - "A entry scheduler using " COTHREADS_NAME " cothreads", - GST_TYPE_ENTRY_SCHEDULER); - if (factory == NULL) - return FALSE; - - gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory)); return TRUE; } diff --git a/gst/schedulers/gstbasicscheduler.c b/gst/schedulers/gstbasicscheduler.c index d968a0dc9e..d82be10ced 100644 --- a/gst/schedulers/gstbasicscheduler.c +++ b/gst/schedulers/gstbasicscheduler.c @@ -263,22 +263,16 @@ gst_basic_scheduler_dispose (GObject * object) static gboolean plugin_init (GstPlugin * plugin) { - GstSchedulerFactory *factory; + if (!gst_scheduler_register (plugin, "basic" COTHREADS_NAME, + "A basic scheduler using " COTHREADS_NAME " cothreads", + gst_basic_scheduler_get_type ())) + return FALSE; GST_DEBUG_CATEGORY_INIT (debug_dataflow, "basic_dataflow", 0, "basic scheduler dataflow"); GST_DEBUG_CATEGORY_INIT (debug_scheduler, "basic_scheduler", 0, "basic scheduler general information"); - factory = gst_scheduler_factory_new ("basic" COTHREADS_NAME, - "A basic scheduler using " COTHREADS_NAME " cothreads", - gst_basic_scheduler_get_type ()); - - if (factory != NULL) { - gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory)); - } else { - g_warning ("could not register scheduler: " COTHREADS_NAME); - } return TRUE; } diff --git a/gst/schedulers/gstoptimalscheduler.c b/gst/schedulers/gstoptimalscheduler.c index 8bba2138bb..f1acf63e46 100644 --- a/gst/schedulers/gstoptimalscheduler.c +++ b/gst/schedulers/gstoptimalscheduler.c @@ -447,25 +447,20 @@ gst_opt_scheduler_dispose (GObject * object) static gboolean plugin_init (GstPlugin * plugin) { - GstSchedulerFactory *factory; +#ifdef USE_COTHREADS + if (!gst_scheduler_register (plugin, "opt" COTHREADS_NAME, + "An optimal scheduler using " COTHREADS_NAME " cothreads", + gst_opt_scheduler_get_type ())) +#else + if (!gst_scheduler_register (plugin, "opt", + "An optimal scheduler using no cothreads", + gst_opt_scheduler_get_type ())) +#endif + return FALSE; GST_DEBUG_CATEGORY_INIT (debug_scheduler, "scheduler", 0, "optimal scheduler"); -#ifdef USE_COTHREADS - factory = gst_scheduler_factory_new ("opt" COTHREADS_NAME, - "An optimal scheduler using " COTHREADS_NAME " cothreads", - gst_opt_scheduler_get_type ()); -#else - factory = gst_scheduler_factory_new ("opt", - "An optimal scheduler using no cothreads", gst_opt_scheduler_get_type ()); -#endif - - if (factory != NULL) { - gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (factory)); - } else { - g_warning ("could not register scheduler: optimal"); - } return TRUE; }