From: <en...@fr...> - 2005-04-08 09:16:18
|
CVS Root: /cvs/gstreamer Module: gst-sandbox Changes by: ensonic Date: Fri Apr 08 2005 02:16:17 PDT Log message: some detailed instructions _set now reuses existing timed_values Modified files: gst-controller : ChangeLog README gst-controller/src: gst-controller.c gst-controller.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/ChangeLog.diff?r1=1.15&r2=1.16 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/README.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/src/gst-controller.c.diff?r1=1.15&r2=1.16 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/src/gst-controller.h.diff?r1=1.13&r2=1.14 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/ChangeLog,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- ChangeLog 7 Apr 2005 18:19:46 -0000 1.15 +++ ChangeLog 8 Apr 2005 09:16:04 -0000 1.16 @@ -1,3 +1,13 @@ +2005-04-08 Stefan Kost <en...@us...> + + * README: + some detailed instructions + * src/gst-controller.c: (gst_timed_value_find), + (gst_controlled_property_new), (gst_controller_new), + (gst_controller_set): + * src/gst-controller.h: + _set now reuses existing timed_values 2005-04-07 Stefan Kost <en...@us...> * TODO: Index: README RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/README,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- README 7 Apr 2005 16:58:30 -0000 1.2 +++ README 8 Apr 2005 09:16:04 -0000 1.3 @@ -1,7 +1,23 @@ $Id$ +INTRO New dynamic properties. This library is planned as a successor of the current dparams module (gstreamer/libs/control/). +The purpose of the library is to provide a mechanism to schedule property value +changes for gobjects. +BUILDING +./autogen.sh +make +/bin/su - +make insttall +gst-register-0.8 +TESTING After building it, test by using ./examples/audio-example --gst-debug="gstcontroller:4" Index: gst-controller.c RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/src/gst-controller.c,v --- gst-controller.c 7 Apr 2005 18:19:46 -0000 1.15 +++ gst-controller.c 8 Apr 2005 09:16:04 -0000 1.16 @@ -51,6 +51,11 @@ return((((GstTimedValue *)b)->timestamp - ((GstTimedValue *)a)->timestamp)); } +static gint gst_timed_value_find(gconstpointer a,gconstpointer b) +{ + return(((GstTimedValue *)a)->timestamp-*(GstClockTime *)b); +} /* * gst_controlled_property_new: * @object: for which object the controlled property should be set up @@ -95,7 +100,6 @@ prop->interpolation=GST_INTERPOLATE_NONE; prop->method=interpolation_methods[prop->interpolation]; g_value_init(&prop->default_value,prop->type); - /* TODO init remaining fields */ if(prop->type==G_TYPE_INT) { GParamSpecInt *tpspec=G_PARAM_SPEC_INT(pspec); g_value_set_int(&prop->default_value,tpspec->default_value); @@ -104,6 +108,14 @@ GParamSpecUInt *tpspec=G_PARAM_SPEC_UINT(pspec); g_value_set_uint(&prop->default_value,tpspec->default_value); } + if(prop->type==G_TYPE_LONG) { + GParamSpecLong *tpspec=G_PARAM_SPEC_LONG(pspec); + g_value_set_long(&prop->default_value,tpspec->default_value); + } + else if(prop->type==G_TYPE_ULONG) { + GParamSpecULong *tpspec=G_PARAM_SPEC_ULONG(pspec); + g_value_set_ulong(&prop->default_value,tpspec->default_value); else if(prop->type==G_TYPE_FLOAT) { GParamSpecFloat *tpspec=G_PARAM_SPEC_FLOAT(pspec); g_value_set_float(&prop->default_value,tpspec->default_value); @@ -115,6 +127,13 @@ else { GST_WARNING("incomplete implementation for paramspec type '%s'",G_PARAM_SPEC_TYPE_NAME(pspec)); + /* TODO what about adding a timedval with timestamp=0 and value=default + + a bit easier for interpolators, example: + * first timestamp is at 5 + * requested value if for timestamp=3 + * LINEAR and Co. would need to interpolate fromdefault value + to value at timestamp 5 + */ } } else @@ -183,6 +202,10 @@ BilboEd : This is too specific to be put here, don't we want GstController to be as generic as possible ? + + Ensonic: So we will have gst_parent_controller_new as well and maybe a + convinience function that automatically chooses the right one (how to name it)? + GstParent will be in core after all. */ self=g_object_get_qdata(object,controller_key); @@ -267,13 +290,21 @@ if(G_VALUE_TYPE(value)==prop->type) { GstTimedValue *tv; - // create a new GstTimedValue - tv=g_new(GstTimedValue,1); - tv->timestamp=timestamp; - memcpy(&tv->value,value,sizeof(GValue)); - // and sort it into the prop->values list - /* TODO check for overwriting values in the list */ - prop->values=g_list_insert_sorted(prop->values,tv,gst_timed_value_compare); + GList *node; + // check if a timed_value for the timestamp already exists + if((node=g_list_find_custom(prop->values,×tamp,gst_timed_value_find))) + { + tv=node->data; + memcpy(&tv->value,value,sizeof(GValue)); + else { + // create a new GstTimedValue + tv=g_new(GstTimedValue,1); + tv->timestamp=timestamp; + // and sort it into the prop->values list + prop->values=g_list_insert_sorted(prop->values,tv,gst_timed_value_compare); else { GST_WARNING("incompatible value type for property '%s'",prop->name); Index: gst-controller.h RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/src/gst-controller.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- gst-controller.h 7 Apr 2005 18:19:46 -0000 1.13 +++ gst-controller.h 8 Apr 2005 09:16:04 -0000 1.14 @@ -32,6 +32,11 @@ { GstClockTime timestamp; // timestamp of the value change GValue value; // the new value + /* TODO what about storing the difference to next timestamp and value here + + make calculations slightly easier and faster + - determining the GType for the value_dif is not simple + e.g. if value is G_TYPE_UCHAR value_diff needs to be G_TYPE_INT + */ } GstTimedValue; |