Create a new SEGMENT event for segment
.
The segment event can only travel downstream synchronized with the buffer flow and contains timing information and playback properties for the buffers that will follow.
The segment event marks the range of buffers to be processed. All data not within the segment range is not to be processed. This can be
used intelligently by plugins to apply more efficient methods of skipping unneeded data. The valid range is expressed with the start
and stop
values.
The time value of the segment is used in conjunction with the start value to convert the buffer timestamps into the stream time. This is
usually done in sinks to report the current stream_time. time
represents the stream_time of a buffer carrying a timestamp of
start
. time
cannot be -1.
start
cannot be -1, stop
can be -1. If there is a valid stop
given, it must be greater or equal
the start
, including when the indicated playback rate
is < 0.
The applied_rate
value provides information about any rate adjustment that has already been made to the timestamps and
content on the buffers of the stream. (rate
* applied_rate
) should always equal the rate that has been requested
for playback. For example, if an element has an input segment with intended playback rate
of 2.0 and applied_rate of 1.0, it
can adjust incoming timestamps and buffer content by half and output a segment event with rate
of 1.0 and applied_rate
of 2.0
After a segment event, the buffer stream time is calculated with:
time + (TIMESTAMP(buf) - start) * ABS (rate * applied_rate)
segment |
a Segment |
the new SEGMENT event. |