From 6ad042fadadf30e71ea4180755965a3058c35b51 Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Wed, 29 May 2002 18:54:19 +0000 Subject: [PATCH] use new dparams api. run demo_dparams to hear how smooth it is now Original commit message from CVS: use new dparams api. run demo_dparams to hear how smooth it is now --- gst/sine/demo-dparams.c | 9 +++++---- gst/sine/gstsinesrc.c | 16 +++++++++------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/gst/sine/demo-dparams.c b/gst/sine/demo-dparams.c index 344acd6e40..09b67e7a46 100644 --- a/gst/sine/demo-dparams.c +++ b/gst/sine/demo-dparams.c @@ -62,8 +62,9 @@ int main(int argc,char *argv[]) { gst_element_connect_many(sinesrc, volfilter, osssink, NULL); /* this breaks with current alsa oss compat lib */ g_object_set(G_OBJECT(osssink),"fragment",0x00180008,NULL); + g_object_set(G_OBJECT(osssink),"sync",FALSE,NULL); - g_object_set(G_OBJECT(sinesrc),"samplesperbuffer",64,NULL); + g_object_set(G_OBJECT(sinesrc),"samplesperbuffer",1024,NULL); /***** set up the GUI *****/ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); @@ -87,7 +88,7 @@ int main(int argc,char *argv[]) { dpman = gst_dpman_get_manager (sinesrc); g_assert(gst_dpman_attach_dparam (dpman, "freq", freq)); - gst_dpman_set_mode(dpman, "synchronous"); + gst_dpman_set_mode(dpman, "asynchronous"); spec = (GParamSpecFloat*)gst_dpman_get_param_spec (dpman, "freq"); freq_adj = (GtkAdjustment*)gtk_adjustment_new((gfloat)log(spec->default_value), @@ -106,12 +107,12 @@ int main(int argc,char *argv[]) { /* this defines the maximum slope that this * * param can change. This says that in 50ms * * the value can change from 0.0 to 1.0 */ - g_object_set(G_OBJECT(volume), "slope_delta_float", 1.0F, NULL); + g_object_set(G_OBJECT(volume), "slope_delta_float", 0.1F, NULL); g_object_set(G_OBJECT(volume), "slope_time", 50000000LL, NULL); dpman = gst_dpman_get_manager (volfilter); g_assert(gst_dpman_attach_dparam (dpman, "volume", volume)); - gst_dpman_set_mode(dpman, "synchronous"); + gst_dpman_set_mode(dpman, "asynchronous"); g_object_set(G_OBJECT(volfilter), "mute", FALSE, NULL); diff --git a/gst/sine/gstsinesrc.c b/gst/sine/gstsinesrc.c index 8ae961d2d5..807a30dff2 100644 --- a/gst/sine/gstsinesrc.c +++ b/gst/sine/gstsinesrc.c @@ -196,8 +196,8 @@ gst_sinesrc_init (GstSineSrc *src) &(src->volume) ); - gst_dpman_set_rate_change_pad(src->dpman, src->srcpad); - + gst_dpman_set_rate(src->dpman, src->samplerate); + gst_sinesrc_populate_sinetable(src); gst_sinesrc_update_table_inc(src); @@ -210,7 +210,7 @@ gst_sinesrc_get(GstPad *pad) GstBuffer *buf; gint16 *samples; - gint i=0, frame_countdown; + gint i=0; g_return_val_if_fail (pad != NULL, NULL); src = GST_SINESRC(gst_pad_get_parent (pad)); @@ -224,12 +224,12 @@ gst_sinesrc_get(GstPad *pad) samples = (gint16*)GST_BUFFER_DATA(buf); GST_BUFFER_DATA(buf) = (gpointer) samples; - - frame_countdown = GST_DPMAN_PREPROCESS(src->dpman, src->samples_per_buffer, src->timestamp); + + GST_DPMAN_PREPROCESS(src->dpman, src->samples_per_buffer, src->timestamp); src->timestamp += (gint64)src->samples_per_buffer * 1000000000LL / (gint64)src->samplerate; - while(GST_DPMAN_PROCESS_COUNTDOWN(src->dpman, frame_countdown, i)) { + while(GST_DPMAN_PROCESS(src->dpman, i)) { src->table_lookup = (gint)(src->table_pos); src->table_lookup_next = src->table_lookup + 1; @@ -251,12 +251,13 @@ gst_sinesrc_get(GstPad *pad) /* * src->volume * 32767.0; */ /*linear interpolation */ - samples[i++] = ((src->table_interp + samples[i] = ((src->table_interp *(src->table_data[src->table_lookup_next] -src->table_data[src->table_lookup] ) )+src->table_data[src->table_lookup] )* src->volume * 32767.0; + i++; } @@ -282,6 +283,7 @@ gst_sinesrc_set_property (GObject *object, guint prop_id, const GValue *value, G break; case ARG_SAMPLERATE: src->samplerate = g_value_get_int (value); + gst_dpman_set_rate(src->dpman, src->samplerate); src->newcaps=TRUE; gst_sinesrc_update_table_inc(src); break;