reflect new dparams api

Original commit message from CVS:
reflect new dparams api
This commit is contained in:
Steve Baker 2002-03-04 18:56:24 +00:00
parent b758b9efec
commit b2e874b9e5
2 changed files with 74 additions and 48 deletions

View file

@ -1,40 +1,42 @@
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <math.h> #include <math.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/control/control.h> #include <gst/control/control.h>
#define ZERO(mem) memset(&mem, 0, sizeof(mem))
static gint quit_live(GtkWidget *window, GdkEventAny *e, gpointer data) { static gint quit_live(GtkWidget *window, GdkEventAny *e, gpointer data) {
gtk_main_quit(); gtk_main_quit();
return FALSE; return FALSE;
} }
static void dynparm_log_value_changed(GtkAdjustment *adj,GstDParam *dparam) { static void dynparm_log_value_changed(GtkAdjustment *adj,GstDParam *dparam) {
GValue **point; GValue *set_val;
g_return_if_fail(dparam != NULL); g_return_if_fail(dparam != NULL);
g_return_if_fail(GST_IS_DPARAM (dparam)); g_return_if_fail(GST_IS_DPARAM (dparam));
point = GST_DPARAM_GET_POINT(dparam, 0LL); set_val = g_object_get_data(G_OBJECT(dparam), "set_val");
g_return_if_fail(set_val != NULL);
g_value_set_float(set_val, exp(adj->value));
GST_DPARAM_LOCK(dparam); g_print("setting value to %f\n", g_value_get_float(set_val));
g_print("setting value from %f to %f\n", g_value_get_float(point[0]), (gfloat)exp(adj->value)); g_object_set_property(G_OBJECT(dparam), "value_float", set_val);
g_value_set_float(point[0], (gfloat)exp(adj->value));
GST_DPARAM_READY_FOR_UPDATE(dparam) = TRUE;
GST_DPARAM_UNLOCK(dparam);
} }
static void dynparm_value_changed(GtkAdjustment *adj,GstDParam *dparam) { static void dynparm_value_changed(GtkAdjustment *adj,GstDParam *dparam) {
GValue **point; GValue *set_val;
g_return_if_fail(dparam != NULL); g_return_if_fail(dparam != NULL);
g_return_if_fail(GST_IS_DPARAM (dparam)); g_return_if_fail(GST_IS_DPARAM (dparam));
point = GST_DPARAM_GET_POINT(dparam, 0LL); set_val = g_object_get_data(G_OBJECT(dparam), "set_val");
g_return_if_fail(set_val != NULL);
g_value_set_float(set_val, adj->value);
g_print("setting value to %f\n", adj->value);
g_object_set_property(G_OBJECT(dparam), "value_float", set_val);
GST_DPARAM_LOCK(dparam);
g_print("setting value from %f to %f\n", g_value_get_float(point[0]), adj->value);
g_value_set_float(point[0], adj->value);
GST_DPARAM_READY_FOR_UPDATE(dparam) = TRUE;
GST_DPARAM_UNLOCK(dparam);
} }
@ -50,9 +52,8 @@ int main(int argc,char *argv[]) {
GstDParamManager *dpman; GstDParamManager *dpman;
GstDParam *volume; GstDParam *volume;
GstDParam *freq; GstDParam *freq;
GstDParamSpec *spec; GParamSpecFloat *spec;
GValue *set_val, temp_val;
GValue **vals;
gtk_init(&argc,&argv); gtk_init(&argc,&argv);
gst_init(&argc,&argv); gst_init(&argc,&argv);
@ -72,8 +73,27 @@ int main(int argc,char *argv[]) {
dpman = gst_dpman_get_manager (sinesrc); dpman = gst_dpman_get_manager (sinesrc);
freq = gst_dparam_smooth_new(G_TYPE_FLOAT); freq = gst_dpsmooth_new(G_TYPE_FLOAT);
vals = GST_DPARAM_GET_POINT(freq, 0LL); set_val = g_new0(GValue,1);
g_value_init(set_val, G_TYPE_FLOAT);
g_object_set_data(G_OBJECT(freq), "set_val", set_val);
ZERO(temp_val);
g_value_init(&temp_val, G_TYPE_INT64);
g_value_set_int64(&temp_val, 2000000LL);
g_object_set_property(G_OBJECT(freq), "update_period", &temp_val);
ZERO(temp_val);
g_value_init(&temp_val, G_TYPE_FLOAT);
g_value_set_float(&temp_val, 0.693);
g_object_set_property(G_OBJECT(freq), "slope_delta_float", &temp_val);
ZERO(temp_val);
g_value_init(&temp_val, G_TYPE_INT64);
g_value_set_int64(&temp_val, 50000000LL);
g_object_set_property(G_OBJECT(freq), "slope_time", &temp_val);
/* vals = GST_DPARAM_GET_POINT(freq, 0LL);
g_value_set_float(vals[0], 10.0); g_value_set_float(vals[0], 10.0);
@ -86,9 +106,13 @@ int main(int argc,char *argv[]) {
// set the default update period to 0.5ms, or 2000Hz // set the default update period to 0.5ms, or 2000Hz
GST_DPARAM_DEFAULT_UPDATE_PERIOD(freq) = 2000000LL; GST_DPARAM_DEFAULT_UPDATE_PERIOD(freq) = 2000000LL;
*/
volume = gst_dparam_new(G_TYPE_FLOAT);
set_val = g_new0(GValue,1);
g_value_init(set_val, G_TYPE_FLOAT);
g_object_set_data(G_OBJECT(volume), "set_val", set_val);
volume = gst_dparam_smooth_new(G_TYPE_FLOAT); /* vals = GST_DPARAM_GET_POINT(volume, 0LL);
vals = GST_DPARAM_GET_POINT(volume, 0LL);
// this defines the maximum slope that this // this defines the maximum slope that this
// param can change. This says that in 10ms // param can change. This says that in 10ms
@ -98,7 +122,7 @@ int main(int argc,char *argv[]) {
// set the default update period to 0.5ms, or 2000Hz // set the default update period to 0.5ms, or 2000Hz
GST_DPARAM_DEFAULT_UPDATE_PERIOD(volume) = 2000000LL; GST_DPARAM_DEFAULT_UPDATE_PERIOD(volume) = 2000000LL;
*/
g_assert(gst_dpman_attach_dparam (dpman, "volume", volume)); g_assert(gst_dpman_attach_dparam (dpman, "volume", volume));
g_assert(gst_dpman_attach_dparam (dpman, "freq", freq)); g_assert(gst_dpman_attach_dparam (dpman, "freq", freq));
@ -111,18 +135,20 @@ int main(int argc,char *argv[]) {
hbox = gtk_hbox_new(TRUE,0); hbox = gtk_hbox_new(TRUE,0);
gtk_container_add(GTK_CONTAINER(window),hbox); gtk_container_add(GTK_CONTAINER(window),hbox);
spec = gst_dpman_get_dparam_spec (dpman, "volume"); spec = (GParamSpecFloat*)gst_dpman_get_param_spec (dpman, "volume");
volume_adj = (GtkAdjustment*)gtk_adjustment_new(g_value_get_float(spec->default_val), volume_adj = (GtkAdjustment*)gtk_adjustment_new(spec->default_value,
g_value_get_float(spec->min_val), spec->minimum,
g_value_get_float(spec->max_val), 0.1, 0.01, 0.01); spec->maximum, 0.1, 0.01, 0.01);
volume_slider = gtk_vscale_new(volume_adj); volume_slider = gtk_vscale_new(volume_adj);
gtk_scale_set_digits(GTK_SCALE(volume_slider), 2); gtk_scale_set_digits(GTK_SCALE(volume_slider), 2);
gtk_box_pack_start(GTK_BOX(hbox),volume_slider,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(hbox),volume_slider,TRUE,TRUE,0);
spec = gst_dpman_get_dparam_spec (dpman, "freq"); spec = (GParamSpecFloat*)gst_dpman_get_param_spec (dpman, "freq");
freq_adj = (GtkAdjustment*)gtk_adjustment_new((gfloat)log(g_value_get_float(spec->default_val)), freq_adj = (GtkAdjustment*)gtk_adjustment_new((gfloat)log(spec->default_value),
(gfloat)log(g_value_get_float(spec->min_val)), (gfloat)log(spec->minimum),
(gfloat)log(g_value_get_float(spec->max_val)), 0.1, 0.01, 0.01); (gfloat)log(spec->maximum), 0.1, 0.01, 0.01);
freq_slider = gtk_vscale_new(freq_adj); freq_slider = gtk_vscale_new(freq_adj);
gtk_scale_set_digits(GTK_SCALE(freq_slider), 2); gtk_scale_set_digits(GTK_SCALE(freq_slider), 2);
gtk_box_pack_start(GTK_BOX(hbox),freq_slider,TRUE,TRUE,0); gtk_box_pack_start(GTK_BOX(hbox),freq_slider,TRUE,TRUE,0);

View file

@ -76,7 +76,6 @@ GST_PADTEMPLATE_FACTORY (sinesrc_src_factory,
static void gst_sinesrc_class_init (GstSineSrcClass *klass); static void gst_sinesrc_class_init (GstSineSrcClass *klass);
static void gst_sinesrc_init (GstSineSrc *src); static void gst_sinesrc_init (GstSineSrc *src);
static void gst_sinesrc_sinkconnect (GstPad *pad, GstCaps *caps);
static void gst_sinesrc_set_property (GObject *object, guint prop_id, static void gst_sinesrc_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec); const GValue *value, GParamSpec *pspec);
static void gst_sinesrc_get_property (GObject *object, guint prop_id, static void gst_sinesrc_get_property (GObject *object, guint prop_id,
@ -157,7 +156,6 @@ gst_sinesrc_class_init (GstSineSrcClass *klass)
static void static void
gst_sinesrc_init (GstSineSrc *src) gst_sinesrc_init (GstSineSrc *src)
{ {
GstDParamSpec *spec;
src->srcpad = gst_pad_new_from_template ( src->srcpad = gst_pad_new_from_template (
GST_PADTEMPLATE_GET (sinesrc_src_factory), "src"); GST_PADTEMPLATE_GET (sinesrc_src_factory), "src");
@ -179,22 +177,24 @@ gst_sinesrc_init (GstSineSrc *src)
src->dpman = gst_dpman_new ("sinesrc_dpman", GST_ELEMENT(src)); src->dpman = gst_dpman_new ("sinesrc_dpman", GST_ELEMENT(src));
gst_dpman_add_required_dparam_callback (src->dpman, "freq", G_TYPE_FLOAT, gst_sinesrc_update_freq, src); gst_dpman_add_required_dparam_callback (
spec = gst_dpman_get_dparam_spec (src->dpman, "freq"); src->dpman,
g_value_set_float(spec->min_val, 10.0); g_param_spec_float("freq","Frequency (Hz)","Frequency of the tone",
g_value_set_float(spec->max_val, 10000.0); 10.0, 10000.0, 350.0, G_PARAM_READWRITE),
g_value_set_float(spec->default_val, 350.0); TRUE,
spec->unit_name = "frequency"; FALSE,
spec->is_log = TRUE; gst_sinesrc_update_freq,
src
);
gst_dpman_add_required_dparam_direct (src->dpman, "volume", G_TYPE_FLOAT, &(src->volume)); gst_dpman_add_required_dparam_direct (
spec = gst_dpman_get_dparam_spec (src->dpman, "volume"); src->dpman,
g_value_set_float(spec->min_val, 0.0); g_param_spec_float("volume","Volume","Volume of the tone",
g_value_set_float(spec->max_val, 1.0); 0.0, 1.0, 0.8, G_PARAM_READWRITE),
g_value_set_float(spec->default_val, 0.8); FALSE,
spec->unit_name = "scalar"; FALSE,
&(src->volume)
src->volume = 0.0; );
gst_dpman_set_rate_change_pad(src->dpman, src->srcpad); gst_dpman_set_rate_change_pad(src->dpman, src->srcpad);