From: Steve Baker Date: Sun, 16 Sep 2001 13:00:49 +0000 (+0000) Subject: all info to describe a dparam is now in the GstDParamSpec struct. The resemblance... X-Git-Tag: BRANCH-EVENTS1-200110161-ROOT~43 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5be7eb77cf4e90e7b3f929d75cea54e4c536edad;p=platform%2Fupstream%2Fgstreamer.git all info to describe a dparam is now in the GstDParamSpec struct. The resemblance to LADSPA descriptors is intentional Original commit message from CVS: all info to describe a dparam is now in the GstDParamSpec struct. The resemblance to LADSPA descriptors is intentional --- diff --git a/gst/elements/gstsinesrc.c b/gst/elements/gstsinesrc.c index 23bad6b..784840b 100644 --- a/gst/elements/gstsinesrc.c +++ b/gst/elements/gstsinesrc.c @@ -152,6 +152,7 @@ gst_sinesrc_init (GstSineSrc *src) { GstElement *element = GST_ELEMENT(src); GstDParamManager *dpman; + GstDParamSpec *spec; src->srcpad = gst_pad_new_from_template ( GST_PADTEMPLATE_GET (sinesrc_src_factory), "src"); @@ -173,10 +174,22 @@ gst_sinesrc_init (GstSineSrc *src) src->seq = 0; dpman = gst_dpman_new ("sinesrc_dpman", GST_ELEMENT(src)); - gst_dpman_add_required_dparam_callback (dpman, "volume", G_TYPE_FLOAT, gst_sinesrc_update_volume, src); gst_dpman_add_required_dparam_callback (dpman, "freq", G_TYPE_FLOAT, gst_sinesrc_update_freq, src); - - src->volume = 1.0; + spec = gst_dpman_get_dparam_spec (dpman, "freq"); + g_value_set_float(spec->min_val, 10.0); + g_value_set_float(spec->max_val, 10000.0); + g_value_set_float(spec->default_val, 350.0); + spec->unit_name = "frequency"; + spec->is_log = TRUE; + + gst_dpman_add_required_dparam_callback (dpman, "volume", G_TYPE_FLOAT, gst_sinesrc_update_volume, src); + spec = gst_dpman_get_dparam_spec (dpman, "volume"); + g_value_set_float(spec->min_val, 0.0); + g_value_set_float(spec->max_val, 2.0); + g_value_set_float(spec->default_val, 0.8); + spec->unit_name = "scalar"; + + src->volume = 0.0; gst_dpman_set_rate_change_pad(dpman, src->srcpad); diff --git a/gst/gstdparam.c b/gst/gstdparam.c index 17bec9d..824582c 100644 --- a/gst/gstdparam.c +++ b/gst/gstdparam.c @@ -25,7 +25,6 @@ #include "gstdparammanager.h" static void gst_dparam_class_init (GstDParamClass *klass); -static void gst_dparam_base_class_init (GstDParamClass *klass); static void gst_dparam_init (GstDParam *dparam); static void gst_dparam_do_update_realtime (GstDParam *dparam, gint64 timestamp); @@ -38,7 +37,7 @@ gst_dparam_get_type(void) { if (!dparam_type) { static const GTypeInfo dparam_info = { sizeof(GstDParamClass), - (GBaseInitFunc)gst_dparam_base_class_init, + NULL, NULL, (GClassInitFunc)gst_dparam_class_init, NULL, @@ -53,15 +52,6 @@ gst_dparam_get_type(void) { } static void -gst_dparam_base_class_init (GstDParamClass *klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass*) klass; - -} - -static void gst_dparam_class_init (GstDParamClass *klass) { GObjectClass *gobject_class; @@ -116,7 +106,7 @@ gst_dparam_new (GType type) * */ void -gst_dparam_attach (GstDParam *dparam, GstObject *parent, gchar *dparam_name, GValue *value) +gst_dparam_attach (GstDParam *dparam, GstObject *parent, GValue *value, GstDParamSpec *spec) { g_return_if_fail (dparam != NULL); @@ -126,12 +116,13 @@ gst_dparam_attach (GstDParam *dparam, GstObject *parent, gchar *dparam_name, GVa g_return_if_fail (G_IS_OBJECT (parent)); g_return_if_fail (GST_IS_DPMAN (parent)); g_return_if_fail ((gpointer)dparam != (gpointer)parent); - g_return_if_fail (dparam_name != NULL); g_return_if_fail (value != NULL); + g_return_if_fail (spec != NULL); g_return_if_fail (GST_DPARAM_TYPE(dparam) == G_VALUE_TYPE(value)); - GST_DPARAM_NAME(dparam) = dparam_name; + GST_DPARAM_NAME(dparam) = spec->dparam_name; GST_DPARAM_VALUE(dparam) = value; + GST_DPARAM_SPEC(dparam) = spec; gst_object_set_parent (GST_OBJECT (dparam), parent); } @@ -151,7 +142,7 @@ gst_dparam_new_value_array(GType type, ...) GValue **point; GValue *value; guint x; - gint values_length = 0; + guint values_length = 0; va_list var_args; GType each_type; diff --git a/gst/gstdparam.h b/gst/gstdparam.h index ede16f9..c120dc3 100644 --- a/gst/gstdparam.h +++ b/gst/gstdparam.h @@ -38,6 +38,7 @@ extern "C" { #define GST_DPARAM_NAME(dparam) (GST_OBJECT_NAME(dparam)) #define GST_DPARAM_PARENT(dparam) (GST_OBJECT_PARENT(dparam)) #define GST_DPARAM_VALUE(dparam) ((dparam)->value) +#define GST_DPARAM_SPEC(dparam) ((dparam)->spec) #define GST_DPARAM_TYPE(dparam) ((dparam)->type) #define GST_DPARAM_LOCK(dparam) (g_mutex_lock((dparam)->lock)) @@ -78,7 +79,7 @@ typedef enum { typedef struct _GstDParam GstDParam; typedef struct _GstDParamClass GstDParamClass; -typedef struct _GstDParamModel GstDParamModel; +typedef struct _GstDParamSpec GstDParamSpec; typedef GValue** (*GstDParamInsertPointFunction) (GstDParam *dparam, guint64 timestamp); typedef void (*GstDParamRemovePointFunction) (GstDParam *dparam, GValue** point); @@ -100,6 +101,7 @@ struct _GstDParam { GMutex *lock; GValue *value; + GstDParamSpec *spec; GValue **point; GType type; gint64 last_update_timestamp; @@ -114,9 +116,19 @@ struct _GstDParamClass { /* signal callbacks */ }; +struct _GstDParamSpec { + gchar *dparam_name; + gchar *unit_name; + GValue *min_val; + GValue *max_val; + GValue *default_val; + gboolean is_log; + gboolean is_rate; +}; + GType gst_dparam_get_type (void); GstDParam* gst_dparam_new (GType type); -void gst_dparam_attach (GstDParam *dparam, GstObject *parent, gchar *dparam_name, GValue *value); +void gst_dparam_attach (GstDParam *dparam, GstObject *parent, GValue *value, GstDParamSpec *spec); GValue** gst_dparam_new_value_array(GType type, ...); void gst_dparam_set_value_from_string(GValue *value, const gchar *value_str); diff --git a/gst/gstdparammanager.c b/gst/gstdparammanager.c index 37e6241..c5a97f2 100644 --- a/gst/gstdparammanager.c +++ b/gst/gstdparammanager.c @@ -25,7 +25,6 @@ #include -static void gst_dpman_base_class_init (GstDParamManagerClass *klass); static void gst_dpman_class_init (GstDParamManagerClass *klass); static void gst_dpman_init (GstDParamManager *dpman); static GstDParamWrapper* gst_dpman_new_wrapper(GstDParamManager *dpman, gchar *dparam_name, GType type, GstDPMUpdateMethod update_method); @@ -44,7 +43,7 @@ gst_dpman_get_type (void) if (!dpman_type) { static const GTypeInfo dpman_info = { sizeof(GstDParamManagerClass), - (GBaseInitFunc)gst_dpman_base_class_init, + NULL, NULL, (GClassInitFunc)gst_dpman_class_init, NULL, @@ -59,15 +58,6 @@ gst_dpman_get_type (void) } static void -gst_dpman_base_class_init (GstDParamManagerClass *klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass*) klass; - -} - -static void gst_dpman_class_init (GstDParamManagerClass *klass) { GstObjectClass *gstobject_class; @@ -277,7 +267,7 @@ gst_dpman_attach_dparam (GstDParamManager *dpman, gchar *dparam_name, GstDParam g_return_val_if_fail(dpwrap->value != NULL, FALSE); dpwrap->dparam = dparam; - gst_dparam_attach(dparam, GST_OBJECT(dpman), dparam_name, dpwrap->value); + gst_dparam_attach(dparam, GST_OBJECT(dpman), dpwrap->value, dpwrap->spec); return TRUE; } @@ -353,6 +343,48 @@ gst_dpman_get_dparam_type (GstDParamManager *dpman, gchar *name) return G_VALUE_TYPE(dpwrap->value); } +GstDParamSpec** +gst_dpman_list_dparam_specs(GstDParamManager *dpman) +{ + GstDParamWrapper* dpwrap; + GSList *dpwraps; + GstDParamSpec** dparam_specs; + guint x = 0; + + g_return_val_if_fail (dpman != NULL, NULL); + g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL); + + dpwraps = GST_DPMAN_DPARAMS_LIST(dpman); + + dparam_specs = g_new0(GstDParamSpec*, g_slist_length(dpwraps) + 1); + + while (dpwraps){ + dpwrap = (GstDParamWrapper*)dpwraps->data; + dparam_specs[x++] = dpwrap->spec; + dpwraps = g_slist_next(dpwraps); + } + return dparam_specs; +} + +GstDParamSpec* +gst_dpman_get_dparam_spec (GstDParamManager *dpman, gchar *dparam_name) +{ + GstDParamWrapper* dpwrap; + + g_return_val_if_fail (dpman != NULL, NULL); + g_return_val_if_fail (GST_IS_DPMAN (dpman), NULL); + g_return_val_if_fail (dparam_name != NULL, NULL); + + dpwrap = gst_dpman_get_wrapper(dpman, dparam_name); + return dpwrap->spec; +} + +void +gst_dpman_dparam_spec_has_changed (GstDParamManager *dpman, gchar *dparam_name) +{ + +} + /** * gst_dpman_register_mode * @klass: GstDParamManagerClass class instance @@ -482,10 +514,18 @@ gst_dpman_new_wrapper(GstDParamManager *dpman, gchar *dparam_name, GType type, G g_return_val_if_fail(gst_dpman_get_wrapper(dpman, dparam_name) == NULL, NULL); dpwrap = g_new0(GstDParamWrapper,1); - dpwrap->dparam_name = dparam_name; dpwrap->update_method = update_method; dpwrap->value = g_new0(GValue,1); g_value_init(dpwrap->value, type); + + dpwrap->spec = g_new0(GstDParamSpec,1); + dpwrap->spec->dparam_name = dparam_name; + dpwrap->spec->min_val = g_new0(GValue,1); + dpwrap->spec->max_val = g_new0(GValue,1); + dpwrap->spec->default_val = g_new0(GValue,1); + g_value_init(dpwrap->spec->min_val, type); + g_value_init(dpwrap->spec->max_val, type); + g_value_init(dpwrap->spec->default_val, type); g_hash_table_insert(GST_DPMAN_DPARAMS(dpman), dparam_name, dpwrap); GST_DPMAN_DPARAMS_LIST(dpman) = g_slist_append(GST_DPMAN_DPARAMS_LIST(dpman), dpwrap); @@ -538,7 +578,7 @@ gst_dpman_preprocess_synchronous(GstDParamManager *dpman, guint frames, gint64 t GSList *dwraps; GstDParam *dparam; GstDParamWrapper *dpwrap; - int x; + guint x; g_return_val_if_fail (dpman != NULL, frames); g_return_val_if_fail (GST_IS_DPMAN (dpman), frames); diff --git a/gst/gstdparammanager.h b/gst/gstdparammanager.h index 42d9834..6aa87d9 100644 --- a/gst/gstdparammanager.h +++ b/gst/gstdparammanager.h @@ -92,7 +92,7 @@ struct _GstDPMMode { }; struct _GstDParamWrapper { - gchar *dparam_name; + GstDParamSpec* spec; GValue *value; GstDParam *dparam; GstDPMUpdateMethod update_method; @@ -140,6 +140,10 @@ void gst_dpman_dettach_dparam (GstDParamManager *dpman, gchar *dparam_name); GstDParam* gst_dpman_get_dparam(GstDParamManager *dpman, gchar *name); GType gst_dpman_get_dparam_type (GstDParamManager *dpman, gchar *name); +GstDParamSpec** gst_dpman_list_dparam_specs(GstDParamManager *dpman); +GstDParamSpec* gst_dpman_get_dparam_spec (GstDParamManager *dpman, gchar *dparam_name); +void gst_dpman_dparam_spec_has_changed (GstDParamManager *dpman, gchar *dparam_name); + void gst_dpman_set_rate_change_pad(GstDParamManager *dpman, GstPad *pad); gboolean gst_dpman_set_mode(GstDParamManager *dpman, gchar *modename); diff --git a/plugins/elements/gstsinesrc.c b/plugins/elements/gstsinesrc.c index 23bad6b..784840b 100644 --- a/plugins/elements/gstsinesrc.c +++ b/plugins/elements/gstsinesrc.c @@ -152,6 +152,7 @@ gst_sinesrc_init (GstSineSrc *src) { GstElement *element = GST_ELEMENT(src); GstDParamManager *dpman; + GstDParamSpec *spec; src->srcpad = gst_pad_new_from_template ( GST_PADTEMPLATE_GET (sinesrc_src_factory), "src"); @@ -173,10 +174,22 @@ gst_sinesrc_init (GstSineSrc *src) src->seq = 0; dpman = gst_dpman_new ("sinesrc_dpman", GST_ELEMENT(src)); - gst_dpman_add_required_dparam_callback (dpman, "volume", G_TYPE_FLOAT, gst_sinesrc_update_volume, src); gst_dpman_add_required_dparam_callback (dpman, "freq", G_TYPE_FLOAT, gst_sinesrc_update_freq, src); - - src->volume = 1.0; + spec = gst_dpman_get_dparam_spec (dpman, "freq"); + g_value_set_float(spec->min_val, 10.0); + g_value_set_float(spec->max_val, 10000.0); + g_value_set_float(spec->default_val, 350.0); + spec->unit_name = "frequency"; + spec->is_log = TRUE; + + gst_dpman_add_required_dparam_callback (dpman, "volume", G_TYPE_FLOAT, gst_sinesrc_update_volume, src); + spec = gst_dpman_get_dparam_spec (dpman, "volume"); + g_value_set_float(spec->min_val, 0.0); + g_value_set_float(spec->max_val, 2.0); + g_value_set_float(spec->default_val, 0.8); + spec->unit_name = "scalar"; + + src->volume = 0.0; gst_dpman_set_rate_change_pad(dpman, src->srcpad);