summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2007-05-21 21:48:07 +0000
committerSebastian Dröge <slomo@circular-chaos.org>2007-05-21 21:48:07 +0000
commite645e3d2f67349a04aa297f1070f5afcb4ca991c (patch)
treefe9010c932b877c5bddcb912ffa7314fbd5f14d6
parent51424c0da5c2dabf15c414905a5b396790d6ff52 (diff)
downloadgstreamer-e645e3d2f67349a04aa297f1070f5afcb4ca991c.tar.gz
libs/gst/controller/gstinterpolation.c: Add support for retrieving value arrays when using the trigger interpolation ...
Original commit message from CVS: * libs/gst/controller/gstinterpolation.c: (interpolate_trigger_get_enum_value_array), (interpolate_trigger_get_string_value_array): Add support for retrieving value arrays when using the trigger interpolation mode.
-rw-r--r--ChangeLog8
-rw-r--r--libs/gst/controller/gstinterpolation.c74
2 files changed, 71 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 0d93afcd9b..294e2bac3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2007-05-21 Sebastian Dröge <slomo@circular-chaos.org>
+ * libs/gst/controller/gstinterpolation.c:
+ (interpolate_trigger_get_enum_value_array),
+ (interpolate_trigger_get_string_value_array):
+ Add support for retrieving value arrays when using the trigger
+ interpolation mode.
+
+2007-05-21 Sebastian Dröge <slomo@circular-chaos.org>
+
* libs/gst/controller/gstcontroller.c:
(gst_controller_get_value_array):
* libs/gst/controller/gstcontroller.h:
diff --git a/libs/gst/controller/gstinterpolation.c b/libs/gst/controller/gstinterpolation.c
index c7c4c79b23..e652e4dbb1 100644
--- a/libs/gst/controller/gstinterpolation.c
+++ b/libs/gst/controller/gstinterpolation.c
@@ -190,32 +190,84 @@ interpolate_trigger_get (GstControlledProperty * prop, GstClockTime timestamp)
return (&prop->default_value);
}
+#define DEFINE_TRIGGER_GET(type) \
+static gboolean \
+interpolate_trigger_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_trigger_get (prop,ts)); \
+ ts += value_array->sample_interval; \
+ values++; \
+ } \
+ return (TRUE); \
+}
+
+DEFINE_TRIGGER_GET (int);
+DEFINE_TRIGGER_GET (uint);
+DEFINE_TRIGGER_GET (long);
+
+DEFINE_TRIGGER_GET (ulong);
+DEFINE_TRIGGER_GET (float);
+DEFINE_TRIGGER_GET (double);
+
+DEFINE_TRIGGER_GET (boolean);
+
+static gboolean
+interpolate_trigger_get_enum_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_enum (interpolate_trigger_get (prop, ts));
+ ts += value_array->sample_interval;
+ values++;
+ }
+ return (TRUE);
+}
+
static gboolean
-interpolate_trigger_get_value_array (GstControlledProperty * prop,
+interpolate_trigger_get_string_value_array (GstControlledProperty * prop,
GstClockTime timestamp, GstValueArray * value_array)
{
- return (FALSE);
+ gint i;
+ GstClockTime ts = timestamp;
+ gchar **values = (gchar **) value_array->values;
+
+ for (i = 0; i < value_array->nbsamples; i++) {
+ *values = (gchar *) g_value_get_string (interpolate_trigger_get (prop, ts));
+ ts += value_array->sample_interval;
+ values++;
+ }
+ return (TRUE);
}
static GstInterpolateMethod interpolate_trigger = {
interpolate_trigger_get,
- interpolate_trigger_get_value_array,
+ interpolate_trigger_get_int_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_uint_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_long_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_ulong_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_float_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_double_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_boolean_value_array,
interpolate_trigger_get,
- NULL,
+ interpolate_trigger_get_enum_value_array,
interpolate_trigger_get,
- NULL
+ interpolate_trigger_get_string_value_array
};
/* linear interpolation */