Query ----- NOTE: this is implemented as proposed Purpose ~~~~~~~ Queries are used to get information about the stream. A query is started on a specific pad and travels up or downstream. Types of queries ~~~~~~~~~~~~~~~~ - get length of stream - get position in stream - get seeking capabilities - get latency - convert one value to another - query supported formats - query internal links. Current implementation ~~~~~~~~~~~~~~~~~~~~~~ The current implementation of query requires pads to implement the following functions: gboolean (*GstPadConvertFunction) (GstPad *pad, GstFormat src_format, gint64 src_value, GstFormat *dest_format, gint64 *dest_value); gboolean (*GstPadQueryFunction) (GstPad *pad, GstQueryType type, GstFormat *format, gint64 *value); GList* (*GstPadIntLinkFunction) (GstPad *pad); const GstFormat* (*GstPadFormatsFunction) (GstPad *pad); const GstEventMask* (*GstPadEventMaskFunction) (GstPad *pad); const GstQueryType* (*GstPadQueryTypeFunction) (GstPad *pad); Most of these functions are not very extensible in particular, the queryfunction can only return one value. Requirements ~~~~~~~~~~~~ - multiple return values, grouped together when they make sense. - one pad function to perform the query - extensible queries. Proposition ~~~~~~~~~~~ - define GstQuery extending GstMiniObject and containing a GstStructure (see GstMessage) - define standard query types (see proposed types) - define methods to create a parse the results in the GstQuery. - define pad method: gboolean (*GstPadQueryFunction) (GstPad *pad, GstQuery *query); pad returns result in query structure and TRUE as result or FALSE when query is not supported. Proposed types ~~~~~~~~~~~~~~ - GST_QUERY_SEEKING: get info on how seeking can be done - getrange, with/without offset/size - ranges where seeking is efficient (for caching network sources) - flags describing seeking behaviour (forward, backward, segments, play backwards, ...) - GST_QUERY_POSITION: get info on current position of the stream in stream_time. - GST_QUERY_DURATION: get info on the total duration of the stream. - GST_QUERY_LATENCY: get amount of latency introduced in the pipeline. - GST_QUERY_SEGMENT: get info about the currently configured playback segment. - GST_QUERY_CONVERT: convert format/value to another format/value pair. - GST_QUERY_FORMATS: return list of supported formats that can be used for GST_QUERY_CONVERT.