mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
query: use more generic structure for meta params
This commit is contained in:
parent
8bca7537e6
commit
3f80cb272e
4 changed files with 43 additions and 29 deletions
|
@ -1661,19 +1661,27 @@ gst_query_set_nth_allocation_pool (GstQuery * query, guint index,
|
|||
typedef struct
|
||||
{
|
||||
GType api;
|
||||
guint flags;
|
||||
GstStructure *params;
|
||||
} AllocationMeta;
|
||||
|
||||
static void
|
||||
allocation_meta_free (AllocationMeta * am)
|
||||
{
|
||||
if (am->params)
|
||||
gst_structure_free (am->params);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_query_add_allocation_meta:
|
||||
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
|
||||
* @api: the metadata API
|
||||
* @flags: API specific flags
|
||||
* @params: (transfer full) (allow-none): API specific parameters
|
||||
*
|
||||
* Add @api with @flags as one of the supported metadata API to @query.
|
||||
* Add @api with @params as one of the supported metadata API to @query.
|
||||
*/
|
||||
void
|
||||
gst_query_add_allocation_meta (GstQuery * query, GType api, guint flags)
|
||||
gst_query_add_allocation_meta (GstQuery * query, GType api,
|
||||
GstStructure * params)
|
||||
{
|
||||
GArray *array;
|
||||
GstStructure *structure;
|
||||
|
@ -1685,10 +1693,11 @@ gst_query_add_allocation_meta (GstQuery * query, GType api, guint flags)
|
|||
|
||||
structure = GST_QUERY_STRUCTURE (query);
|
||||
array =
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta), NULL);
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta),
|
||||
(GDestroyNotify) allocation_meta_free);
|
||||
|
||||
am.api = api;
|
||||
am.flags = flags;
|
||||
am.params = params;
|
||||
|
||||
g_array_append_val (array, am);
|
||||
}
|
||||
|
@ -1712,7 +1721,8 @@ gst_query_get_n_allocation_metas (GstQuery * query)
|
|||
|
||||
structure = GST_QUERY_STRUCTURE (query);
|
||||
array =
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta), NULL);
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta),
|
||||
(GDestroyNotify) allocation_meta_free);
|
||||
|
||||
return array->len;
|
||||
}
|
||||
|
@ -1721,7 +1731,7 @@ gst_query_get_n_allocation_metas (GstQuery * query)
|
|||
* gst_query_parse_nth_allocation_meta:
|
||||
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
|
||||
* @index: position in the metadata API array to read
|
||||
* @flags: (out) (allow-none): API specific flags
|
||||
* @params: (out) (allow-none): API specific flags
|
||||
*
|
||||
* Parse an available query and get the metadata API
|
||||
* at @index of the metadata API array.
|
||||
|
@ -1730,7 +1740,7 @@ gst_query_get_n_allocation_metas (GstQuery * query)
|
|||
*/
|
||||
GType
|
||||
gst_query_parse_nth_allocation_meta (GstQuery * query, guint index,
|
||||
guint * flags)
|
||||
const GstStructure ** params)
|
||||
{
|
||||
GArray *array;
|
||||
GstStructure *structure;
|
||||
|
@ -1740,14 +1750,15 @@ gst_query_parse_nth_allocation_meta (GstQuery * query, guint index,
|
|||
|
||||
structure = GST_QUERY_STRUCTURE (query);
|
||||
array =
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta), NULL);
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta),
|
||||
(GDestroyNotify) allocation_meta_free);
|
||||
|
||||
g_return_val_if_fail (index < array->len, 0);
|
||||
|
||||
am = &g_array_index (array, AllocationMeta, index);
|
||||
|
||||
if (flags)
|
||||
*flags = am->flags;
|
||||
if (params)
|
||||
*params = am->params;
|
||||
|
||||
return am->api;
|
||||
}
|
||||
|
@ -1770,7 +1781,8 @@ gst_query_remove_nth_allocation_meta (GstQuery * query, guint index)
|
|||
|
||||
structure = GST_QUERY_STRUCTURE (query);
|
||||
array =
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta), NULL);
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta),
|
||||
(GDestroyNotify) allocation_meta_free);
|
||||
g_return_if_fail (index < array->len);
|
||||
|
||||
g_array_remove_index (array, index);
|
||||
|
@ -1800,7 +1812,8 @@ gst_query_find_allocation_meta (GstQuery * query, GType api, guint * index)
|
|||
|
||||
structure = GST_QUERY_STRUCTURE (query);
|
||||
array =
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta), NULL);
|
||||
ensure_array (structure, GST_QUARK (META), sizeof (AllocationMeta),
|
||||
(GDestroyNotify) allocation_meta_free);
|
||||
|
||||
len = array->len;
|
||||
for (i = 0; i < len; i++) {
|
||||
|
@ -1830,8 +1843,8 @@ allocation_param_free (AllocationParam * ap)
|
|||
/**
|
||||
* gst_query_add_allocation_param:
|
||||
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
|
||||
* @allocator: the memory allocator
|
||||
* @params: a #GstAllocationParams
|
||||
* @allocator: (transfer none) (allow-none): the memory allocator
|
||||
* @params: (transfer none) (allow-none): a #GstAllocationParams
|
||||
*
|
||||
* Add @allocator and its @params as a supported memory allocator.
|
||||
*/
|
||||
|
@ -1892,8 +1905,8 @@ gst_query_get_n_allocation_params (GstQuery * query)
|
|||
* gst_query_parse_nth_allocation_param:
|
||||
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
|
||||
* @index: position in the allocator array to read
|
||||
* @allocator: (transfer none): variable to hold the result
|
||||
* @params: parameters for the allocator
|
||||
* @allocator: (out) (transfer none) (allow-none): variable to hold the result
|
||||
* @params: (out) (allow-none): parameters for the allocator
|
||||
*
|
||||
* Parse an available query and get the alloctor and its params
|
||||
* at @index of the allocator array.
|
||||
|
@ -1926,8 +1939,8 @@ gst_query_parse_nth_allocation_param (GstQuery * query, guint index,
|
|||
* gst_query_set_nth_allocation_param:
|
||||
* @query: a GST_QUERY_ALLOCATION type query #GstQuery
|
||||
* @index: position in the allocator array to set
|
||||
* @allocator: (transfer full): new allocator to set
|
||||
* @params: parameters for the allocator
|
||||
* @allocator: (transfer none) (allow-none): new allocator to set
|
||||
* @params: (transfer none) (allow-none): parameters for the allocator
|
||||
*
|
||||
* Parse an available query and get the alloctor and its params
|
||||
* at @index of the allocator array.
|
||||
|
|
|
@ -427,9 +427,10 @@ void gst_query_set_nth_allocation_param (GstQuery *query, guint ind
|
|||
const GstAllocationParams *params);
|
||||
|
||||
/* metadata */
|
||||
void gst_query_add_allocation_meta (GstQuery *query, GType api, guint flags);
|
||||
void gst_query_add_allocation_meta (GstQuery *query, GType api, GstStructure *params);
|
||||
guint gst_query_get_n_allocation_metas (GstQuery *query);
|
||||
GType gst_query_parse_nth_allocation_meta (GstQuery *query, guint index, guint *flags);
|
||||
GType gst_query_parse_nth_allocation_meta (GstQuery *query, guint index,
|
||||
const GstStructure **params);
|
||||
void gst_query_remove_nth_allocation_meta (GstQuery *query, guint index);
|
||||
gboolean gst_query_find_allocation_meta (GstQuery *query, GType api, guint *index);
|
||||
|
||||
|
|
|
@ -813,10 +813,10 @@ gst_base_transform_default_decide_allocation (GstBaseTransform * trans,
|
|||
n_metas = gst_query_get_n_allocation_metas (query);
|
||||
for (i = 0; i < n_metas; i++) {
|
||||
GType api;
|
||||
guint flags;
|
||||
const GstStructure *params;
|
||||
gboolean remove;
|
||||
|
||||
api = gst_query_parse_nth_allocation_meta (query, i, &flags);
|
||||
api = gst_query_parse_nth_allocation_meta (query, i, ¶ms);
|
||||
|
||||
/* by default we remove all metadata, subclasses should implement a
|
||||
* filter_meta function */
|
||||
|
@ -828,7 +828,7 @@ gst_base_transform_default_decide_allocation (GstBaseTransform * trans,
|
|||
remove = TRUE;
|
||||
} else if (G_LIKELY (klass->filter_meta)) {
|
||||
/* remove if the subclass said so */
|
||||
remove = !klass->filter_meta (trans, query, api, flags);
|
||||
remove = !klass->filter_meta (trans, query, api, params);
|
||||
GST_LOG_OBJECT (trans, "filter_meta for api %s returned: %s",
|
||||
g_type_name (api), (remove ? "remove" : "keep"));
|
||||
} else {
|
||||
|
@ -1369,11 +1369,11 @@ gst_base_transform_default_propose_allocation (GstBaseTransform * trans,
|
|||
n_metas = gst_query_get_n_allocation_metas (decide_query);
|
||||
for (i = 0; i < n_metas; i++) {
|
||||
GType api;
|
||||
guint flags;
|
||||
const GstStructure *params;
|
||||
|
||||
api = gst_query_parse_nth_allocation_meta (decide_query, i, &flags);
|
||||
api = gst_query_parse_nth_allocation_meta (decide_query, i, ¶ms);
|
||||
GST_DEBUG_OBJECT (trans, "proposing metadata %s", g_type_name (api));
|
||||
gst_query_add_allocation_meta (query, api, flags);
|
||||
gst_query_add_allocation_meta (query, api, gst_structure_copy (params));
|
||||
}
|
||||
ret = TRUE;
|
||||
}
|
||||
|
|
|
@ -226,7 +226,7 @@ struct _GstBaseTransformClass {
|
|||
/* decide allocation query for output buffers */
|
||||
gboolean (*decide_allocation) (GstBaseTransform *trans, GstQuery *query);
|
||||
gboolean (*filter_meta) (GstBaseTransform *trans, GstQuery *query,
|
||||
GType api, guint flags);
|
||||
GType api, const GstStructure *params);
|
||||
|
||||
/* propose allocation query parameters for input buffers */
|
||||
gboolean (*propose_allocation) (GstBaseTransform *trans, GstQuery *decide_query,
|
||||
|
|
Loading…
Reference in a new issue