[Bug 793607] New: aggregator: flushing state never resets with a tee

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Mon Feb 19 17:39:33 UTC 2018


https://bugzilla.gnome.org/show_bug.cgi?id=793607

            Bug ID: 793607
           Summary: aggregator: flushing state never resets with a tee
    Classification: Platform
           Product: GStreamer
           Version: 1.13.1
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gstreamer (core)
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: fzwoch at gmail.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

Actually I noticed with 1.12.4 - But looking at the code makes me belief this
affects 1.13.x as well.

I'm not 100% sure how flushing works in detail, so maybe help me out here. But
I made an element based on GstAggregator and it works just fine so far. I
noticed that seeking is broken when I attach a tee element downstream to the
aggregator.

The basic use case is to listen on the bus for an EOS, and then seeking back to
the start (with flushing). But I think it also happened when I tried a regular
seek while in PAUSED.

The result is that the aggregator is processing data just fine but does not
output any more data after the first seek.

A little bit of tracing lead me to this code:

(gstaggregator.c:1985)
  if (flush) {
    priv->pending_flush_start = TRUE;
    priv->flush_seeking = TRUE;
  }

 [..]

(gstaggregator.c:2004)
  if (!evdata.result || !evdata.one_actually_seeked) {
    GST_OBJECT_LOCK (self);
    priv->flush_seeking = FALSE;
    priv->pending_flush_start = FALSE;
    GST_OBJECT_UNLOCK (self);
  }


So when I have a tee downstream I do get two seek events (correct?). The first
one seems to work just fine - the second one however has much less debug log
(not doing any flushing?).

Basically the second seek was a success (evdata.result == 1) but I think
evdata.one_actually_seeked was also 1 because after that point I kept hitting
this:

(gstaggregator.c:555)
  GST_INFO_OBJECT (self, "Not pushing (active: %i, flushing: %i)",
  self->priv->flush_seeking, gst_pad_is_active (self->srcpad));

with "active: 1, flushing: 1". Which indicates that "priv->flush_seeking =
FALSE;" was not hit again, leaving its state in flush_seeking.

To verify I boldly moved the "priv->flush_seeking = FALSE;" line out of the
brackets so it gets set regardless of the results and it did "fix" my original
problem.

Surely this is not the correct fix, but maybe your understanding is much better
and you already have an idea what may cause this behavior in case a tee is
present downstream?

I can attach some traces for this particular case - just lacking access to the
right machine.

-- 
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