Combining 2 Video Streams Side by Side, Getting Choppy Results

Nicolas Dufresne nicolas at
Tue Mar 2 17:28:52 UTC 2021

Le mardi 02 mars 2021 à 10:29 +0100, Michiel Konstapel a écrit :
> On 16-02-2021 16:06, Nicolas Dufresne wrote:
> Le mardi 16 février 2021 à 02:50 -0500, Jim Ruxton a écrit :
> > I am trying to combine 2 video streams. One from my laptop camera and one
> > from an external webcam. I'm using the following pipeline and getting very
> > choppy results. Neither my CPU or GPU seem to be working hard. Any ideas how
> > to make this less choppy?
> > ./gst-launch-1.0 v4l2src device=/dev/video4 ! videoscale ! videoconvert ! video/x-raw,format=YUY2, framerate=30/1, width=640, height=480! alpha alpha=1 ! videobox border-alpha=0 left=-640 ! 
> > videomixer name=Mix ! videoconvert ! autovideosink v4l2src device=/dev/video2 ! videoscale ! videoconvert ! video/x-raw, format=YUY2, framerate=30/1, width=640, height=480! alpha alpha=1 ! videobox border-alpha=0 right=-640 ! Mix.
> First recommendation, move away from videomixer and use compositor (videomixer
> is just a backward shm on top of compositor). As you have a live pipeline, you
> should release the composition pressure by configurating a latency on the
> compositor element.  The latency is in nano-second, one of two frames of
> latency should be fine in general, but the default is none, and would only
> worked with perfectly synched sources which has accurate latency (v4l2src does
> not have accurate latency, it simply claims 1 frame, alway).
> Second recommendation, consider adding a queue before you display sink, this
> will improve the timeout logic inside the compositor, by giving it a bit more
> freedome (with thread seperation).
> Interesting! Does any of the above apply to *gl*videomixer as well? Are there
> any specific considerations for using that in a live pipeline? Should we also
> give that more latency? I see the glmixerbin superclass has a property for
> that, also defaulting to zero.

glvideomixer is based a GstVideoAggregator, hence works fine for livepipeline.
The mixer bin is to help taking take of uploading the pixel to your GPU, as GPUs
don't or rarely use linear / malloc pixel data.

> Kind regards,
> Michiel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the gstreamer-devel mailing list