4)精灵 Pads (Ghost pads)
Bins有属于它自己的Pads,这就是”精灵Pads”的由来。
如下图。 没有使用精灵Pads的GstBin element
精灵pads来自于bins中某些element,它同样可以在该Bins中被直接访问。精灵Pads与UNIX文件系统中的符号链接很类似。使用Bins,你可以在你的代码中将Bins当作一个普通element来使用。
如下图. 使用了精灵Pads的GstBin element
最左边element的sink pad同样也是整个Bins的精灵pads。由于精灵pads看起来与其它pads没什么区别,而且与其它pads有着类似的功能。所以它们可以加到任何一种element上,而不仅仅是GstBin。
通过函数gst_ghost_pad_new ()可以创建一个ghost pad :
#include <gst/gst.h>
int main (int argc, char *argv[])
{
GstElement *bin, *sink;
GstPad *pad;
/* init */
gst_init (&argc, &argv);
/* create element, add to bin */
sink = gst_element_factory_make ("fakesink", "sink");
bin = gst_bin_new ("mybin");
gst_bin_add (GST_BIN (bin), sink);
/* add ghostpad */
pad = gst_element_get_pad (sink, "sink");
gst_element_add_pad (bin, gst_ghost_pad_new ("sink", pad));
gst_object_unref (GST_OBJECT (pad));
[..]
}
上面的例子中,pads不仅有精灵pads,而且还存在一个带名叫”sink”的sink pad element。 因此这个Bins可以作为那个element的替代者。你可以将其它的element与这个Bins进行连接。
