query function
通过查询函数,元素将接收它必须回复的查询。这些查询包括位置、持续时间,以及元素支持的格式和调度模式。查询可以在上游和下游传递,因此您可以在汇聚节点和源节点上接收它们。
下面是一个非常简单的查询函数,我们将它安装在元素的源目录上。
static gboolean gst_my_filter_src_query (GstPad *pad,
GstObject *parent,
GstQuery *query);
[..]
static void
gst_my_filter_init (GstMyFilter * filter)
{
[..]
/* configure event function on the pad before adding
* the pad to the element */
gst_pad_set_query_function (filter->srcpad,
gst_my_filter_src_query);
[..]
}
static gboolean
gst_my_filter_src_query (GstPad *pad,
GstObject *parent,
GstQuery *query)
{
gboolean ret;
GstMyFilter *filter = GST_MY_FILTER (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
/* we should report the current position */
[...]
break;
case GST_QUERY_DURATION:
/* we should report the duration here */
[...]
break;
case GST_QUERY_CAPS:
/* we should report the supported caps here */
[...]
break;
default:
/* just call the default handler */
ret = gst_pad_query_default (pad, parent, query);
break;
}
return ret;
}
对于未知查询,调用默认查询处理程序gst_pad_query_default()是一个好主意。根据查询类型,默认处理程序将转发查询或简单地unref它。