Gstreamer整体分析2——连接Element

本文深入探讨Gstreamer如何通过gst_bin_add_many和gst_element_link_many将element添加到pipeline并建立连接。介绍gst_element_link内部如何寻找兼容的pad进行连接,以及处理ghost pad的情况。了解这些过程对于理解Gstreamer数据传输至关重要。

上一部分中,我们已经介绍了编写应用程序时,element的创建及何时加载插件动态库。在此部分中,我们将介绍Gstreamer是如何将element添加到pipeline中,并把它们连接起来的。

gst_bin_add_many

Gstreamer会调用gst_bin_add_many函数将element添加到pipeline中(不区分先后顺序)。此函数中,Gstramer实际上是调用了gst_bin_add函数将单个element添加到pipeline中的。gst_bin_add函数添加element所代表的意义是,为element设置一个parent(即所谓的bin),而一个element有且只有一个parent。如果要将一个element添加到一个正在运行中的pipeline中的话,你必须正确设置element的状态。在gst_bin_add函数中,会调用pipeline这个GstBinClass对象的add_element函数指针来将element添加到pipeline中。而add_element函数指针会在bin这个插件的gst_bin_class_init函数中进行设置。

无论是GstBin,还是GstElement,它们都继承自GstObject(GstBin继承自GstElement,这里的继承即包含父类的一个对象指针),而GstObject中会有一个类型为GstObject,名为parent的指针,所以,往bin中添加element时,会将element中的parent指针指向bin。然后将,element添加到bin的children中,并增加bin的children数量。在此函数中,还做了许多相关的设置,在此就不一一介绍了,感兴趣的同学可去看Gstreamer的源码。

gst_element_link_many

Gstreamer在调用了gst_bin_add_many函数后,只是将element添加到pipeline这个bin中,且设置element的parent为pipeline。接下来,调用Gstreamer的gst_element_link_many函数来连接各个element。gst_element_link_many函数中,实际上会调用gst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值