| Streams |
| ------- |
| |
| This document describes the objects that are passed from element to |
| element in the streaming thread. |
| |
| |
| Stream objects |
| ~~~~~~~~~~~~~~ |
| |
| The following objects are to be expected in the streaming thread: |
| |
| - events |
| - STREAM_START (START) |
| - SEGMENT (SEGMENT) |
| - EOS * (EOS) |
| - TAG (T) |
| - buffers * (B) |
| |
| Objects marked with * need to be synchronised to the clock in sinks |
| and live sources. |
| |
| |
| Typical stream |
| ~~~~~~~~~~~~~~ |
| |
| A typical stream starts with a stream start event that marks the |
| start of the stream, followed by a segment event that marks the |
| buffer timestamp range. After that buffers are sent one after the |
| other. After the last buffer an EOS marks the end of the stream. No |
| more buffers are to be processed after the EOS event. |
| |
| +-----+-------+ +-++-+ +-+ +---+ |
| |START|SEGMENT| |B||B| ... |B| |EOS| |
| +-----+-------+ +-++-+ +-+ +---+ |
| |
| 1) STREAM_START |
| - marks the start of a stream; unlike the SEGMENT event, there |
| will be no STREAM_START event after flushing seeks. |
| |
| 2) SEGMENT, rate, start/stop, time |
| - marks valid buffer timestamp range (start, stop) |
| - marks stream_time of buffers (time). This is the stream time of buffers |
| with a timestamp of S.start. |
| - marks playback rate (rate). This is the required playback rate. |
| - marks applied rate (applied_rate). This is the already applied playback |
| rate. (See also part-trickmodes.txt) |
| - marks running_time of buffers. This is the time used to synchronize |
| against the clock. |
| |
| 3) N buffers |
| - displayable buffers are between start/stop of the SEGMENT (S). Buffers |
| outside the segment range should be dropped or clipped. |
| |
| - running_time: |
| |
| if (S.rate > 0.0) |
| running_time = (B.timestamp - S.start) / ABS (S.rate) + S.base |
| else |
| running_time = (S.stop - B.timestamp) / ABS (S.rate) + S.base |
| |
| * a monotonically increasing value that can be used to synchronize |
| against the clock (See also part-synchronisation.txt). |
| |
| - stream_time: |
| |
| stream_time = (B.timestamp - S.start) * ABS (S.applied_rate) + S.time |
| |
| * current position in stream between 0 and duration. |
| |
| 4) EOS |
| - marks the end of data, nothing is to be expected after EOS, elements |
| should refuse more data and return GST_FLOW_EOS. A FLUSH_STOP |
| event clears the EOS state of an element. |
| |
| |
| Elements |
| ~~~~~~~~ |
| |
| These events are generated typically either by the GstBaseSrc class for |
| sources operating in push mode, or by a parser/demuxer operating in pull-mode |
| and pushing parsed/demuxed data downstream. |