| 1 | /* GStreamer | 
| 2 |  * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu> | 
| 3 |  *                    2000 Wim Taymans <wim.taymans@chello.be> | 
| 4 |  *                    2005 Wim Taymans <wim@fluendo.com> | 
| 5 |  * | 
| 6 |  * gstevent.h: Header for GstEvent subsystem | 
| 7 |  * | 
| 8 |  * This library is free software; you can redistribute it and/or | 
| 9 |  * modify it under the terms of the GNU Library General Public | 
| 10 |  * License as published by the Free Software Foundation; either | 
| 11 |  * version 2 of the License, or (at your option) any later version. | 
| 12 |  * | 
| 13 |  * This library is distributed in the hope that it will be useful, | 
| 14 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 15 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 16 |  * Library General Public License for more details. | 
| 17 |  * | 
| 18 |  * You should have received a copy of the GNU Library General Public | 
| 19 |  * License along with this library; if not, write to the | 
| 20 |  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, | 
| 21 |  * Boston, MA 02110-1301, USA. | 
| 22 |  */ | 
| 23 |  | 
| 24 |  | 
| 25 | #ifndef __GST_EVENT_H__ | 
| 26 | #define __GST_EVENT_H__ | 
| 27 |  | 
| 28 | typedef struct _GstEvent GstEvent; | 
| 29 |  | 
| 30 | /** | 
| 31 |  * GstEventTypeFlags: | 
| 32 |  * @GST_EVENT_TYPE_UPSTREAM:     Set if the event can travel upstream. | 
| 33 |  * @GST_EVENT_TYPE_DOWNSTREAM:   Set if the event can travel downstream. | 
| 34 |  * @GST_EVENT_TYPE_SERIALIZED:   Set if the event should be serialized with data | 
| 35 |  *                               flow. | 
| 36 |  * @GST_EVENT_TYPE_STICKY:       Set if the event is sticky on the pads. | 
| 37 |  * @GST_EVENT_TYPE_STICKY_MULTI: Multiple sticky events can be on a pad, each | 
| 38 |  *                               identified by the event name. | 
| 39 |  * | 
| 40 |  * #GstEventTypeFlags indicate the aspects of the different #GstEventType | 
| 41 |  * values. You can get the type flags of a #GstEventType with the | 
| 42 |  * gst_event_type_get_flags() function. | 
| 43 |  */ | 
| 44 | typedef enum { | 
| 45 |   GST_EVENT_TYPE_UPSTREAM       = 1 << 0, | 
| 46 |   GST_EVENT_TYPE_DOWNSTREAM     = 1 << 1, | 
| 47 |   GST_EVENT_TYPE_SERIALIZED     = 1 << 2, | 
| 48 |   GST_EVENT_TYPE_STICKY         = 1 << 3, | 
| 49 |   GST_EVENT_TYPE_STICKY_MULTI   = 1 << 4 | 
| 50 | } GstEventTypeFlags; | 
| 51 |  | 
| 52 | /** | 
| 53 |  * GST_EVENT_TYPE_BOTH: (value 3) (type GstEventTypeFlags) | 
| 54 |  * | 
| 55 |  * The same thing as #GST_EVENT_TYPE_UPSTREAM | #GST_EVENT_TYPE_DOWNSTREAM. | 
| 56 |  */ | 
| 57 | #define GST_EVENT_TYPE_BOTH \ | 
| 58 |     ((GstEventTypeFlags)(GST_EVENT_TYPE_UPSTREAM | GST_EVENT_TYPE_DOWNSTREAM)) | 
| 59 |  | 
| 60 | #define GST_EVENT_NUM_SHIFT     (8) | 
| 61 |  | 
| 62 | /** | 
| 63 |  * GST_EVENT_MAKE_TYPE: | 
| 64 |  * @num: the event number to create | 
| 65 |  * @flags: the event flags | 
| 66 |  * | 
| 67 |  * when making custom event types, use this macro with the num and | 
| 68 |  * the given flags | 
| 69 |  */ | 
| 70 | #define GST_EVENT_MAKE_TYPE(num,flags) \ | 
| 71 |     (((num) << GST_EVENT_NUM_SHIFT) | (flags)) | 
| 72 |  | 
| 73 | #define _FLAG(name) GST_EVENT_TYPE_##name | 
| 74 |  | 
| 75 | /** | 
| 76 |  * GstEventType: | 
| 77 |  * @GST_EVENT_UNKNOWN: unknown event. | 
| 78 |  * @GST_EVENT_FLUSH_START: Start a flush operation. This event clears all data | 
| 79 |  *                 from the pipeline and unblock all streaming threads. | 
| 80 |  * @GST_EVENT_FLUSH_STOP: Stop a flush operation. This event resets the | 
| 81 |  *                 running-time of the pipeline. | 
| 82 |  * @GST_EVENT_SELECT_STREAMS: A request to select one or more streams (Since: 1.10) | 
| 83 |  * @GST_EVENT_STREAM_START: Event to mark the start of a new stream. Sent before any | 
| 84 |  *                 other serialized event and only sent at the start of a new stream, | 
| 85 |  *                 not after flushing seeks. | 
| 86 |  * @GST_EVENT_CAPS: #GstCaps event. Notify the pad of a new media type. | 
| 87 |  * @GST_EVENT_SEGMENT: A new media segment follows in the dataflow. The | 
| 88 |  *                 segment events contains information for clipping buffers and | 
| 89 |  *                 converting buffer timestamps to running-time and | 
| 90 |  *                 stream-time. | 
| 91 |  * @GST_EVENT_STREAM_COLLECTION: A new #GstStreamCollection is available (Since: 1.10) | 
| 92 |  * @GST_EVENT_TAG: A new set of metadata tags has been found in the stream. | 
| 93 |  * @GST_EVENT_BUFFERSIZE: Notification of buffering requirements. Currently not | 
| 94 |  *                 used yet. | 
| 95 |  * @GST_EVENT_SINK_MESSAGE: An event that sinks turn into a message. Used to | 
| 96 |  *                          send messages that should be emitted in sync with | 
| 97 |  *                          rendering. | 
| 98 |  * @GST_EVENT_STREAM_GROUP_DONE: Indicates that there is no more data for | 
| 99 |  *                 the stream group ID in the message. Sent before EOS | 
| 100 |  *                 in some instances and should be handled mostly the same. (Since: 1.10) | 
| 101 |  * @GST_EVENT_EOS: End-Of-Stream. No more data is to be expected to follow | 
| 102 |  *                 without either a STREAM_START event, or a FLUSH_STOP and a SEGMENT | 
| 103 |  *                 event. | 
| 104 |  * @GST_EVENT_SEGMENT_DONE: Marks the end of a segment playback. | 
| 105 |  * @GST_EVENT_GAP: Marks a gap in the datastream. | 
| 106 |  * @GST_EVENT_TOC: An event which indicates that a new table of contents (TOC) | 
| 107 |  *                 was found or updated. | 
| 108 |  * @GST_EVENT_PROTECTION: An event which indicates that new or updated | 
| 109 |  *                 encryption information has been found in the stream. | 
| 110 |  * @GST_EVENT_QOS: A quality message. Used to indicate to upstream elements | 
| 111 |  *                 that the downstream elements should adjust their processing | 
| 112 |  *                 rate. | 
| 113 |  * @GST_EVENT_SEEK: A request for a new playback position and rate. | 
| 114 |  * @GST_EVENT_NAVIGATION: Navigation events are usually used for communicating | 
| 115 |  *                        user requests, such as mouse or keyboard movements, | 
| 116 |  *                        to upstream elements. | 
| 117 |  * @GST_EVENT_LATENCY: Notification of new latency adjustment. Sinks will use | 
| 118 |  *                     the latency information to adjust their synchronisation. | 
| 119 |  * @GST_EVENT_STEP: A request for stepping through the media. Sinks will usually | 
| 120 |  *                  execute the step operation. | 
| 121 |  * @GST_EVENT_RECONFIGURE: A request for upstream renegotiating caps and reconfiguring. | 
| 122 |  * @GST_EVENT_TOC_SELECT: A request for a new playback position based on TOC | 
| 123 |  *                        entry's UID. | 
| 124 |  * @GST_EVENT_INSTANT_RATE_CHANGE: Notify downstream that a playback rate override | 
| 125 |  *                                 should be applied as soon as possible. (Since: 1.18) | 
| 126 |  * @GST_EVENT_INSTANT_RATE_SYNC_TIME: Sent by the pipeline to notify elements that handle the | 
| 127 |  *                                    instant-rate-change event about the running-time when | 
| 128 |  *                                    the rate multiplier should be applied (or was applied). (Since: 1.18) | 
| 129 |  * @GST_EVENT_CUSTOM_UPSTREAM: Upstream custom event | 
| 130 |  * @GST_EVENT_CUSTOM_DOWNSTREAM: Downstream custom event that travels in the | 
| 131 |  *                        data flow. | 
| 132 |  * @GST_EVENT_CUSTOM_DOWNSTREAM_OOB: Custom out-of-band downstream event. | 
| 133 |  * @GST_EVENT_CUSTOM_DOWNSTREAM_STICKY: Custom sticky downstream event. | 
| 134 |  * @GST_EVENT_CUSTOM_BOTH: Custom upstream or downstream event. | 
| 135 |  *                         In-band when travelling downstream. | 
| 136 |  * @GST_EVENT_CUSTOM_BOTH_OOB: Custom upstream or downstream out-of-band event. | 
| 137 |  * | 
| 138 |  * #GstEventType lists the standard event types that can be sent in a pipeline. | 
| 139 |  * | 
| 140 |  * The custom event types can be used for private messages between elements | 
| 141 |  * that can't be expressed using normal | 
| 142 |  * GStreamer buffer passing semantics. Custom events carry an arbitrary | 
| 143 |  * #GstStructure. | 
| 144 |  * Specific custom events are distinguished by the name of the structure. | 
| 145 |  */ | 
| 146 | /* NOTE: keep in sync with quark registration in gstevent.c */ | 
| 147 | typedef enum { | 
| 148 |   GST_EVENT_UNKNOWN               = GST_EVENT_MAKE_TYPE (0, 0), | 
| 149 |  | 
| 150 |   /* bidirectional events */ | 
| 151 |   GST_EVENT_FLUSH_START           = GST_EVENT_MAKE_TYPE (10, _FLAG(BOTH)), | 
| 152 |   GST_EVENT_FLUSH_STOP            = GST_EVENT_MAKE_TYPE (20, _FLAG(BOTH) | _FLAG(SERIALIZED)), | 
| 153 |  | 
| 154 |   /* downstream serialized events */ | 
| 155 |   GST_EVENT_STREAM_START          = GST_EVENT_MAKE_TYPE (40, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 156 |   GST_EVENT_CAPS                  = GST_EVENT_MAKE_TYPE (50, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 157 |   GST_EVENT_SEGMENT               = GST_EVENT_MAKE_TYPE (70, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 158 |   GST_EVENT_STREAM_COLLECTION     = GST_EVENT_MAKE_TYPE (75, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY) | _FLAG(STICKY_MULTI)), | 
| 159 |   GST_EVENT_TAG                   = GST_EVENT_MAKE_TYPE (80, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY) | _FLAG(STICKY_MULTI)), | 
| 160 |   GST_EVENT_BUFFERSIZE            = GST_EVENT_MAKE_TYPE (90, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 161 |   GST_EVENT_SINK_MESSAGE          = GST_EVENT_MAKE_TYPE (100, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY) | _FLAG(STICKY_MULTI)), | 
| 162 |   GST_EVENT_STREAM_GROUP_DONE     = GST_EVENT_MAKE_TYPE (105, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 163 |   GST_EVENT_EOS                   = GST_EVENT_MAKE_TYPE (110, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY)), | 
| 164 |   GST_EVENT_TOC                   = GST_EVENT_MAKE_TYPE (120, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY) | _FLAG(STICKY_MULTI)), | 
| 165 |   GST_EVENT_PROTECTION            = GST_EVENT_MAKE_TYPE (130, _FLAG (DOWNSTREAM) | _FLAG (SERIALIZED) | _FLAG (STICKY) | _FLAG (STICKY_MULTI)), | 
| 166 |  | 
| 167 |   /* non-sticky downstream serialized */ | 
| 168 |   GST_EVENT_SEGMENT_DONE          = GST_EVENT_MAKE_TYPE (150, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)), | 
| 169 |   GST_EVENT_GAP                   = GST_EVENT_MAKE_TYPE (160, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)), | 
| 170 |  | 
| 171 |   /* sticky downstream non-serialized */ | 
| 172 |   GST_EVENT_INSTANT_RATE_CHANGE   = GST_EVENT_MAKE_TYPE (180, _FLAG(DOWNSTREAM) | _FLAG(STICKY)), | 
| 173 |  | 
| 174 |   /* upstream events */ | 
| 175 |   GST_EVENT_QOS                    = GST_EVENT_MAKE_TYPE (190, _FLAG(UPSTREAM)), | 
| 176 |   GST_EVENT_SEEK                   = GST_EVENT_MAKE_TYPE (200, _FLAG(UPSTREAM)), | 
| 177 |   GST_EVENT_NAVIGATION             = GST_EVENT_MAKE_TYPE (210, _FLAG(UPSTREAM)), | 
| 178 |   GST_EVENT_LATENCY                = GST_EVENT_MAKE_TYPE (220, _FLAG(UPSTREAM)), | 
| 179 |   GST_EVENT_STEP                   = GST_EVENT_MAKE_TYPE (230, _FLAG(UPSTREAM)), | 
| 180 |   GST_EVENT_RECONFIGURE            = GST_EVENT_MAKE_TYPE (240, _FLAG(UPSTREAM)), | 
| 181 |   GST_EVENT_TOC_SELECT             = GST_EVENT_MAKE_TYPE (250, _FLAG(UPSTREAM)), | 
| 182 |   GST_EVENT_SELECT_STREAMS         = GST_EVENT_MAKE_TYPE (260, _FLAG(UPSTREAM)), | 
| 183 |   GST_EVENT_INSTANT_RATE_SYNC_TIME = GST_EVENT_MAKE_TYPE (261, _FLAG(UPSTREAM)), | 
| 184 |  | 
| 185 |   /* custom events start here */ | 
| 186 |   GST_EVENT_CUSTOM_UPSTREAM          = GST_EVENT_MAKE_TYPE (270, _FLAG(UPSTREAM)), | 
| 187 |   GST_EVENT_CUSTOM_DOWNSTREAM        = GST_EVENT_MAKE_TYPE (280, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)), | 
| 188 |   GST_EVENT_CUSTOM_DOWNSTREAM_OOB    = GST_EVENT_MAKE_TYPE (290, _FLAG(DOWNSTREAM)), | 
| 189 |   GST_EVENT_CUSTOM_DOWNSTREAM_STICKY = GST_EVENT_MAKE_TYPE (300, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED) | _FLAG(STICKY) | _FLAG(STICKY_MULTI)), | 
| 190 |   GST_EVENT_CUSTOM_BOTH              = GST_EVENT_MAKE_TYPE (310, _FLAG(BOTH) | _FLAG(SERIALIZED)), | 
| 191 |   GST_EVENT_CUSTOM_BOTH_OOB          = GST_EVENT_MAKE_TYPE (320, _FLAG(BOTH)) | 
| 192 | } GstEventType; | 
| 193 | #undef _FLAG | 
| 194 |  | 
| 195 | /** | 
| 196 |  * GstStreamFlags: | 
| 197 |  * @GST_STREAM_FLAG_NONE: This stream has no special attributes | 
| 198 |  * @GST_STREAM_FLAG_SPARSE: This stream is a sparse stream (e.g. a subtitle | 
| 199 |  *    stream), data may flow only in irregular intervals with large gaps in | 
| 200 |  *    between. | 
| 201 |  * @GST_STREAM_FLAG_SELECT: This stream should be selected by default. This | 
| 202 |  *    flag may be used by demuxers to signal that a stream should be selected | 
| 203 |  *    by default in a playback scenario. | 
| 204 |  * @GST_STREAM_FLAG_UNSELECT: This stream should not be selected by default. | 
| 205 |  *    This flag may be used by demuxers to signal that a stream should not | 
| 206 |  *    be selected by default in a playback scenario, but only if explicitly | 
| 207 |  *    selected by the user (e.g. an audio track for the hard of hearing or | 
| 208 |  *    a director's commentary track). | 
| 209 |  * | 
| 210 |  * Since: 1.2 | 
| 211 |  */ | 
| 212 | typedef enum { | 
| 213 |   GST_STREAM_FLAG_NONE, | 
| 214 |   GST_STREAM_FLAG_SPARSE       = (1 << 0), | 
| 215 |   GST_STREAM_FLAG_SELECT       = (1 << 1), | 
| 216 |   GST_STREAM_FLAG_UNSELECT     = (1 << 2) | 
| 217 | } GstStreamFlags; | 
| 218 |  | 
| 219 | #include <gst/gstminiobject.h> | 
| 220 | #include <gst/gstformat.h> | 
| 221 | #include <gst/gstobject.h> | 
| 222 | #include <gst/gstclock.h> | 
| 223 | #include <gst/gststructure.h> | 
| 224 | #include <gst/gsttaglist.h> | 
| 225 | #include <gst/gstsegment.h> | 
| 226 | #include <gst/gstmessage.h> | 
| 227 | #include <gst/gstcontext.h> | 
| 228 | #include <gst/gststreams.h> | 
| 229 | #include <gst/gsttoc.h> | 
| 230 | #include <gst/gststreamcollection.h> | 
| 231 |  | 
| 232 | G_BEGIN_DECLS | 
| 233 |  | 
| 234 | GST_API GType _gst_event_type; | 
| 235 |  | 
| 236 | #define GST_TYPE_EVENT                  (_gst_event_type) | 
| 237 | #define GST_IS_EVENT(obj)               (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_EVENT)) | 
| 238 | #define GST_EVENT_CAST(obj)             ((GstEvent *)(obj)) | 
| 239 | #define GST_EVENT(obj)                  (GST_EVENT_CAST(obj)) | 
| 240 |  | 
| 241 | /** | 
| 242 |  * GST_EVENT_TYPE: | 
| 243 |  * @event: the event to query | 
| 244 |  * | 
| 245 |  * Get the #GstEventType of the event. | 
| 246 |  */ | 
| 247 | #define GST_EVENT_TYPE(event)           (GST_EVENT_CAST(event)->type) | 
| 248 |  | 
| 249 | /** | 
| 250 |  * GST_EVENT_TYPE_NAME: | 
| 251 |  * @event: the event to query | 
| 252 |  * | 
| 253 |  * Get a constant string representation of the #GstEventType of the event. | 
| 254 |  */ | 
| 255 | #define GST_EVENT_TYPE_NAME(event)      (gst_event_type_get_name(GST_EVENT_TYPE(event))) | 
| 256 |  | 
| 257 | /** | 
| 258 |  * GST_EVENT_TIMESTAMP: | 
| 259 |  * @event: the event to query | 
| 260 |  * | 
| 261 |  * Get the #GstClockTime timestamp of the event. This is the time when the event | 
| 262 |  * was created. | 
| 263 |  */ | 
| 264 | /* FIXME 2.0: Remove the GstEvent::timestamp field */ | 
| 265 | #define GST_EVENT_TIMESTAMP(event)      (GST_EVENT_CAST(event)->timestamp) | 
| 266 |  | 
| 267 | /** | 
| 268 |  * GST_EVENT_SEQNUM: | 
| 269 |  * @event: the event to query | 
| 270 |  * | 
| 271 |  * The sequence number of @event. | 
| 272 |  */ | 
| 273 | #define GST_EVENT_SEQNUM(event)         (GST_EVENT_CAST(event)->seqnum) | 
| 274 |  | 
| 275 | /** | 
| 276 |  * GST_EVENT_IS_UPSTREAM: | 
| 277 |  * @ev: the event to query | 
| 278 |  * | 
| 279 |  * Check if an event can travel upstream. | 
| 280 |  */ | 
| 281 | #define GST_EVENT_IS_UPSTREAM(ev)       !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_UPSTREAM) | 
| 282 | /** | 
| 283 |  * GST_EVENT_IS_DOWNSTREAM: | 
| 284 |  * @ev: the event to query | 
| 285 |  * | 
| 286 |  * Check if an event can travel downstream. | 
| 287 |  */ | 
| 288 | #define GST_EVENT_IS_DOWNSTREAM(ev)     !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_DOWNSTREAM) | 
| 289 | /** | 
| 290 |  * GST_EVENT_IS_SERIALIZED: | 
| 291 |  * @ev: the event to query | 
| 292 |  * | 
| 293 |  * Check if an event is serialized with the data stream. | 
| 294 |  */ | 
| 295 | #define GST_EVENT_IS_SERIALIZED(ev)     !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_SERIALIZED) | 
| 296 | /** | 
| 297 |  * GST_EVENT_IS_STICKY: | 
| 298 |  * @ev: the event to query | 
| 299 |  * | 
| 300 |  * Check if an event is sticky on the pads. | 
| 301 |  */ | 
| 302 | #define GST_EVENT_IS_STICKY(ev)     !!(GST_EVENT_TYPE (ev) & GST_EVENT_TYPE_STICKY) | 
| 303 |  | 
| 304 | /** | 
| 305 |  * gst_event_is_writable: | 
| 306 |  * @ev: a #GstEvent | 
| 307 |  * | 
| 308 |  * Tests if you can safely write data into a event's structure or validly | 
| 309 |  * modify the seqnum and timestamp field. | 
| 310 |  */ | 
| 311 | #define         gst_event_is_writable(ev)     gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (ev)) | 
| 312 | /** | 
| 313 |  * gst_event_make_writable: | 
| 314 |  * @ev: (transfer full): a #GstEvent | 
| 315 |  * | 
| 316 |  * Makes a writable event from the given event. If the source event is | 
| 317 |  * already writable, this will simply return the same event. A copy will | 
| 318 |  * otherwise be made using gst_event_copy(). | 
| 319 |  * | 
| 320 |  * Returns: (transfer full): a writable event which may or may not be the | 
| 321 |  *     same as @ev | 
| 322 |  */ | 
| 323 | #define         gst_event_make_writable(ev)   GST_EVENT_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (ev))) | 
| 324 |  | 
| 325 | #ifndef GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS | 
| 326 | static inline gboolean | 
| 327 | gst_event_replace(GstEvent** old_event, GstEvent* new_event) | 
| 328 | { | 
| 329 |   return gst_mini_object_replace (olddata: (GstMiniObject **) old_event, newdata: (GstMiniObject *) new_event); | 
| 330 | } | 
| 331 |  | 
| 332 | static inline GstEvent * | 
| 333 | gst_event_steal (GstEvent **old_event) | 
| 334 | { | 
| 335 |   return GST_EVENT_CAST (gst_mini_object_steal ((GstMiniObject **) old_event)); | 
| 336 | } | 
| 337 |  | 
| 338 | static inline gboolean | 
| 339 | gst_event_take (GstEvent **old_event, GstEvent *new_event) | 
| 340 | { | 
| 341 |   return gst_mini_object_take (olddata: (GstMiniObject **) old_event, newdata: (GstMiniObject *) new_event); | 
| 342 | } | 
| 343 | #else /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */ | 
| 344 | GST_API | 
| 345 | gboolean    gst_event_replace (GstEvent ** old_event, | 
| 346 |                                GstEvent * new_event); | 
| 347 |  | 
| 348 | GST_API | 
| 349 | GstEvent *  gst_event_steal   (GstEvent ** old_event); | 
| 350 |  | 
| 351 | GST_API | 
| 352 | gboolean    gst_event_take    (GstEvent ** old_event, | 
| 353 |                                GstEvent *new_event); | 
| 354 | #endif /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */ | 
| 355 |  | 
| 356 | /** | 
| 357 |  * GstQOSType: | 
| 358 |  * @GST_QOS_TYPE_OVERFLOW: The QoS event type that is produced when upstream | 
| 359 |  *    elements are producing data too quickly and the element can't keep up | 
| 360 |  *    processing the data. Upstream should reduce their production rate. This | 
| 361 |  *    type is also used when buffers arrive early or in time. | 
| 362 |  * @GST_QOS_TYPE_UNDERFLOW: The QoS event type that is produced when upstream | 
| 363 |  *    elements are producing data too slowly and need to speed up their | 
| 364 |  *    production rate. | 
| 365 |  * @GST_QOS_TYPE_THROTTLE: The QoS event type that is produced when the | 
| 366 |  *    application enabled throttling to limit the data rate. | 
| 367 |  * | 
| 368 |  * The different types of QoS events that can be given to the | 
| 369 |  * gst_event_new_qos() method. | 
| 370 |  */ | 
| 371 | typedef enum { | 
| 372 |   GST_QOS_TYPE_OVERFLOW        = 0, | 
| 373 |   GST_QOS_TYPE_UNDERFLOW       = 1, | 
| 374 |   GST_QOS_TYPE_THROTTLE        = 2 | 
| 375 | } GstQOSType; | 
| 376 |  | 
| 377 | /** | 
| 378 |  * GstGapFlags: | 
| 379 |  * @GST_GAP_FLAG_MISSING_DATA: The #GST_EVENT_GAP signals missing data, | 
| 380 |  *    for example because of packet loss. | 
| 381 |  * | 
| 382 |  * The different flags that can be set on #GST_EVENT_GAP events. See | 
| 383 |  * gst_event_set_gap_flags() for details. | 
| 384 |  * | 
| 385 |  * Since: 1.20 | 
| 386 |  */ | 
| 387 | typedef enum { | 
| 388 |   GST_GAP_FLAG_MISSING_DATA = (1<<0), | 
| 389 | } GstGapFlags; | 
| 390 |  | 
| 391 | /** | 
| 392 |  * GstEvent: | 
| 393 |  * @mini_object: the parent structure | 
| 394 |  * @type: the #GstEventType of the event | 
| 395 |  * @timestamp: the timestamp of the event | 
| 396 |  * @seqnum: the sequence number of the event | 
| 397 |  * | 
| 398 |  * A #GstEvent. | 
| 399 |  */ | 
| 400 | struct _GstEvent { | 
| 401 |   GstMiniObject mini_object; | 
| 402 |  | 
| 403 |   /*< public >*/ /* with COW */ | 
| 404 |   GstEventType  type; | 
| 405 |   /* FIXME 2.0: Remove the GstEvent::timestamp field */ | 
| 406 |   guint64       timestamp; | 
| 407 |   guint32       seqnum; | 
| 408 | }; | 
| 409 |  | 
| 410 | GST_API | 
| 411 | const gchar*    gst_event_type_get_name         (GstEventType type); | 
| 412 |  | 
| 413 | GST_API | 
| 414 | GQuark          gst_event_type_to_quark         (GstEventType type); | 
| 415 |  | 
| 416 | GST_API | 
| 417 | GstEventTypeFlags | 
| 418 |                 gst_event_type_get_flags        (GstEventType type); | 
| 419 |  | 
| 420 | #ifndef GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS | 
| 421 | /* refcounting */ | 
| 422 | static inline GstEvent * | 
| 423 | gst_event_ref (GstEvent * event) | 
| 424 | { | 
| 425 |   return (GstEvent *) gst_mini_object_ref (GST_MINI_OBJECT_CAST (event)); | 
| 426 | } | 
| 427 |  | 
| 428 | static inline void | 
| 429 | gst_event_unref (GstEvent * event) | 
| 430 | { | 
| 431 |   gst_mini_object_unref (GST_MINI_OBJECT_CAST (event)); | 
| 432 | } | 
| 433 |  | 
| 434 | static inline void | 
| 435 | gst_clear_event (GstEvent ** event_ptr) | 
| 436 | { | 
| 437 |   gst_clear_mini_object ((GstMiniObject **) event_ptr); | 
| 438 | } | 
| 439 |  | 
| 440 | /* copy event */ | 
| 441 | static inline GstEvent * | 
| 442 | gst_event_copy (const GstEvent * event) | 
| 443 | { | 
| 444 |   return GST_EVENT_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (event))); | 
| 445 | } | 
| 446 | #else /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */ | 
| 447 | GST_API | 
| 448 | GstEvent *      gst_event_ref                   (GstEvent * event); | 
| 449 |  | 
| 450 | GST_API | 
| 451 | void            gst_event_unref                 (GstEvent * event); | 
| 452 |  | 
| 453 | GST_API | 
| 454 | void            gst_clear_event                 (GstEvent ** event_ptr); | 
| 455 |  | 
| 456 | GST_API | 
| 457 | GstEvent *      gst_event_copy                  (const GstEvent * event); | 
| 458 | #endif /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */ | 
| 459 |  | 
| 460 | GST_API | 
| 461 | GType           gst_event_get_type              (void); | 
| 462 |  | 
| 463 | /* custom event */ | 
| 464 |  | 
| 465 | GST_API | 
| 466 | GstEvent*       gst_event_new_custom            (GstEventType type, GstStructure *structure) G_GNUC_MALLOC; | 
| 467 |  | 
| 468 | GST_API | 
| 469 | const GstStructure * | 
| 470 |                 gst_event_get_structure         (GstEvent *event); | 
| 471 |  | 
| 472 | GST_API | 
| 473 | GstStructure *  gst_event_writable_structure    (GstEvent *event); | 
| 474 |  | 
| 475 | GST_API | 
| 476 | gboolean        gst_event_has_name              (GstEvent *event, const gchar *name); | 
| 477 |  | 
| 478 | GST_API | 
| 479 | gboolean        gst_event_has_name_id           (GstEvent *event, GQuark name); | 
| 480 |  | 
| 481 | /* identifiers for events and messages */ | 
| 482 |  | 
| 483 | GST_API | 
| 484 | guint32         gst_event_get_seqnum            (GstEvent *event); | 
| 485 |  | 
| 486 | GST_API | 
| 487 | void            gst_event_set_seqnum            (GstEvent *event, guint32 seqnum); | 
| 488 |  | 
| 489 | /* accumulated pad offsets for the event */ | 
| 490 |  | 
| 491 | GST_API | 
| 492 | gint64          gst_event_get_running_time_offset (GstEvent *event); | 
| 493 |  | 
| 494 | GST_API | 
| 495 | void            gst_event_set_running_time_offset (GstEvent *event, gint64 offset); | 
| 496 |  | 
| 497 | /* Stream start event */ | 
| 498 |  | 
| 499 | GST_API | 
| 500 | GstEvent *      gst_event_new_stream_start      (const gchar *stream_id) G_GNUC_MALLOC; | 
| 501 |  | 
| 502 | GST_API | 
| 503 | void            gst_event_parse_stream_start    (GstEvent *event, const gchar **stream_id); | 
| 504 |  | 
| 505 | GST_API | 
| 506 | void            gst_event_set_stream		(GstEvent *event, GstStream *stream); | 
| 507 |  | 
| 508 | GST_API | 
| 509 | void            gst_event_parse_stream		(GstEvent *event, GstStream **stream); | 
| 510 |  | 
| 511 | GST_API | 
| 512 | void            gst_event_set_stream_flags      (GstEvent *event, GstStreamFlags flags); | 
| 513 |  | 
| 514 | GST_API | 
| 515 | void            gst_event_parse_stream_flags    (GstEvent *event, GstStreamFlags *flags); | 
| 516 |  | 
| 517 | GST_API | 
| 518 | void            gst_event_set_group_id          (GstEvent *event, guint group_id); | 
| 519 |  | 
| 520 | GST_API | 
| 521 | gboolean        gst_event_parse_group_id        (GstEvent *event, guint *group_id); | 
| 522 |  | 
| 523 | /* flush events */ | 
| 524 |  | 
| 525 | GST_API | 
| 526 | GstEvent *      gst_event_new_flush_start       (void) G_GNUC_MALLOC; | 
| 527 |  | 
| 528 | GST_API | 
| 529 | GstEvent *      gst_event_new_flush_stop        (gboolean reset_time) G_GNUC_MALLOC; | 
| 530 |  | 
| 531 | GST_API | 
| 532 | void            gst_event_parse_flush_stop      (GstEvent *event, gboolean *reset_time); | 
| 533 |  | 
| 534 | /* Stream collection event */ | 
| 535 |  | 
| 536 | GST_API | 
| 537 | GstEvent *      gst_event_new_stream_collection   (GstStreamCollection *collection) G_GNUC_MALLOC; | 
| 538 |  | 
| 539 | GST_API | 
| 540 | void            gst_event_parse_stream_collection (GstEvent *event, GstStreamCollection **collection); | 
| 541 |  | 
| 542 | /* select streams event */ | 
| 543 |  | 
| 544 | GST_API | 
| 545 | GstEvent *      gst_event_new_select_streams    (GList *streams); | 
| 546 |  | 
| 547 | GST_API | 
| 548 | void            gst_event_parse_select_streams  (GstEvent *event, GList **streams); | 
| 549 |  | 
| 550 | /* stream-group-done event */ | 
| 551 |  | 
| 552 | GST_API | 
| 553 | GstEvent *      gst_event_new_stream_group_done (guint group_id) G_GNUC_MALLOC; | 
| 554 |  | 
| 555 | GST_API | 
| 556 | void            gst_event_parse_stream_group_done (GstEvent *event, guint *group_id); | 
| 557 |  | 
| 558 | /* EOS event */ | 
| 559 |  | 
| 560 | GST_API | 
| 561 | GstEvent *      gst_event_new_eos               (void) G_GNUC_MALLOC; | 
| 562 |  | 
| 563 | /* GAP event */ | 
| 564 |  | 
| 565 | GST_API | 
| 566 | GstEvent *      gst_event_new_gap               (GstClockTime   timestamp, | 
| 567 |                                                  GstClockTime   duration) G_GNUC_MALLOC; | 
| 568 | GST_API | 
| 569 | void            gst_event_parse_gap             (GstEvent     * event, | 
| 570 |                                                  GstClockTime * timestamp, | 
| 571 |                                                  GstClockTime * duration); | 
| 572 |  | 
| 573 | GST_API | 
| 574 | void            gst_event_set_gap_flags           (GstEvent    * event, | 
| 575 |                                                    GstGapFlags   flags); | 
| 576 |  | 
| 577 | GST_API | 
| 578 | void            gst_event_parse_gap_flags         (GstEvent    * event, | 
| 579 |                                                    GstGapFlags * flags); | 
| 580 |  | 
| 581 | /* Caps events */ | 
| 582 |  | 
| 583 | GST_API | 
| 584 | GstEvent *      gst_event_new_caps              (GstCaps *caps) G_GNUC_MALLOC; | 
| 585 |  | 
| 586 | GST_API | 
| 587 | void            gst_event_parse_caps            (GstEvent *event, GstCaps **caps); | 
| 588 |  | 
| 589 | /* segment event */ | 
| 590 |  | 
| 591 | GST_API | 
| 592 | GstEvent*       gst_event_new_segment           (const GstSegment *segment) G_GNUC_MALLOC; | 
| 593 |  | 
| 594 | GST_API | 
| 595 | void            gst_event_parse_segment         (GstEvent *event, const GstSegment **segment); | 
| 596 |  | 
| 597 | GST_API | 
| 598 | void            gst_event_copy_segment          (GstEvent *event, GstSegment *segment); | 
| 599 |  | 
| 600 | /* tag event */ | 
| 601 |  | 
| 602 | GST_API | 
| 603 | GstEvent*       gst_event_new_tag               (GstTagList *taglist) G_GNUC_MALLOC; | 
| 604 |  | 
| 605 | GST_API | 
| 606 | void            gst_event_parse_tag             (GstEvent *event, GstTagList **taglist); | 
| 607 |  | 
| 608 | /* TOC event */ | 
| 609 |  | 
| 610 | GST_API | 
| 611 | GstEvent*      gst_event_new_toc                (GstToc *toc, gboolean updated); | 
| 612 |  | 
| 613 | GST_API | 
| 614 | void           gst_event_parse_toc              (GstEvent *event, GstToc **toc, gboolean *updated); | 
| 615 |  | 
| 616 | /* Protection event */ | 
| 617 |  | 
| 618 | GST_API | 
| 619 | GstEvent *     gst_event_new_protection         (const gchar * system_id, GstBuffer * data, const gchar * origin); | 
| 620 |  | 
| 621 | GST_API | 
| 622 | void           gst_event_parse_protection       (GstEvent * event, const gchar ** system_id, | 
| 623 |                                                  GstBuffer ** data, const gchar ** origin); | 
| 624 |  | 
| 625 | /* buffer */ | 
| 626 |  | 
| 627 | GST_API | 
| 628 | GstEvent *      gst_event_new_buffer_size       (GstFormat format, gint64 minsize, gint64 maxsize, | 
| 629 |                                                  gboolean async) G_GNUC_MALLOC; | 
| 630 | GST_API | 
| 631 | void            gst_event_parse_buffer_size     (GstEvent *event, GstFormat *format, gint64 *minsize, | 
| 632 |                                                  gint64 *maxsize, gboolean *async); | 
| 633 |  | 
| 634 | /* sink message */ | 
| 635 |  | 
| 636 | GST_API | 
| 637 | GstEvent*       gst_event_new_sink_message      (const gchar *name, GstMessage *msg) G_GNUC_MALLOC; | 
| 638 |  | 
| 639 | GST_API | 
| 640 | void            gst_event_parse_sink_message    (GstEvent *event, GstMessage **msg); | 
| 641 |  | 
| 642 | /* QOS events */ | 
| 643 |  | 
| 644 | GST_API | 
| 645 | GstEvent*       gst_event_new_qos               (GstQOSType type, gdouble proportion, | 
| 646 |                                                  GstClockTimeDiff diff, GstClockTime timestamp) G_GNUC_MALLOC; | 
| 647 | GST_API | 
| 648 | void            gst_event_parse_qos             (GstEvent *event, GstQOSType *type, | 
| 649 |                                                  gdouble *proportion, GstClockTimeDiff *diff, | 
| 650 |                                                  GstClockTime *timestamp); | 
| 651 | /* seek event */ | 
| 652 |  | 
| 653 | GST_API | 
| 654 | GstEvent*       gst_event_new_seek              (gdouble rate, GstFormat format, GstSeekFlags flags, | 
| 655 |                                                  GstSeekType start_type, gint64 start, | 
| 656 |                                                  GstSeekType stop_type, gint64 stop) G_GNUC_MALLOC; | 
| 657 | GST_API | 
| 658 | void            gst_event_parse_seek            (GstEvent *event, gdouble *rate, GstFormat *format, | 
| 659 |                                                  GstSeekFlags *flags, | 
| 660 |                                                  GstSeekType *start_type, gint64 *start, | 
| 661 |                                                  GstSeekType *stop_type, gint64 *stop); | 
| 662 |  | 
| 663 | GST_API | 
| 664 | void            gst_event_set_seek_trickmode_interval (GstEvent *event, GstClockTime interval); | 
| 665 |  | 
| 666 | GST_API | 
| 667 | void            gst_event_parse_seek_trickmode_interval (GstEvent *event, GstClockTime *interval); | 
| 668 |  | 
| 669 | /* navigation event */ | 
| 670 |  | 
| 671 | GST_API | 
| 672 | GstEvent*       gst_event_new_navigation        (GstStructure *structure) G_GNUC_MALLOC; | 
| 673 |  | 
| 674 | /* latency event */ | 
| 675 |  | 
| 676 | GST_API | 
| 677 | GstEvent*       gst_event_new_latency           (GstClockTime latency) G_GNUC_MALLOC; | 
| 678 |  | 
| 679 | GST_API | 
| 680 | void            gst_event_parse_latency         (GstEvent *event, GstClockTime *latency); | 
| 681 |  | 
| 682 | /* step event */ | 
| 683 |  | 
| 684 | GST_API | 
| 685 | GstEvent*       gst_event_new_step              (GstFormat format, guint64 amount, gdouble rate, | 
| 686 |                                                  gboolean flush, gboolean intermediate) G_GNUC_MALLOC; | 
| 687 | GST_API | 
| 688 | void            gst_event_parse_step            (GstEvent *event, GstFormat *format, guint64 *amount, | 
| 689 |                                                  gdouble *rate, gboolean *flush, gboolean *intermediate); | 
| 690 |  | 
| 691 | /* renegotiate event */ | 
| 692 |  | 
| 693 | GST_API | 
| 694 | GstEvent*       gst_event_new_reconfigure       (void) G_GNUC_MALLOC; | 
| 695 |  | 
| 696 | /* TOC select event */ | 
| 697 |  | 
| 698 | GST_API | 
| 699 | GstEvent*       gst_event_new_toc_select        (const gchar *uid) G_GNUC_MALLOC; | 
| 700 |  | 
| 701 | GST_API | 
| 702 | void            gst_event_parse_toc_select      (GstEvent *event, gchar **uid); | 
| 703 |  | 
| 704 | /* segment-done event */ | 
| 705 |  | 
| 706 | GST_API | 
| 707 | GstEvent*       gst_event_new_segment_done      (GstFormat format, gint64 position) G_GNUC_MALLOC; | 
| 708 |  | 
| 709 | GST_API | 
| 710 | void            gst_event_parse_segment_done    (GstEvent *event, GstFormat *format, gint64 *position); | 
| 711 |  | 
| 712 | /* instant-rate-change event */ | 
| 713 |  | 
| 714 | GST_API | 
| 715 | GstEvent *      gst_event_new_instant_rate_change   (gdouble rate_multiplier, GstSegmentFlags new_flags) G_GNUC_MALLOC; | 
| 716 |  | 
| 717 | GST_API | 
| 718 | void            gst_event_parse_instant_rate_change (GstEvent *event, | 
| 719 |                                                      gdouble  *rate_multiplier, GstSegmentFlags *new_flags); | 
| 720 |  | 
| 721 | /* instant-rate-change-sync-time event */ | 
| 722 |  | 
| 723 | GST_API | 
| 724 | GstEvent *      gst_event_new_instant_rate_sync_time   (gdouble      rate_multiplier, | 
| 725 |                                                         GstClockTime running_time, | 
| 726 |                                                         GstClockTime upstream_running_time) G_GNUC_MALLOC; | 
| 727 |  | 
| 728 | GST_API | 
| 729 | void            gst_event_parse_instant_rate_sync_time (GstEvent     *event, | 
| 730 |                                                         gdouble      *rate_multiplier, | 
| 731 |                                                         GstClockTime *running_time, | 
| 732 |                                                         GstClockTime *upstream_running_time); | 
| 733 |  | 
| 734 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstEvent, gst_event_unref) | 
| 735 |  | 
| 736 | G_END_DECLS | 
| 737 |  | 
| 738 | #endif /* __GST_EVENT_H__ */ | 
| 739 |  |