[Bug 760584] New: adaptivedemux: tests: hls seek tests sometimes time out

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Wed Jan 13 08:26:52 PST 2016


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

            Bug ID: 760584
           Summary: adaptivedemux: tests: hls seek tests sometimes time
                    out
    Classification: Platform
           Product: GStreamer
           Version: git master
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: florin.apostol at oregan.net
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

HLS seek tests (testSeekSnapAfterPosition, testReverseSeekSnapBeforePosition,
testSeekPosition) are sometimes timing out. The reproducing rate is around once
in 5-10 runs.

>From my investigation they block in AppSink preroll waiting for a switch to
PLAYING event that never comes.

When the AppSink changes state from PAUSED to PLAYING on first buffer received,
it will trigger a pipeline state change from PAUSED to PLAYING to be done on a
separate thread. This will race with the thread performing seek that will flush
the AppSink and make it loose state and change from PLAYING to PAUSED.
Changing pipeline to PLAYING means changing first AppSink element and then the
adaptivedemux element.

I identified 3 different scenarios for how AppSink behaves when it receives the
first buffer after the seek:

1. AppSink has the pending state PLAYING when doing the preroll. I noticed that
this happens when the pipeline change from PAUSED to PLAYING has  finished.
In this case gst_base_sink_do_preroll will change state to PLAYING and will not
call gst_base_sink_wait_preroll. The test finishes successfully.

2. AppSink has the pending state PAUSED when doing the preroll. 
In this case it will wait for a switch to PLAYING. This event comes probably
because the pipeline did not change yet the state for AppSink and is doing it
now. The test finishes successfully.

3. Similar with 2, but the switch to PLAYING event does not come. The test will
block in AppSink gst_base_sink_wait_preroll. 
It seems that pipeline changed state of AppSink to PLAYING but this was lost
during the flush. Changing adaptivedemux state blocks during the seek. It will
resume after the seek, so in this scenario pipeline change managed to change
state on Appsink, was interrupted by the seek and finished changing state of
adaptivedemux after the seek.

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