summaryrefslogtreecommitdiff
path: root/include/gst/controller/gsttimedvaluecontrolsource.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gst/controller/gsttimedvaluecontrolsource.h')
-rw-r--r--include/gst/controller/gsttimedvaluecontrolsource.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/include/gst/controller/gsttimedvaluecontrolsource.h b/include/gst/controller/gsttimedvaluecontrolsource.h
new file mode 100644
index 0000000000..2baa369a23
--- /dev/null
+++ b/include/gst/controller/gsttimedvaluecontrolsource.h
@@ -0,0 +1,160 @@
+/* GStreamer
+ *
+ * Copyright (C) 2007 Sebastian Dröge <slomo@circular-chaos.org>
+ * 2011 Stefan Sauer <ensonic@users.sf.net>
+ *
+ * gsttimedvaluecontrolsource.h: Base class for timeed value based control
+ * sources
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __GST_TIMED_VALUE_CONTROL_SOURCE_H__
+#define __GST_TIMED_VALUE_CONTROL_SOURCE_H__
+
+#include <glib-object.h>
+#include <gst/gst.h>
+#include <gst/controller/controller-prelude.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_TIMED_VALUE_CONTROL_SOURCE \
+ (gst_timed_value_control_source_get_type ())
+#define GST_TIMED_VALUE_CONTROL_SOURCE(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSource))
+#define GST_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \
+ (G_TYPE_CHECK_CLASS_CAST ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass))
+#define GST_IS_TIMED_VALUE_CONTROL_SOURCE(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE))
+#define GST_IS_TIMED_VALUE_CONTROL_SOURCE_CLASS(vtable) \
+ (G_TYPE_CHECK_CLASS_TYPE ((vtable), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE))
+#define GST_TIMED_VALUE_CONTROL_SOURCE_GET_CLASS(inst) \
+ (G_TYPE_INSTANCE_GET_CLASS ((inst), GST_TYPE_TIMED_VALUE_CONTROL_SOURCE, GstTimedValueControlSourceClass))
+
+typedef struct _GstTimedValueControlSource GstTimedValueControlSource;
+typedef struct _GstTimedValueControlSourceClass GstTimedValueControlSourceClass;
+typedef struct _GstTimedValueControlSourcePrivate GstTimedValueControlSourcePrivate;
+typedef struct _GstControlPoint GstControlPoint;
+
+/**
+ * GstControlPoint:
+ * @timestamp: timestamp of the value change
+ * @value: the new value
+ *
+ * An internal structure for value+time and various temporary
+ * values used for interpolation. This "inherits" from
+ * GstTimedValue.
+ */
+struct _GstControlPoint
+{
+ /* fields from GstTimedValue. DO NOT CHANGE! */
+ GstClockTime timestamp;
+ gdouble value;
+
+ /*< private >*/
+
+ /* Caches for the interpolators */
+ /* FIXME: we should not have this here already ... */
+ union {
+ struct { /* 16 bytes */
+ gdouble h;
+ gdouble z;
+ } cubic;
+ struct { /* 24 bytes */
+ gdouble c1s, c2s, c3s;
+ } cubic_monotonic;
+ guint8 _gst_reserved[64];
+ } cache;
+};
+
+GST_CONTROLLER_API
+GType gst_control_point_get_type (void);
+
+/**
+ * GstTimedValueControlSource:
+ *
+ * The instance structure of #GstControlSource.
+ */
+struct _GstTimedValueControlSource {
+ GstControlSource parent;
+
+ /*< protected >*/
+ GMutex lock;
+
+ GSequence *values; /* List of GstControlPoint */
+ gint nvalues; /* Number of control points */
+ gboolean valid_cache;
+
+ /*< private >*/
+ GstTimedValueControlSourcePrivate *priv;
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+struct _GstTimedValueControlSourceClass {
+ GstControlSourceClass parent_class;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING];
+};
+
+#define GST_TIMED_VALUE_CONTROL_SOURCE_LOCK(o) \
+ g_mutex_lock(&((GstTimedValueControlSource *)o)->lock)
+#define GST_TIMED_VALUE_CONTROL_SOURCE_UNLOCK(o) \
+ g_mutex_unlock(&((GstTimedValueControlSource *)o)->lock)
+
+GST_CONTROLLER_API
+GType gst_timed_value_control_source_get_type (void);
+
+/* Functions */
+
+GST_CONTROLLER_API
+GSequenceIter * gst_timed_value_control_source_find_control_point_iter (
+ GstTimedValueControlSource * self,
+ GstClockTime timestamp);
+GST_CONTROLLER_API
+gboolean gst_timed_value_control_source_set (GstTimedValueControlSource * self,
+ GstClockTime timestamp,
+ const gdouble value);
+GST_CONTROLLER_API
+gboolean gst_timed_value_control_source_set_from_list (GstTimedValueControlSource * self,
+ const GSList * timedvalues);
+GST_CONTROLLER_API
+gboolean gst_timed_value_control_source_unset (GstTimedValueControlSource * self,
+ GstClockTime timestamp);
+
+GST_CONTROLLER_API
+void gst_timed_value_control_source_unset_all (GstTimedValueControlSource *self);
+
+GST_CONTROLLER_API
+GList * gst_timed_value_control_source_get_all (GstTimedValueControlSource * self);
+
+GST_CONTROLLER_API
+gint gst_timed_value_control_source_get_count (GstTimedValueControlSource * self);
+
+GST_CONTROLLER_API
+void gst_timed_value_control_invalidate_cache (GstTimedValueControlSource * self);
+
+GST_CONTROLLER_API
+void gst_control_point_free (GstControlPoint * cp);
+
+GST_CONTROLLER_API
+GstControlPoint * gst_control_point_copy (GstControlPoint * cp);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstTimedValueControlSource, gst_object_unref)
+
+G_END_DECLS
+
+#endif /* __GST_TIMED_VALUE_CONTROL_SOURCE_H__ */