Strange behaviour of fakesink: does not start and blocks the whole chain?

Hi!

I’m having strange issue with pipeline ending with fakesink.

The pipeline looks like this (after removing capsfilters):

decklinkteletextsrc ! tee name=t1 ! teletextdec ! appsink

t1 ! fakesink

Usually (*) the pipeline starts “successfully” but fakesink does not actually starts, tee t1 blocks on pushing buffer to fakesink and the whole chains locks. When i start to dispose the pipeline fakesink actually “starts” and unlocks tee.

I’ve tested various flags for fakesink (including sync=false) but to no success.

Solved the locking issue by adding queue with leaky=downstream before fakesink. it looks like fakesink needs to receive couple buffers until it is able to start.

deckinkteletextsrc - is an element I’ve added to decklink plugin. Nothing special about it. Just reads teletext packets from SDI channel and sends into separate GStreamer channel.

I think I’ve seen few times that the pipeline actually started and worked. But I’m not sure.

At the same time, basically the same pipeline:

decklinkteletextsrc ! tee name=t0 ! proxysink → proxysrc ! tee name=T1 ! teletextdec ! appsink

T1 ! proxysink →proxysrc ! fakesink

Never has such an issue. it starts, it processes teletext packets.

Now I’m in need of some understanding what happens here.

You need to add a queue element for each branch after a tee element so that preroll can successfully complete.