gstreamer访问dynamicaly创建的元素以添加pad探测

时间:2015-10-08 12:49:35

标签: c++ gstreamer

我需要访问 glvideomixer 元素的动态创建的子元素(它的合成器的派生) 它有自己的bin,它的子元素被创建到这个bin中。

如果我有指向glvideomixer元素和管道的指针,是否可以访问这些子元素?

是否存在某种“子元素创建”信号? - 我需要在创建

后立即访问子元素

我正在这样做,以便能够为这些元素添加填充探针,以分析流过它们的内容。

这就是我创建glvideomixer的方式:

GstElement *video_mixer = gst_element_factory_make ("glvideomixer", NULL); 
//.. wait for creating inner structure and ASAP get element and 

这是管道的一部分,只显示了glvideomixer的bin: enter image description here

我需要访问混音器元素(然后使用自动生成的名称访问其他元素 - gluploadelement#glcolorconvertelement#..)

1 个答案:

答案 0 :(得分:2)

您可以在glvideomixer bin上为element-added信号添加一个监听器:

void my_callback(GstBin *glvideomixer_bin, GstElement *element, 
       gpointer user_data) {
   //call gst_element_get_name and verify that it's "mixer"
}

g_signal_connect(GST_BIN(glvideomixer), "element-added", 
    G_CALLBACK(my_callback), my_data);

如果混合器元素恰好立即创建,您也可以使用gst_bin_get_by_name

GstElement* mixer = gst_bin_get_by_name(GST_BIN(video_mixer), "mixer")

然后在你完成时取消它:

gst_object_unref(mixer);

http://gstreamer.freedesktop.org/data/doc/gstreamer/stable/gstreamer/html/GstBin.html#GstBin-element-added