This helper structure holds the relevant values for tracking the region of interest in a media file, called a segment.
The structure can be used for two purposes:
* performing seeks (handling seek events) * tracking playback regions (handling newsegment events)
The segment is usually configured by the application with a seek event which is propagated upstream and eventually handled by an element
that performs the seek.
The configured segment is then propagated back downstream with a newsegment event. This information is then used to clip media to the
segment boundaries.
A segment structure is initialized with init, which takes a
Format that will be used as the format of the segment values. The segment will be configured
with a start value of 0 and a stop/duration of -1, which is undefined. The default rate and applied_rate is 1.0.
The public duration field contains the duration of the segment. When using the segment for seeking, the start and time members should
normally be left to their default 0 value. The stop position is left to -1 unless explicitly configured to a different value after a seek
event.
The current position in the segment should be set by changing the position member in the structure.
For elements that perform seeks, the current segment should be updated with the do_seek
and the values from the seek event. This method will update all the segment fields. The position field will contain the new playback
position. If the start_type was different from GST_SEEK_TYPE_NONE, playback continues from the position position, possibly with updated
flags or rate.
For elements that want to use Segment to track the playback region, update the segment fields with the
information from the newsegment event. The clip method can be used to check and clip
the media data to the segment boundaries.
For elements that want to synchronize to the pipeline clock, to_running_time
can be used to convert a timestamp to a value that can be used to synchronize to the clock. This function takes into account the base
as well as any rate or applied_rate conversions.
For elements that need to perform operations on media data in stream_time,
to_stream_time can be used to convert a timestamp and the segment info to stream time (which is always between 0 and the duration of
the stream).
- public bool clip (Format format, uint64 start, uint64 stop, out uint64 clip_start, out uint64 clip_stop)
Clip the given start
and stop
values to the
segment boundaries given in this.
- public Segment copy ()
Create a copy of given this.
- public void copy_into (Segment dest)
Copy the contents of this into
dest
.
- public bool do_seek (double rate, Format format, SeekFlags flags, SeekType start_type, uint64 start, SeekType stop_type, uint64 stop, out bool update)
Update the segment structure with the field values of a seek event
(see Event.seek).
- public void free ()
Free the allocated segment this.
- public void init (Format format)
The start/position fields are set to 0 and the stop/duration fields
are set to -1 (unknown).
- public bool is_equal (Segment s1)
Checks for two segments being equal.
- public bool offset_running_time (Format format, int64 offset)
Adjust the values in this so that
offset
is applied to all future running-time calculations.
- public uint64 position_from_running_time (Format format, uint64 running_time)
Convert running_time
into a position in the segment so
that to_running_time with that position returns running_time
.
- public int position_from_running_time_full (Format format, uint64 running_time, out uint64 position)
Translate running_time
to the segment position using the
currently configured segment.
- public uint64 position_from_stream_time (Format format, uint64 stream_time)
Convert stream_time
into a position in the segment so
that to_stream_time with that position returns stream_time
.
- public int position_from_stream_time_full (Format format, uint64 stream_time, out uint64 position)
Translate stream_time
to the segment position using the
currently configured segment.
- public bool set_running_time (Format format, uint64 running_time)
Adjust the start/stop and base values of
this such that the next valid buffer will be one with running_time
.
- public uint64 to_position (Format format, uint64 running_time)
Convert running_time
into a position in the segment so
that to_running_time with that position returns running_time
.
- public uint64 to_running_time (Format format, uint64 position)
Translate position
to the total running time using the
currently configured segment.
- public int to_running_time_full (Format format, uint64 position, out uint64 running_time)
Translate position
to the total running time using the
currently configured segment.
- public uint64 to_stream_time (Format format, uint64 position)
Translate position
to stream time using the currently
configured segment.
- public int to_stream_time_full (Format format, uint64 position, out uint64 stream_time)
Translate position
to the total stream time using the
currently configured segment.