{
GstElement *element = GST_ELEMENT(src);
GstDParamManager *dpman;
+ GstDParamSpec *spec;
src->srcpad = gst_pad_new_from_template (
GST_PADTEMPLATE_GET (sinesrc_src_factory), "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);
#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);
if (!dparam_type) {
static const GTypeInfo dparam_info = {
sizeof(GstDParamClass),
- (GBaseInitFunc)gst_dparam_base_class_init,
+ NULL,
NULL,
(GClassInitFunc)gst_dparam_class_init,
NULL,
}
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;
*
*/
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);
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);
}
GValue **point;
GValue *value;
guint x;
- gint values_length = 0;
+ guint values_length = 0;
va_list var_args;
GType each_type;
#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))
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);
GMutex *lock;
GValue *value;
+ GstDParamSpec *spec;
GValue **point;
GType type;
gint64 last_update_timestamp;
/* 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);
#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);
if (!dpman_type) {
static const GTypeInfo dpman_info = {
sizeof(GstDParamManagerClass),
- (GBaseInitFunc)gst_dpman_base_class_init,
+ NULL,
NULL,
(GClassInitFunc)gst_dpman_class_init,
NULL,
}
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;
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;
}
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
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);
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);
};
struct _GstDParamWrapper {
- gchar *dparam_name;
+ GstDParamSpec* spec;
GValue *value;
GstDParam *dparam;
GstDPMUpdateMethod update_method;
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);
{
GstElement *element = GST_ELEMENT(src);
GstDParamManager *dpman;
+ GstDParamSpec *spec;
src->srcpad = gst_pad_new_from_template (
GST_PADTEMPLATE_GET (sinesrc_src_factory), "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);