[gstreamer-bugs] [Bug 585708] New: [adder] Wrong handling of flushing seeks

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Sun Jun 14 00:24:02 PDT 2009


If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
  http://bugzilla.gnome.org/show_bug.cgi?id=585708

  GStreamer | gst-plugins-base | Ver: git
           Summary: [adder] Wrong handling of flushing seeks
           Product: GStreamer
           Version: git
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: major
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: bilboed at gmail.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
                CC: ensonic at sonicpulse.de
     GNOME version: Unspecified
   GNOME milestone: Unspecified


When doing a *flushing* seek on an element/pipeline one expects the following
to happen synchronously:
* the event is sent
* some element will handle the seek
  * Sends out a FLUSH_START
  * Streaming stops
  * Figures out if it can handle the seek and if so configures itself
accordingly
  * Sends out a FLUSH_STOP
  * Returns True if the streaming thread will push data according to the
requested seek, else False
* The seek event push returns to the user with either True/False

If the seek is successfull, the streaming threads start pushing the newsegment,
tags and buffers (in that order, tags being optional).


This means that if one does the following on an element:
1. asynchronously blocks the source pad,
2. Sends a flushing seek which succeeds,
3. asynchronoulsy un-blocks the source pad.

... we expect the first thing to come out of the pad to be a new_segment.



With adder this is not the case, since the FLUSH_STOP event is sent from the
streaming thread and not from the thread that did the flushing seek (i.e. it
does not send those events synchronously).

Because of this... we end up with adder pushing out a stray FLUSH_STOP event...
and breaks the whole synchronization when used in GNonLin.

Adder (or maybe collectpads?) should be modified to collect the
flush_start/flush_stop events coming into its sink pads (which are received
synchronously) and send out FLUSH_STOP once all incoming streams have stopped
flushing in a synchronous fashion.


Because of this issue, using adder in GNonLin operations fail, which results in
any gnonlin-based software (pitivi and other various scripts) not being able to
do proper audio mixing.


I have tried to figure out what's wrong within adder in vain. But some commits
do look suspicious.
* 4228ba0c6b095da4cd24e76a576aff5733b6c91e. This commit message and the comment
in the code states that flush_stop should be sent (from the streaming threads)
if the seek failed... yet the code is doing it ... if the seek succeeds ! Are
the two comments wrong and the code correct... or the opposite ?


-- 
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.

You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=585708.




More information about the Gstreamer-bugs mailing list