| /* 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); | |
| #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC | |
| G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstTimedValueControlSource, gst_object_unref) | |
| #endif | |
| G_END_DECLS | |
| #endif /* __GST_TIMED_VALUE_CONTROL_SOURCE_H__ */ |