/**
* SECTION:gstquery
+ * @title: GstQuery
* @short_description: Provide functions to create queries, and to set and parse
* values in them.
* @see_also: #GstPad, #GstElement
* gst_query_parse_*() helpers.
*
* The following example shows how to query the duration of a pipeline:
- * |[
+ * |[<!-- language="C" -->
* GstQuery *query;
* gboolean res;
* query = gst_query_new_duration (GST_FORMAT_TIME);
gst_structure_set_parent_refcount (s, NULL);
gst_structure_free (s);
}
+#ifdef USE_POISONING
+ memset (query, 0xff, sizeof (GstQueryImpl));
+#endif
g_slice_free1 (sizeof (GstQueryImpl), query);
}
* when done with it. A position query is used to query the current position
* of playback in the streams, in some format.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* Use gst_query_unref() when done with it. A duration query will give the
* total length of the stream.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* by sinks to compensate for additional latency introduced by elements in the
* pipeline.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a #GstQuery
*/
structure = gst_structure_new_id (GST_QUARK (QUERY_LATENCY),
GST_QUARK (LIVE), G_TYPE_BOOLEAN, FALSE,
GST_QUARK (MIN_LATENCY), G_TYPE_UINT64, G_GUINT64_CONSTANT (0),
- GST_QUARK (MAX_LATENCY), G_TYPE_UINT64, G_GUINT64_CONSTANT (-1), NULL);
+ GST_QUARK (MAX_LATENCY), G_TYPE_UINT64, GST_CLOCK_TIME_NONE, NULL);
query = gst_query_new_custom (GST_QUERY_LATENCY, structure);
GstStructure *structure;
g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_LATENCY);
+ g_return_if_fail (GST_CLOCK_TIME_IS_VALID (min_latency));
structure = GST_QUERY_STRUCTURE (query);
gst_structure_id_set (structure,
* when done with it. A convert query is used to ask for a conversion between
* one format and another.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a #GstQuery
*/
* when done with it. A segment query is used to discover information about the
* currently configured segment for playback.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* Constructs a new custom query object. Use gst_query_unref()
* when done with it.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
- * Returns: (transfer full): a new #GstQuery
+ * Returns: (transfer full) (nullable): a new #GstQuery
*/
GstQuery *
gst_query_new_custom (GstQueryType type, GstStructure * structure)
*
* Get the structure of a query.
*
- * Returns: (transfer none): the #GstStructure of the query. The structure is
- * still owned by the query and will therefore be freed when the query
- * is unreffed.
+ * Returns: (transfer none) (nullable): the #GstStructure of the query. The
+ * structure is still owned by the query and will therefore be freed when the
+ * query is unreffed.
*/
const GstStructure *
gst_query_get_structure (GstQuery * query)
GstStructure *
gst_query_writable_structure (GstQuery * query)
{
+ GstStructure *structure;
+
g_return_val_if_fail (GST_IS_QUERY (query), NULL);
g_return_val_if_fail (gst_query_is_writable (query), NULL);
- return GST_QUERY_STRUCTURE (query);
+ structure = GST_QUERY_STRUCTURE (query);
+
+ if (structure == NULL) {
+ structure =
+ gst_structure_new_id_empty (gst_query_type_to_quark (GST_QUERY_TYPE
+ (query)));
+ gst_structure_set_parent_refcount (structure, &query->mini_object.refcount);
+ GST_QUERY_STRUCTURE (query) = structure;
+ }
+ return structure;
}
/**
* Constructs a new query object for querying seeking properties of
* the stream.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* Constructs a new query object for querying formats of
* the stream.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
/**
* gst_query_parse_nth_format:
* @query: a #GstQuery
- * @nth: (out): the nth format to retrieve.
+ * @nth: the nth format to retrieve.
* @format: (out) (allow-none): a pointer to store the nth format
*
* Parse the format query and retrieve the @nth format from it into
* Constructs a new query object for querying the buffering status of
* a stream.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* when done with it. An URI query is used to query the current URI
* that is used by the source or sink.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
*
* Constructs a new query object for querying the allocation properties.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
* Parse an allocation query, writing the requested caps in @caps and
* whether a pool is needed in @need_pool, if the respective parameters
* are non-%NULL.
+ *
+ * Pool details can be retrieved using gst_query_get_n_allocation_pools() and
+ * gst_query_parse_nth_allocation_pool().
*/
void
gst_query_parse_allocation (GstQuery * query, GstCaps ** caps,
/**
* gst_query_add_allocation_pool:
* @query: A valid #GstQuery of type GST_QUERY_ALLOCATION.
- * @pool: the #GstBufferPool
- * @size: the size
+ * @pool: (transfer none) (allow-none): the #GstBufferPool
+ * @size: the buffer size
* @min_buffers: the min buffers
* @max_buffers: the max buffers
*
g_return_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_ALLOCATION);
g_return_if_fail (gst_query_is_writable (query));
- g_return_if_fail (size != 0);
structure = GST_QUERY_STRUCTURE (query);
array = ensure_array (structure, GST_QUARK (POOL),
g_array_append_val (array, ap);
}
-
/**
* gst_query_get_n_allocation_pools:
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
* @query: A valid #GstQuery of type GST_QUERY_ALLOCATION.
* @index: index to parse
* @pool: (out) (allow-none) (transfer full): the #GstBufferPool
- * @size: (out) (allow-none): the size
+ * @size: (out) (allow-none): the buffer size
* @min_buffers: (out) (allow-none): the min buffers
* @max_buffers: (out) (allow-none): the max buffers
*
* @index: index to modify
* @query: A valid #GstQuery of type GST_QUERY_ALLOCATION.
* @pool: (transfer none) (allow-none): the #GstBufferPool
- * @size: the size
+ * @size: the buffer size
* @min_buffers: the min buffers
* @max_buffers: the max buffers
*
* gst_query_parse_nth_allocation_meta:
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
* @index: position in the metadata API array to read
- * @params: (out) (transfer none) (allow-none): API specific flags
+ * @params: (out) (transfer none) (allow-none): API specific parameters
*
* Parse an available query and get the metadata API
* at @index of the metadata API array.
* @index: (out) (transfer none) (allow-none): the index
*
* Check if @query has metadata @api set. When this function returns %TRUE,
- * @index will contain the index where the requested API and the flags can be
- * found.
+ * @index will contain the index where the requested API and the parameters
+ * can be found.
*
* Returns: %TRUE when @api is in the list of metadata.
*/
*
* Constructs a new query object for querying the scheduling properties.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
*
* Check if @query has scheduling mode set.
*
- * <note>
- * <para>
- * When checking if upstream supports pull mode, it is usually not
- * enough to just check for GST_PAD_MODE_PULL with this function, you
- * also want to check whether the scheduling flags returned by
- * gst_query_parse_scheduling() have the seeking flag set (meaning
- * random access is supported, not only sequential pulls).
- * </para>
- * </note>
+ * > When checking if upstream supports pull mode, it is usually not
+ * > enough to just check for GST_PAD_MODE_PULL with this function, you
+ * > also want to check whether the scheduling flags returned by
+ * > gst_query_parse_scheduling() have the seeking flag set (meaning
+ * > random access is supported, not only sequential pulls).
*
* Returns: %TRUE when @mode is in the list of scheduling modes.
*/
*
* Constructs a new query object for querying if @caps are accepted.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
/**
* gst_query_parse_accept_caps_result:
* @query: a GST_QUERY_ACCEPT_CAPS type query #GstQuery
- * @result: location for the result
+ * @result: (out) (allow-none): location for the result
*
* Parse the result from @query and store in @result.
*/
* @filter should be returned from the CAPS query. Specifying a filter might
* greatly reduce the amount of processing an element needs to do.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
*
* Constructs a new query object for querying the drain state.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*/
*
* Constructs a new query object for querying the pipeline-local context.
*
- * Free-function: gst_query_unref
+ * Free-function: gst_query_unref()
*
* Returns: (transfer full): a new #GstQuery
*