summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Baker <steve@stevebaker.org>2001-09-16 13:00:49 +0000
committerSteve Baker <steve@stevebaker.org>2001-09-16 13:00:49 +0000
commit5be7eb77cf4e90e7b3f929d75cea54e4c536edad (patch)
treed6eb7bc64e1ad9e2f77cdaa3df354a009c90e348
parent1477b02850ba6201b7b788259687265ce08cf1e7 (diff)
downloadgstreamer-5be7eb77cf4e90e7b3f929d75cea54e4c536edad.tar.gz
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
-rw-r--r--gst/elements/gstsinesrc.c19
-rw-r--r--gst/gstdparam.c21
-rw-r--r--gst/gstdparam.h16
-rw-r--r--gst/gstdparammanager.c68
-rw-r--r--gst/gstdparammanager.h6
-rw-r--r--plugins/elements/gstsinesrc.c19
6 files changed, 111 insertions, 38 deletions
diff --git a/gst/elements/gstsinesrc.c b/gst/elements/gstsinesrc.c
index 23bad6be39..784840b3a5 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 17bec9d949..824582c6f0 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 ede16f937a..c120dc3b65 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 37e6241258..c5a97f2a2e 100644
--- a/gst/gstdparammanager.c
+++ b/gst/gstdparammanager.c
@@ -25,7 +25,6 @@
#include <gst/gstelement.h>
-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 42d983411b..6aa87d9bcf 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 23bad6be39..784840b3a5 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);