[gst-devel] Mixing starting/stopping/disconnecting sources: multiqueue + freeze?

Sjoerd Op 't Land sjoerd at intercue.nl
Sat Jan 2 13:05:13 CET 2010


Hello all,

For a live video mixer/switcher I would like to perform mixing/ 
switching between multiple asynchronous and starting/stopping/ 
(dis)connecting video sources. In hardware, this is normally done by a  
TBC (Time Base Corrector). What would be the way to go in GStreamer?

This is the solution I thought up thus far: every source is a pipeline  
that can be started and stopped at will. Then, a multiqueue to  
simultaneously output a frame from each source:

source1(pipeline) -> |            | -> |            |
                      | multiqueue |    | videomixer | -> sink
source2(pipeline) -> |            | -> |            |

However, it seems from experiments that multiqueue only starts when it  
has received one buffer from every source. Should I insert something  
like the 'freeze' element to feed the multiqueue with a continuous  
stream? (Not the current 'freeze' element, because it freezes always,  
and not only a stopped source. Furthermore, it should increase or  
remove timestamps.)

source1(pipeline) -> 'freeze' -> |            | -> |            |
                                  | multiqueue |    | videomixer | ->  
sink
source2(pipeline) -> 'freeze' -> |            | -> |            |

Does such an element exist? The existence of the GST_BUFFER_FLAG_GAP  
makes me think that it must exist, but I cannot find it. Is pull-based  
scheduling possible for such a solution?

Thanks in advance for any hints or suggestions,
Sjoerd




More information about the gstreamer-devel mailing list