我目前正在开发一个以uridecodebin
开头的gstreamer管道,它打开一个png文件,我希望最终链接到imagefreeze
元素(尽管将来我可能想要将它链接到任意元素)。我已经连接到"pad-added"
信号,但似乎uridecodebin
实际上并没有创建打击垫。
仔细查看日志后,它似乎成功打开了png文件并将filesrc
链接到decodebin
,但似乎没有创建任何打击垫(回调是从来没有调用过,当我在打开文件后遍历src
uridecodebin
个焊盘时,没有调用。有谁知道为什么会这样?
不幸的是,它是更大代码库的一部分,因此我无法共享完整的代码,但我可以提供相关示例的摘录:
GstElement *uridecodebin = gst_element_factory_make ("uridecodebin", NULL);
GstElement *imagefreeze = gst_element_factory_make ("imagefreeze", NULL);
GstElement *sink = gst_element_factory_make ("fakesink", NULL);
g_object_set (G_OBJECT (uridecodebin), "uri"
"file:///test.png", NULL);
g_signal_connect (uridecodebin, "pad-added",
G_CALLBACK (uri_pad_added_cb), NULL);
gst_bin_add_many (GST_BIN (bin), uridecodebin, imagefreeze, sink, NULL);
gst_element_link (imagefreeze, sink);
然后,回调(此时,只是一个存根):
static void
uri_pad_added_cb (GstElement * element, GstPad * pad, gpointer data)
{
GST_WARNING ("uri_pad_added_cb");
}