2012-10-16 09:20:59 +00:00
|
|
|
|
|
|
|
<!-- ############ chapter ############# -->
|
|
|
|
|
|
|
|
<chapter id="chapter-building-queryfn">
|
|
|
|
<title>The query function</title>
|
|
|
|
<para>
|
|
|
|
Through the query function, your element will receive queries that it
|
|
|
|
has to reply to. These are queries like position, duration but also
|
|
|
|
about the supported formats and scheduling modes your element supports.
|
|
|
|
Queries can travel both upstream and downstream, so you can receive them
|
|
|
|
on sink pads as well as source pads.
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
Below follows a very simple query function that we install on the source
|
|
|
|
pad of our element.
|
|
|
|
</para>
|
|
|
|
<programlisting>
|
|
|
|
<![CDATA[
|
|
|
|
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 */
|
2013-03-22 20:02:57 +00:00
|
|
|
gst_pad_set_query_function (filter->srcpad,
|
|
|
|
gst_my_filter_src_query);
|
2012-10-16 09:20:59 +00:00
|
|
|
[..]
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
]]>
|
|
|
|
</programlisting>
|
|
|
|
<para>
|
|
|
|
It is a good idea to call the default query handler
|
|
|
|
<function>gst_pad_query_default ()</function> for unknown queries.
|
|
|
|
Depending on the query type, the default handler will forward
|
|
|
|
the query or simply unref it.
|
|
|
|
</para>
|
|
|
|
</chapter>
|