dynamic videomixing

Bernhard Graaf bernhard.graaf at gmx.de
Sat Dec 13 07:17:39 PST 2014



I have a well running pipeline (coded in C) like this:


tcpclientsrc ! queue2 ! decodebin name=dec !  // <- Sourcepart

queue ! videoconvert ! deinterlace ! xvimagesink !  // <- Videopart

.dec queue ! audioconvert ! audioresample ! pulsesink // <- Audiopart


What I try to do is, to put a videomixer between the videopart (e.g. after
videoconvert) to generate a second dynamic videopart for picture in picture

But if I try to do that, a get a 'link failed'. The regarding code snipes



gst_bin_add_many (GST_BIN (tv_pipe), tv_source, tv_queue2, tv_dec,
tv_v_queue, tv_v_conv, tv_v_mixer, tv_v_deint, tv_v_sink, tv_a_queue,
tv_a_conv, tv_a_res, tv_a_sink, NULL);


if(!gst_element_link_many (tv_source, tv_queue2, tv_dec, NULL)) printf("Link
1 fail\n");

if(!gst_element_link_many (tv_v_queue, tv_v_conv, NULL)) printf("Link 2

if(!gst_element_link_many (tv_v_mixer, tv_v_deint, tv_v_sink, NULL))
printf("Link 3 fail\n");

if(!gst_element_link_many (tv_a_queue, tv_a_conv, tv_a_res, tv_a_sink,
NULL)) printf("Link 4 fail\n");


pad1 = gst_element_get_request_pad (tv_v_mixer, "sink_%u");

pad2 = gst_element_get_static_pad (tv_v_conv, "src");

gst_pad_link (pad2,pad1);

if (!GST_PAD_IS_LINKED (pad1)) printf("conv/mixer link failed!\n");


g_signal_connect (tv_dec, "pad-added", G_CALLBACK (tv_mux_pad_added),


All Links are without any failure. 


But If I try to link the link the decoder pad to the tv_v_queue in the
regarding function:



if(strncmp("v",caps_string,1) == 0) 


  printf("Video Pad found\n");

  if (!GST_PAD_IS_LINKED (pad))


    sinkpad = gst_element_get_static_pad (tv_v_queue, "sink");

    g_print ("Dynamic pad created, linking TS-Demuxer/Video-Queue\n");

    gst_pad_link (pad, sinkpad); 

    if (!GST_PAD_IS_LINKED (pad)) printf("link failed!\n");

    gst_object_unref (sinkpad);




I get a link failed.


Without the videomixer, the pipeline runs well.


My questions are:

-          Is it possible to have only one sink in use for the videomixer,
or should I have two in minimum?

-          If yes, is there something I have forgot?


Thanks a lot for helping. I try to run this change for a long time, but
without any luck!





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20141213/739db5bb/attachment.html>

More information about the gstreamer-devel mailing list