[gstreamer-bugs] [Bug 328520] New: GstAdder gets 'stuck' when one source reaches EOS

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Tue Jan 24 21:43:39 PST 2006


Do not reply to this via email (we are currently unable to handle email
responses and they get discarded).  You can add comments to this bug at
http://bugzilla.gnome.org/show_bug.cgi?id=328520
 GStreamer | gst-plugins-base | Ver: 0.10.2

           Summary: GstAdder gets 'stuck' when one source reaches EOS
           Product: GStreamer
           Version: 0.10.2
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: descender at phreaker.net
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: Unspecified
   GNOME milestone: Unspecified


Problem Description:

GstAdder gets caught in a do-nothing loop when one of its sources reaches EOS. 

When a sink pad reaches EOS, gst_collect_pads_is_collected() is called by
gst_collect_pads_event(). If there are still sources active, the function then
goes into a loop calling gst_adder_collected() until there is no more queued
data.

The problem is, gst_adder_collected() uses gst_collect_pads_available() to
determine the amount of data queued and returns immediately without doing
anything if it is zero. But gst_collect_pads_available() returns 0 if any of
the pads is at EOS regardless of whether there is any data queued on other
active pads, so no queued buffers are dequeued and the abovementioned loop
continues indefinitely. 

All this while, the lock on GstAdder's GstCollectPads structure is also held,
making it impossible to perform actions such as removing a collected pad from
another thread.


Proposed solution:

gst_collect_pads_available() should ignore EOS'ed pads and return the minimum
amount of bytes queued on active pads. gst_adder_collected() should also ignore
pads without a buffer queued.

Perhaps it would be useful to add a new function called
gst_collect_pads_for_each_pad() that iterates through every pad in the same
state e.g. active with buffers queued, active but no buffers queued, EOS, etc.


-- 
Configure bugmail: http://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.




More information about the Gstreamer-bugs mailing list