[Bug 710253] New: Pipeline stalls after sending FLUSH_STOP event to it

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Wed Oct 16 11:31:29 CEST 2013


https://bugzilla.gnome.org/show_bug.cgi?id=710253
  GStreamer | gstreamer (core) | 1.0.6

           Summary: Pipeline stalls after sending FLUSH_STOP event to it
    Classification: Platform
           Product: GStreamer
           Version: 1.0.6
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gstreamer (core)
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: 4ernov at gmail.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


I experience difficulties with flushing out the data from the pipeline out of
my application. I asked about the preferred way to do it for several times in
mailing-list, but, unfortunately, with no success. I'm trying to flush the
pipeline using the same techniques it's done in some GStreamer elements, but
unfortunately pipeline is stalled right after I send FLUSH_STOP event to it.

My pipeline consists of two branches:
appsrc -> decodebin -> queue -> autoaudiosink
appsrc -> decodebin -> queue -> videoscale -> videoconvert -> autovideosink

I have my data received by network, I just depacketize it, set PTS according to
pipeline's running time and push to appsrc.

Here's the code where I send FLUSH_START and right after that FLUSH_STOP to
pipeline:

    GST_INFO_OBJECT(pipeline(), "flushing pipeline...");
    guint32 seq_num = gst_util_seqnum_next();
    GST_INFO_OBJECT(pipeline(), "sending flush start...");
    GstEvent* flush_start = gst_event_new_flush_start();
    gst_event_set_seqnum(flush_start, seq_num);
    gboolean ret = FALSE;
    ret = gst_element_send_event(GST_ELEMENT(pipeline()), flush_start);
    if (!ret)
        GST_INFO_OBJECT(pipeline(), "failed to send flush-start event");
    GST_INFO_OBJECT(pipeline(), "sending flush stop...");

    GstEvent* flush_stop = gst_event_new_flush_stop(FALSE);

    gst_event_set_seqnum(flush_stop, seq_num);
    ret = gst_element_send_event(GST_ELEMENT(pipeline()), flush_stop);
    if (!ret)
        GST_INFO_OBJECT(pipeline(), "failed to send flush-stop event");

Log with GST_LEVEL_DEBUG loglevel is attached.

As far as I can see, the problem is that in spite of I explicitly set to not
reset time when creating FLUSH_STOP event, new_segment is created anyway so
time is efficiently reset.

I tried to set seq_num for events, to set reset_time to TRUE and actually reset
PTS of input packets starting from 0, but nothing actually helped.

-- 
Configure bugmail: https://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