GNOME Bugzilla – Bug 641007
Pipeline change in PAUSED state leads to stall
Last modified: 2012-05-18 08:06:54 UTC
Created attachment 179698 [details] Example code on the bug I have a pipeline with two branch connected using tee: queue -- ximagesink / playbin -- tee \ queue -- fakesink which is dynamically connected to queue -- ximagesink / playbin -- tee \ queue -- videomixer -- ffmpegcolorspace --ximagesink i.e., another video sink is connected instead of fakesink. Doing reconnections in PLAYING state is well described and works OK now. But if I try to do it in PAUSED state, the secondary branch is connected (or disconnected) successfully but as soon as I try to set pipeline to PLAYING state after all the changes it stalls and don't play anymore until I restart it (set to READY or NULL and start again). There're a number of problems: 1. The first method we use for PLAYING state, blocking a pad, doesn't work as it freeze the program on gst_pad_set_blocked and it's right as no buffers are incoming to release from the function. 2. The method with valve element temporary dropping buffers also doesn't work even with resettime element (which was also discussed) to insert some necessary events. There're also no debug messages about the pipeline from the moment it stalls, even in DEBUG or LOG level. It seems that it simply can't be set to PLAYING state, itself, or some of the element. Testing example code is attached.
in paused, all set_blocked calls will block until data flows again. Use the async variants.