From: <en...@fr...> - 2005-04-18 15:18:45
|
CVS Root: /cvs/gstreamer Module: gst-sandbox Changes by: ensonic Date: Mon Apr 18 2005 08:18:37 PDT Log message: completed none interpolator added unset methods for properties Modified files: gst-controller : ChangeLog TODO gst-controller/src: gst-controller.c gst-interpolation.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/ChangeLog.diff?r1=1.20&r2=1.21 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/TODO.diff?r1=1.5&r2=1.6 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/src/gst-controller.c.diff?r1=1.20&r2=1.21 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/gst-controller/src/gst-interpolation.c.diff?r1=1.10&r2=1.11 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/ChangeLog,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- ChangeLog 17 Apr 2005 10:49:37 -0000 1.20 +++ ChangeLog 18 Apr 2005 15:18:25 -0000 1.21 @@ -1,3 +1,11 @@ +2005-04-18 Stefan Kost <en...@us...> + + * TODO: + * src/gst-controller.c: (gst_controller_unset): + * src/gst-interpolation.c: + completed none interpolator + added unset methods for properties 2005-04-17 Stefan Kost <en...@us...> * src/gst-interpolation.c: (interpolate_none_get_int_value_array): Index: TODO RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/TODO,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- TODO 8 Apr 2005 09:18:51 -0000 1.5 +++ TODO 18 Apr 2005 15:18:25 -0000 1.6 @@ -1,7 +1,28 @@ $Id$ -* implement the interpolation +* implement the interpolation modes + * LINEAR is done * missing API - gst_controller_unset() ? - removed a timed_value + gst_controller_unset_range(prop,name,ts1,ts2) + remove all timed values in a range +* optimize + remember last list node (already exists in disabled code) +* interaction + * allow to overide the envelope untile a new timed value takes effect + * in GstControlledProperty have GstTimedValue live_value; + * when e.g. in GUI user moved a slider, set this value along with timestamp=NOW + * as long as there is no value in the list with value.ts<NOW && value.ts>live_value.ts + use live_value.value + * as a shortcut invalidate live_value when done with it +* GObjectize the gst-interpolator.c stuff + * abstract base class + GValueProvider { + get() + get_value_array(); + } + * overide for various GValue types Index: gst-controller.c RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/src/gst-controller.c,v --- gst-controller.c 16 Apr 2005 14:48:25 -0000 1.20 +++ gst-controller.c 18 Apr 2005 15:18:25 -0000 1.21 @@ -369,7 +369,7 @@ * @timestamp: the time the control-change is schedules for * @value: the control-value * - * Functions used to set the values of given controller-handled properties + * Set the value of given controller-handled property * Returns: FALSE if the values couldn't be set (ex : properties not handled by controller), TRUE otherwise */ @@ -423,7 +423,7 @@ * Sets multiple timed values at once. - * Returns: FALSE if the values couldn't be set (ex : properties not handled by controller), TRUE otherwise + * Returns: %FALSE if the values couldn't be set (ex : properties not handled by controller), %TRUE otherwise gboolean @@ -457,6 +457,37 @@ } /** + * gst_controller_unset: + * @self: the controller object which handles the properties + * @property_name: the name of the property to unset + * @timestamp: the time the control-change should be removed from + * + * Used to remove the value of given controller-handled property + * Returns: %FALSE if the values couldn't be unset (ex : properties not handled by controller), %TRUE otherwise + */ +gboolean +gst_controller_unset (GstController * self, gchar * property_name, + GstClockTime timestamp) +{ + gboolean res = FALSE; + GstControlledProperty *prop; + g_return_val_if_fail (GST_IS_CONTROLLER (self), FALSE); + g_return_val_if_fail (property_name, FALSE); + g_return_val_if_fail (GST_CLOCK_TIME_IS_VALID (timestamp), FALSE); + g_mutex_lock (self->lock); + if ((prop = gst_controller_find_controlled_property (self, property_name))) { + prop->values = g_list_remove (prop->values, prop); + res=TRUE; + } + g_mutex_unlock (self->lock); + return (res); +} +/** * gst_controller_get: * Returns: the GValue of the property at the given time, or %NULL if the property isn't handled by the controller Index: gst-interpolation.c RCS file: /cvs/gstreamer/gst-sandbox/gst-controller/src/gst-interpolation.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gst-interpolation.c 17 Apr 2005 10:49:37 -0000 1.10 +++ gst-interpolation.c 18 Apr 2005 15:18:25 -0000 1.11 @@ -65,31 +65,37 @@ return (&prop->default_value); -static gboolean -interpolate_none_get_int_value_array (GstControlledProperty * prop, - GstClockTime timestamp, GstValueArray * value_array) -{ - gint i; - GstClockTime ts=timestamp; - gint *values=(gint *)value_array->values; - - for(i=0;i<value_array->nbsamples;i++) { - *values=g_value_get_int (interpolate_none_get(prop,ts)); - ts+=value_array->sample_interval; - values++; - } - return (TRUE); +#define DEFINE_NONE_GET(type) \ +static gboolean \ +interpolate_none_get_##type##_value_array (GstControlledProperty * prop, \ + GstClockTime timestamp, GstValueArray * value_array) \ +{ \ + gint i; \ + GstClockTime ts=timestamp; \ + g##type *values=(g##type *)value_array->values; \ + \ + for(i=0;i<value_array->nbsamples;i++) { \ + *values=g_value_get_##type (interpolate_none_get (prop,ts)); \ + ts+=value_array->sample_interval; \ + values++; \ + } \ + return (TRUE); \ +DEFINE_NONE_GET (int) +DEFINE_NONE_GET (long) +DEFINE_NONE_GET (float) +DEFINE_NONE_GET (double) static GstInterpolateMethod interpolate_none = { interpolate_none_get, interpolate_none_get_int_value_array, - NULL, + interpolate_none_get_long_value_array, + interpolate_none_get_float_value_array, - NULL + interpolate_none_get_double_value_array }; // returns the default value of the property, except for times with specific values |