gstfunnel: avoid access of freed pad
[platform/upstream/gstreamer.git] / gst / gstsegment.h
index 43f3f17..9d3a8d1 100644 (file)
@@ -34,10 +34,6 @@ typedef struct _GstSegment GstSegment;
 /**
  * GstSeekType:
  * @GST_SEEK_TYPE_NONE: no change in position is required
- * @GST_SEEK_TYPE_CUR: change relative to currently configured segment. This
- *    can't be used to seek relative to the current playback position - do a
- *    position query, calculate the desired position and then do an absolute
- *    position seek instead if that's what you want to do.
  * @GST_SEEK_TYPE_SET: absolute position is requested
  * @GST_SEEK_TYPE_END: relative position to duration is requested
  *
@@ -47,9 +43,8 @@ typedef struct _GstSegment GstSegment;
 typedef enum {
   /* one of these */
   GST_SEEK_TYPE_NONE            = 0,
-  GST_SEEK_TYPE_CUR             = 1,
-  GST_SEEK_TYPE_SET             = 2,
-  GST_SEEK_TYPE_END             = 3
+  GST_SEEK_TYPE_SET             = 1,
+  GST_SEEK_TYPE_END             = 2
 } GstSeekType;
 
 /**
@@ -64,6 +59,17 @@ typedef enum {
  * @GST_SEEK_FLAG_SKIP: when doing fast foward or fast reverse playback, allow
  *                     elements to skip frames instead of generating all
  *                     frames. Since 0.10.22.
+ * @GST_SEEK_FLAG_SNAP_BEFORE: go to a location before the requested position,
+ *                     if KEY_UNIT this means the keyframe at or before the
+ *                     requested position the one at or before the seek target.
+ *                     Since 0.10.37.
+ * @GST_SEEK_FLAG_SNAP_AFTER: go to a location after the requested position,
+ *                     if KEY_UNIT this means the keyframe at of after the
+ *                     requested position. Since 0.10.37.
+ * @GST_SEEK_FLAG_SNAP_NEAREST: go to a position near the requested position,
+ *                     if KEY_UNIT this means the keyframe closest to the
+ *                     requested position, if both keyframes are at an equal
+ *                     distance, behaves like SNAP_BEFORE. Since 0.10.37.
  *
  * Flags to be used with gst_element_seek() or gst_event_new_seek(). All flags
  * can be used together.
@@ -79,7 +85,7 @@ typedef enum {
  * no EOS will be emmited by the element that performed the seek, but a
  * #GST_MESSAGE_SEGMENT_DONE message will be posted on the bus by the element.
  * When this message is posted, it is possible to send a new seek event to
- * continue playback. With this seek method it is possible to perform seemless
+ * continue playback. With this seek method it is possible to perform seamless
  * looping or simple linear editing.
  *
  * When doing fast forward (rate > 1.0) or fast reverse (rate < -1.0) trickmode
@@ -87,6 +93,16 @@ typedef enum {
  * and demuxers to adjust the playback rate by skipping frames. This can improve
  * performance and decrease CPU usage because not all frames need to be decoded.
  *
+ * The @GST_SEEK_FLAG_SNAP_BEFORE flag can be used to snap to the previous
+ * relevant location, and the @GST_SEEK_FLAG_SNAP_AFTER flag can be used to
+ * select the next relevant location. If KEY_UNIT is specified, the relevant
+ * location is a keyframe. If both flags are specified, the nearest of these
+ * locations will be selected. If none are specified, the implementation is
+ * free to select whichever it wants.
+ * The before and after here are in running time, so when playing backwards,
+ * the next location refers to the one that will played in next, and not the
+ * one that is located after in the actual source stream.
+ *
  * Also see part-seeking.txt in the GStreamer design documentation for more
  * details on the meaning of these flags and the behaviour expected of
  * elements that handle them.
@@ -97,7 +113,11 @@ typedef enum {
   GST_SEEK_FLAG_ACCURATE        = (1 << 1),
   GST_SEEK_FLAG_KEY_UNIT        = (1 << 2),
   GST_SEEK_FLAG_SEGMENT         = (1 << 3),
-  GST_SEEK_FLAG_SKIP            = (1 << 4)
+  GST_SEEK_FLAG_SKIP            = (1 << 4),
+  GST_SEEK_FLAG_SNAP_BEFORE     = (1 << 5),
+  GST_SEEK_FLAG_SNAP_AFTER      = (1 << 6),
+  GST_SEEK_FLAG_SNAP_NEAREST    = GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER,
+  /* Careful to restart next flag with 1<<7 here */
 } GstSeekFlags;
 
 /**
@@ -126,6 +146,8 @@ typedef enum {
  * @start: the start of the segment
  * @stop: the stop of the segment
  * @time: the stream time of the segment
+ * @position: the position in the segment
+ * @duration: the duration of the segment
  *
  * A helper structure that holds the configured region of
  * interest in a media file.
@@ -145,12 +167,15 @@ struct _GstSegment {
 
   guint64         position;
   guint64         duration;
+
+  /* < private > */
+  gpointer        _gst_reserved[GST_PADDING];
 };
 
 GType        gst_segment_get_type            (void);
 
-GstSegment * gst_segment_new                 (void);
-GstSegment * gst_segment_copy                (const GstSegment *segment);
+GstSegment * gst_segment_new                 (void) G_GNUC_MALLOC;
+GstSegment * gst_segment_copy                (const GstSegment *segment) G_GNUC_MALLOC;
 void         gst_segment_copy_into           (const GstSegment *src, GstSegment *dest);
 void         gst_segment_free                (GstSegment *segment);