Frame step
----------

This document outlines the details of the frame stepping functionality in
GStreamer.

The stepping functionality operates on the current playback segment, position
and rate as it was configured with a regular seek event. In contrast to the seek
event, it operates very closely to the sink and thus has a very low latency and
is not slowed down by queues and does not actually perform any seeking logic.
For this reason we want to include a new API instead of reusing the seek API.

The following requirements are needed:

 - The ability to walk forwards and backwards in the stream.
 - Arbitrary increments in any supported format (time, frames, bytes ...)
 - High speed, minimal overhead. This mechanism is not more expensive than
   simple playback. 
 - switching between forwards and backwards stepping should be fast.
 - Maintain synchronisation between streams.
 - Get feedback of the amount of skipped data.
 - Ability to play a certain amount of data at an arbitrary speed.

We want a system where we can step frames in PAUSED as well as play short
segments of data in PLAYING.


Use Cases
~~~~~~~~~

 * frame stepping in video only pipeline in PAUSED

    .-----.    .-------.              .------.    .-------.
    | src |    | demux |    .-----.   | vdec |    | vsink |
    |    src->sink    src1->|queue|->sink   src->sink     |
    '-----'    '-------'    '-----'   '------'    '-------'

    - app sets the pipeline to PAUSED to block on the preroll picture
    - app seeks to required position in the stream. This can be done with a
      positive or negative rate depending on the required frame stepping
      direction.
    - app steps frames (in GST_FORMAT_DEFAULT or GST_FORMAT_BUFFER). The
      pipeline loses its PAUSED state until the required number of frames have
      been skipped, it then prerolls again. This skipping is purely done in
      the sink.
    - sink posts STEP_DONE with amount of frames stepped and corresponding time
      interval.

 * frame stepping in audio/video pipeline in PAUSED

    .-----.    .-------.              .------.    .-------.
    | src |    | demux |    .-----.   | vdec |    | vsink |
    |    src->sink    src1->|queue|->sink   src->sink     |
    '-----'    |       |    '-----'   '------'    '-------'
               |       |              .------.    .-------.
               |       |    .-----.   | adec |    | asink |
               |      src2->|queue|->sink   src->sink     |
               '-------'    '-----'   '------'    '-------'


    - app sets the pipeline to PAUSED to block on the preroll picture
    - app seeks to required position in the stream. This can be done with a
      positive or negative rate depending on the required frame stepping
      direction.
    - app steps frames (in GST_FORMAT_DEFAULT or GST_FORMAT_BUFFER) or an amount
      of time on the video sink. The pipeline loses its PAUSED state until the
      required number of frames have been skipped, it then prerolls again.
      This skipping is purely done in the sink.
    - sink posts STEP_DONE with amount of frames stepped and corresponding time
      interval.
    - the app skips the same amount of time on the audiosink to align the
      streams again. When huge amount of video frames are skipped, there needs
      to be enough queueing in the pipeline to compensate for the accumulated
      audio.

 * frame stepping in audio/video pipeline in PLAYING

    - app sets the pipeline to PAUSED to block on the preroll picture
    - app seeks to required position in the stream. This can be done with a
      positive or negative rate depending on the required frame stepping
      direction.
    - app configures frames steps (in GST_FORMAT_DEFAULT or GST_FORMAT_BUFFER) or
      an amount of time on the sink. The step event has a flag indicating live
      stepping so that the stepping will only happens in PLAYING. 
    - app sets pipeline to PLAYING. The pipeline continues PLAYING until it
      consumed the amount of time.
    - sink posts STEP_DONE with amount of frames stepped and corresponding time
      interval. The sink will then wait for another step event. Since the
      STEP_DONE message was emited by the sink when it handed off the buffer to
      the device, there is usually sufficient time to queue a new STEP event so
      that one can seamlessly continue stepping.


events
~~~~~~

A new GST_EVENT_STEP event is introduced to start the step operation.  
The step event is created with the following fields in the structure:

  "format", GST_TYPE_FORMAT
     The format of the step units

  "amount", G_TYPE_UINT64
     The amount of units to step. A 0 amount immediately completes and can be
     used to cancel the current step and resume normal non-stepping behaviour
     to the end of the segment.
     A -1 amount steps until the end of the segment.

  "rate", G_TYPE_DOUBLE
     The rate at which the frames should be stepped in PLAYING mode. 1.0 is
     the normal playback speed and direction of the segment, 2.0
     is double speed. A speed of 0.0 is not allowed. When performing a
     flushing step, the speed is not relevant. Note that we don't allow negative
     rates here, use a seek with a negative rate first to reverse the playback
     direction.

  "flush", G_TYPE_BOOLEAN
     when flushing is TRUE, the step is performed immediately:

      - In the PAUSED state the pipeline loses the PAUSED state, the requested
        amount of data is skipped and the pipeline prerolls again when a
	non-intermediate step completes.
	When the pipeline was stepping while the event is sent, the current step
	operation is updated with the new amount and format. The sink will do a
	best effort to comply with the new amount.
      - In the PLAYING state, the pipeline loses the PLAYING state, the
        requested amount of data is skipped (not rendered) from the previous STEP
	request or from the position of the last PAUSED if no previous STEP
	operation was performed. The pipeline goes back to the PLAYING state
	when a non-intermediate step completes.

     When flushing is FALSE, the step will be performed later.

      - In the PAUSED state the step will be done when going to PLAYING. Any
	previous step operation will be overridden with the new STEP event.
      - In the PLAYING state the step operation will be performed after the
	current step operation completes. If there was no previous step
	operation, the step operation will be performed from the position of the
	last PAUSED state. 

  "intermediate", G_TYPE_BOOLEAN
     Signal that this step operation is an intermediate step, part of a series
     of step operations. It is mostly interesting for stepping in the PAUSED state
     because the sink will only perform a preroll after a non-intermediate step
     operation completes. Intermediate steps are useful to flush out data from
     other sinks in order to not cause excessive queueing. In the PLAYING state
     the intermediate flag has no visual effect. In all states, the intermediate
     flag is passed to the corresponding GST_MESSAGE_STEP_DONE.


The application will create a STEP event to start or stop the stepping
operation. Both stepping in PAUSED and PLAYING can be performed by means of 
the flush flag.

The event is usually sent to the pipeline, which will typically distribute the
event to all of its sinks. For some use cases, like frame stepping on video
frames only, the event should only be sent to the video sink and upon reception
of the STEP_DONE message, one can step the other sinks to align the streams
again.

For large stepping amounts, there needs to be enough queueing in front of all
the sinks. If large steps need to be performed, they can be split up into
smaller step operations using the "intermediate" flag on the step. 

Since the step event does not update the base_time of any of the elements, the
sinks should keep track of the amount of stepped data in order to remain
synchronized against the clock.


messages
~~~~~~~~

A GST_MESSAGE_STEP_START is created. It contains the following fields.

  "active"
     If the step was queued or activated.

  "format", GST_TYPE_FORMAT
     The format of the step units that queued/activated.

  "amount", G_TYPE_UINT64
     The amount of units that were queued/activated.

  "rate", G_TYPE_DOUBLE
     The rate and direction at which the frames were queued/activated.

  "flush", G_TYPE_BOOLEAN
     If the queued/activated frames will be flushed.

  "intermediate", G_TYPE_BOOLEAN
     If this is an intermediate step operation that queued/activated.

The STEP_START message is emited 2 times:
 
  * first when an element received the STEP event and queued it. The "active"
    field will be FALSE in this case.

  * second when the step operation started in the streaming thread. The "active"
    field is TRUE in this case. After this message is emited, the application
    can queue a new step operation.

The purpose of this message is to find out how many elements participate in the
step operation and to queue new step operations at the earliest possible
moment.

A new GST_MESSAGE_STEP_DONE message is created. It contains the following
fields:

  "format", GST_TYPE_FORMAT
     The format of the step units that completed.

  "amount", G_TYPE_UINT64
     The amount of units that were stepped.

  "rate", G_TYPE_DOUBLE
     The rate and direction at which the frames were stepped.

  "flush", G_TYPE_BOOLEAN
     If the stepped frames were flushed.

  "intermediate", G_TYPE_BOOLEAN
     If this is an intermediate step operation that completed.

  "duration", G_TYPE_UINT64
     The total duration of the stepped units in GST_FORMAT_TIME.

  "eos", G_TYPE_BOOLEAN
     The step ended because of EOS.

The message is emited by the element that performs the step operation. The
purpose is to return the duration in GST_FORMAT_TIME of the stepped media. This
especially interesting to align other stream in case of stepping frames on the
video sink element.


Direction switch
~~~~~~~~~~~~~~~~

When quickly switching between a forwards and a backwards step of, for example,
one video frame, we need either:

  a) issue a new seek to change the direction from the current position.
  b) cache a certain number of stepped frames and walk the cache.

option a) might be very slow.
For option b) we would ideally like to offload this caching functionality to a
separate element, which means that we need to forward the STEP event upstream.
It's unclear how this could work in a generic way. What is a demuxer supposed
to do when it received a step event? a flushing seek to what stream position?

