[gst-cvs] gstreamer: design: update the framestep draft

Wim Taymans wtay at kemper.freedesktop.org
Fri Feb 27 03:37:26 PST 2009


Module: gstreamer
Branch: master
Commit: 013f4a58d55f7adbcb8aac3d05ed718280c02aa6
URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=013f4a58d55f7adbcb8aac3d05ed718280c02aa6

Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date:   Fri Feb 27 12:34:29 2009 +0100

design: update the framestep draft

Update the docs a little.
Add property to allow incremental stepping so that we can reduce excessive
queueing.

---

 docs/design/draft-framestep.txt |   36 ++++++++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/docs/design/draft-framestep.txt b/docs/design/draft-framestep.txt
index a2b6e36..8f74ae3 100644
--- a/docs/design/draft-framestep.txt
+++ b/docs/design/draft-framestep.txt
@@ -17,7 +17,7 @@ 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.
+   simple playback. 
  - switching between forwards and backwards stepping should be fast.
  - Maintain synchronisation between streams.
  - Get feedback of the amount of skipped data.
@@ -107,17 +107,29 @@ events
      the end of the segment.
 
   "rate", G_TYPE_DOUBLE
-     The rate and direction 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 negative rate will step backwards. A speed of 0.0 is
-     not allowed. When performing a flushing step, the speed is not relevant. 
+     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.
+
+  "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 usefull 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.
 
   "flush", G_TYPE_BOOLEAN
      when flushing is TRUE, the step is performed immediatly: 
 
       - In the PAUSED state the pipeline loses the PAUSED state, the requested
-        amount of data is skipped and the pipeline prerolls again. When the
-	pipeline was stepping while the event is sent, the current step
+        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 requested amount of data is skipped (not
@@ -132,7 +144,8 @@ events
 	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.
- 
+
+
  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.
@@ -143,6 +156,10 @@ events
  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.
@@ -163,6 +180,9 @@ messages
   "rate", G_TYPE_DOUBLE
      The rate and direction at which the frames were stepped.
 
+  "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.
 





More information about the Gstreamer-commits mailing list