/**
* 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
*
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;
/**
* @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.
* 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
* 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.
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;
/**
+ * GstSegmentFlags:
+ * @GST_SEGMENT_FLAG_NONE: no flags
+ * @GST_SEGMENT_FLAG_RESET: reset the pipeline running_time to the segment
+ * running_time
+ * @GST_SEGMENT_FLAG_SKIP: perform skip playback
+ *
+ * Flags for the GstSegment structure. Currently mapped to the corresponding
+ * values of the seek flags.
+ */
+typedef enum {
+ GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE,
+ GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH,
+ GST_SEGMENT_FLAG_SKIP = GST_SEEK_FLAG_SKIP
+} GstSegmentFlags;
+
+/**
* GstSegment:
* @flags: flags for this segment
* @rate: the rate of the segment
* @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.
*/
struct _GstSegment {
/*< public >*/
- GstSeekFlags flags;
+ GstSegmentFlags flags;
gdouble rate;
gdouble applied_rate;
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);