GNOME Bugzilla – Bug 634965
sinks render buffers in state PAUSED when async is FALSE
Last modified: 2010-12-28 15:41:38 UTC
Created attachment 174585 [details] Test application which triggers the problem. It seems that doing a flushing seek or sending seek_start events when async==FALSE breaks the preroll in the basesink and the sink starts rendering buffers in state PAUSED. Attached is a small application which triggers the problem. It sets up the following pipeline: filesrc ! matroskamux ! filesink The problem can be seen with just any matroska file.
Created attachment 174596 [details] [review] possible patch possible patch and unit test
After applying the patch i noticed the following problem: I create a pipeline 'videotestsrc async=FALSE ! fakesink' and set it to PLAYING. Then i pause only the source element, do flushing seek and play it again. The pipeline is then blocked in gst_base_sink_wait_preroll (). With async=TRUE the example above seems to work just fine.
The same thing happens even without the pausing of the source, flush_start/flush_stop will make the sink hang in gst_base_sink_wait_preroll ().
Created attachment 174679 [details] [review] a unit test that triggers gst_base_sink_wait_preroll() in state playing
commit 9076d5688fe806ac28866251ff0516d4b61d6f30 Author: Wim Taymans <wim.taymans@collabora.co.uk> Date: Tue Nov 16 12:20:37 2010 +0100 basesink: also preroll after a flush with async=false Make sure to preroll after a flush even when we are async=false. Add unit test. Fixes #634965
more fixes, also committed the (now working) unit test. commit 17bb26b529c4e6080fa54c62d03a4982aae768a3 Author: Wim Taymans <wim.taymans@collabora.co.uk> Date: Tue Dec 28 16:40:28 2010 +0100 check: add more sink unit tests commit ef44d4b5397c3587c8cf42c467e7a8299d177ff0 Author: Wim Taymans <wim.taymans@collabora.co.uk> Date: Tue Dec 28 16:23:32 2010 +0100 basesink: also preroll async=false sinks Also preroll async=false sinks after a flush.