mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 20:05:38 +00:00
harness: Add API for proposing meta APIs from the allocation query
https://bugzilla.gnome.org/show_bug.cgi?id=797350
This commit is contained in:
parent
80015d69a7
commit
c3214e8deb
4 changed files with 68 additions and 1 deletions
|
@ -1347,6 +1347,8 @@ gst_harness_set_upstream_latency
|
|||
gst_harness_set_propose_allocator
|
||||
gst_harness_get_allocator
|
||||
|
||||
gst_harness_add_propose_allocation_meta
|
||||
|
||||
gst_harness_add_src
|
||||
gst_harness_add_src_harness
|
||||
gst_harness_add_src_parse
|
||||
|
|
|
@ -107,6 +107,7 @@ LIBGSTCHECK_EXPORTED_FUNCS = \
|
|||
gst_harness_add_element_sink_pad \
|
||||
gst_harness_add_parse \
|
||||
gst_harness_add_probe \
|
||||
gst_harness_add_propose_allocation_meta \
|
||||
gst_harness_add_sink \
|
||||
gst_harness_add_sink_harness \
|
||||
gst_harness_add_sink_parse \
|
||||
|
|
|
@ -147,6 +147,19 @@ static GstStaticPadTemplate hsinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
|
|||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS_ANY);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
GType api;
|
||||
GstStructure *params;
|
||||
} ProposeMeta;
|
||||
|
||||
static void
|
||||
propose_meta_clear (ProposeMeta * meta)
|
||||
{
|
||||
if (meta->params)
|
||||
gst_structure_free (meta->params);
|
||||
}
|
||||
|
||||
struct _GstHarnessPrivate
|
||||
{
|
||||
gchar *element_sinkpad_name;
|
||||
|
@ -179,6 +192,8 @@ struct _GstHarnessPrivate
|
|||
GstAllocator *propose_allocator;
|
||||
GstAllocationParams propose_allocation_params;
|
||||
|
||||
GArray *propose_allocation_metas;
|
||||
|
||||
gboolean blocking_push_mode;
|
||||
GCond blocking_push_cond;
|
||||
GMutex blocking_push_mutex;
|
||||
|
@ -390,6 +405,15 @@ gst_harness_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
|
|||
gst_query_add_allocation_param (query,
|
||||
priv->propose_allocator, &priv->propose_allocation_params);
|
||||
|
||||
if (priv->propose_allocation_metas) {
|
||||
guint i;
|
||||
for (i = 0; i < priv->propose_allocation_metas->len; i++) {
|
||||
ProposeMeta *meta =
|
||||
&g_array_index (priv->propose_allocation_metas, ProposeMeta, i);
|
||||
gst_query_add_allocation_meta (query, meta->api, meta->params);
|
||||
}
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (pad, "proposing allocation %" GST_PTR_FORMAT,
|
||||
priv->propose_allocator);
|
||||
}
|
||||
|
@ -1052,6 +1076,9 @@ gst_harness_teardown (GstHarness * h)
|
|||
gst_object_replace ((GstObject **) & priv->allocator, NULL);
|
||||
gst_object_replace ((GstObject **) & priv->pool, NULL);
|
||||
|
||||
if (priv->propose_allocation_metas)
|
||||
g_array_unref (priv->propose_allocation_metas);
|
||||
|
||||
/* if we hold the last ref, set to NULL */
|
||||
if (gst_harness_element_unref (h) == 0) {
|
||||
gboolean state_change;
|
||||
|
@ -2161,6 +2188,38 @@ gst_harness_set_propose_allocator (GstHarness * h, GstAllocator * allocator,
|
|||
priv->propose_allocation_params = *params;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_harness_add_propose_allocation_meta:
|
||||
* @h: a #GstHarness
|
||||
* @api: a metadata API
|
||||
* @params: (allow-none) (transfer none): API specific parameters
|
||||
*
|
||||
* Add api with params as one of the supported metadata API to propose when
|
||||
* receiving an allocation query.
|
||||
*
|
||||
* MT safe.
|
||||
*
|
||||
* Since: 1.16
|
||||
*/
|
||||
void
|
||||
gst_harness_add_propose_allocation_meta (GstHarness * h, GType api,
|
||||
const GstStructure * params)
|
||||
{
|
||||
GstHarnessPrivate *priv = h->priv;
|
||||
ProposeMeta meta;
|
||||
|
||||
meta.api = api;
|
||||
meta.params = params ? gst_structure_copy (params) : NULL;
|
||||
|
||||
if (!priv->propose_allocation_metas) {
|
||||
priv->propose_allocation_metas =
|
||||
g_array_new (FALSE, FALSE, sizeof (ProposeMeta));
|
||||
g_array_set_clear_func (priv->propose_allocation_metas,
|
||||
(GDestroyNotify) propose_meta_clear);
|
||||
}
|
||||
g_array_append_val (priv->propose_allocation_metas, meta);
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_harness_add_src_harness:
|
||||
* @h: a #GstHarness
|
||||
|
|
|
@ -257,7 +257,7 @@ GstClockTime gst_harness_query_latency (GstHarness * h);
|
|||
GST_CHECK_API
|
||||
void gst_harness_set_upstream_latency (GstHarness * h, GstClockTime latency);
|
||||
|
||||
/* allocator and allocation params */
|
||||
/* allocation query parameters */
|
||||
|
||||
GST_CHECK_API
|
||||
void gst_harness_set_propose_allocator (GstHarness * h,
|
||||
|
@ -269,6 +269,11 @@ void gst_harness_get_allocator (GstHarness * h,
|
|||
GstAllocator ** allocator,
|
||||
GstAllocationParams * params);
|
||||
|
||||
GST_CHECK_API
|
||||
void gst_harness_add_propose_allocation_meta (GstHarness * h,
|
||||
GType api,
|
||||
const GstStructure * params);
|
||||
|
||||
/* src-harness */
|
||||
|
||||
GST_CHECK_API
|
||||
|
|
Loading…
Reference in a new issue