From 5d3035553cdcfc4467b7e0f637f2788a624405e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= Date: Thu, 4 Jan 2024 19:27:22 -0500 Subject: [PATCH] analytics: Replace type quark with opaque struct pointer This way, we can add function pointers in there for things like transformations. Part-of: --- girs/GstAnalytics-1.0.gir | 166 ++++++++++-------- .../analytics/gstanalyticsclassificationmtd.c | 36 ++-- .../analytics/gstanalyticsclassificationmtd.h | 5 +- .../gst-libs/gst/analytics/gstanalyticsmeta.c | 45 +++-- .../gst-libs/gst/analytics/gstanalyticsmeta.h | 19 +- .../gstanalyticsobjectdetectionmtd.c | 46 ++--- .../gstanalyticsobjectdetectionmtd.h | 7 +- .../analytics/gstanalyticsobjecttrackingmtd.c | 38 ++-- .../analytics/gstanalyticsobjecttrackingmtd.h | 5 +- .../tests/check/libs/analyticsmeta.c | 33 ++-- 10 files changed, 192 insertions(+), 208 deletions(-) diff --git a/girs/GstAnalytics-1.0.gir b/girs/GstAnalytics-1.0.gir index 709971aa57..4ab4707785 100644 --- a/girs/GstAnalytics-1.0.gir +++ b/girs/GstAnalytics-1.0.gir @@ -9,7 +9,7 @@ and/or use gtk-doc annotations. --> Type of analytics meta data - + @@ -97,19 +97,11 @@ Get quark of the class at @index - - Get the static string representing #GstAnalyticsMtd type. + + Get a id identifying #GstAnalyticsMtd type. - #GstAnalyticsMtd type name. - - - - - Get a quark identifying #GstAnalyticsMtd type. - - - Quark of #GstAnalyticsMtd type + opaque id of #GstAnalyticsMtd type @@ -157,6 +149,20 @@ Get instance id + + + + opaque id of the type + + + + + Instance of #GstAnalyticsMtd +Get analysis result type. + + + + @instance Instance of #GstAnalyticsRelatableMtd Get instance size @@ -171,20 +177,53 @@ Get instance size - + - quark associated with type. - + - - Instance of #GstAnalyticsMtd -Get analysis result type. - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Handle containing data required to use gst_analytics_od_mtd APIs. This type @@ -233,7 +272,8 @@ identified by @id is stored. - + + Quark of the class of object associated with this location. Quark different from on success and 0 on failure. @@ -241,25 +281,16 @@ identified by @id is stored. - Instance handle -Quark of the class of object associated with this location. + Instance handle - - Get a text representing object-detection metadata type. + + Get an id that represent object-detection metadata type - #GstAnalyticsMtd type name. - - - - - Get a quark that represent object-detection metadata type - - - Quark of #GstAnalyticsMtd type + Opaqu id of the #GstAnalyticsMtd type @@ -337,9 +368,9 @@ Since 1.24 Instance - - Type of relatable (#GstAnalyticsRelatableMtd) - + + Implementation of relatable (#GstAnalyticsRelatableMtd) + Size required @@ -839,19 +870,13 @@ Set tracking to lost - + - - - - - - - Quark representing the type of GstAnalyticsRelatableMtd + id representing the type of GstAnalyticsRelatableMtd -Get the quark identifying the relatable type - +Get the opaque id identifying the relatable type + @@ -912,35 +937,30 @@ Since 1.24 - - Get the static string representing #GstAnalyticsMtd type. + + Get a id identifying #GstAnalyticsMtd type. - #GstAnalyticsMtd type name. - - - - - Get a quark identifying #GstAnalyticsMtd type. - - - Quark of #GstAnalyticsMtd type + opaque id of #GstAnalyticsMtd type - - Get a text representing object-detection metadata type. - + + - #GstAnalyticsMtd type name. + + + + + - - Get a quark that represent object-detection metadata type + + Get an id that represent object-detection metadata type - Quark of #GstAnalyticsMtd type + Opaqu id of the #GstAnalyticsMtd type @@ -972,19 +992,13 @@ instance. - + - - - - - - - Quark representing the type of GstAnalyticsRelatableMtd + id representing the type of GstAnalyticsRelatableMtd -Get the quark identifying the relatable type - +Get the opaque id identifying the relatable type + diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c index d8f1a15ae5..e126408841 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.c @@ -24,9 +24,10 @@ #include "gstanalyticsclassificationmtd.h" -#define GST_RELATABLE_MTD_CLASSIFICATION_TYPE_NAME "classification" - -static char type[] = GST_RELATABLE_MTD_CLASSIFICATION_TYPE_NAME; +static const GstAnalyticsMtdImpl cls_impl = { + "classification", + NULL +}; typedef struct _GstAnalyticsClsConfLvlAndClass GstAnalyticsClsConfLvlAndClass; typedef struct _GstAnalyticsClsMtdData GstAnalyticsClsMtdData; @@ -53,31 +54,17 @@ struct _GstAnalyticsClsMtdData }; /** - * gst_analytics_cls_mtd_get_type_quark: - * Get a quark identifying #GstAnalyticsMtd type. + * gst_analytics_cls_mtd_get_mtd_type: + * Get a id identifying #GstAnalyticsMtd type. * - * Returns: Quark of #GstAnalyticsMtd type + * Returns: opaque id of #GstAnalyticsMtd type * * Since: 1.24 */ GstAnalyticsMtdType -gst_analytics_cls_mtd_get_type_quark (void) +gst_analytics_cls_mtd_get_mtd_type (void) { - return g_quark_from_static_string (type); -} - -/** - * gst_analytics_cls_mtd_get_type_name: - * Get the static string representing #GstAnalyticsMtd type. - * - * Returns: #GstAnalyticsMtd type name. - * - * Since: 1.24 - */ -const gchar * -gst_analytics_cls_mtd_get_type_name (void) -{ - return GST_RELATABLE_MTD_CLASSIFICATION_TYPE_NAME; + return (GstAnalyticsMtdType) & cls_impl; } /** @@ -191,7 +178,6 @@ gst_analytics_relation_meta_add_cls_mtd (GstAnalyticsRelationMeta * instance, gsize length, gfloat * confidence_levels, GQuark * class_quarks, GstAnalyticsClsMtd * cls_mtd) { - GQuark type = gst_analytics_cls_mtd_get_type_quark (); g_return_val_if_fail (instance, FALSE); gsize confidence_levels_size = (sizeof (GstAnalyticsClsConfLvlAndClass) * length); @@ -199,7 +185,7 @@ gst_analytics_relation_meta_add_cls_mtd (GstAnalyticsRelationMeta * GstAnalyticsClsConfLvlAndClass *conf_lvls_and_classes; GstAnalyticsClsMtdData *cls_mtd_data = (GstAnalyticsClsMtdData *) - gst_analytics_relation_meta_add_mtd (instance, type, size, cls_mtd); + gst_analytics_relation_meta_add_mtd (instance, &cls_impl, size, cls_mtd); if (cls_mtd_data) { cls_mtd_data->length = length; for (gsize i = 0; i < length; i++) { @@ -255,5 +241,5 @@ gst_analytics_relation_meta_get_cls_mtd (GstAnalyticsRelationMeta * meta, guint an_meta_id, GstAnalyticsClsMtd * rlt) { return gst_analytics_relation_meta_get_mtd (meta, an_meta_id, - gst_analytics_cls_mtd_get_type_quark (), (GstAnalyticsClsMtd *) rlt); + gst_analytics_cls_mtd_get_mtd_type (), (GstAnalyticsClsMtd *) rlt); } diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h index f4341bdb5a..172b93b6b9 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsclassificationmtd.h @@ -42,10 +42,7 @@ G_BEGIN_DECLS typedef struct _GstAnalyticsMtd GstAnalyticsClsMtd; GST_ANALYTICS_META_API -GstAnalyticsMtdType gst_analytics_cls_mtd_get_type_quark (void); - -GST_ANALYTICS_META_API -const gchar *gst_analytics_cls_mtd_get_type_name (void); +GstAnalyticsMtdType gst_analytics_cls_mtd_get_mtd_type (void); GST_ANALYTICS_META_API gfloat gst_analytics_cls_mtd_get_level (GstAnalyticsClsMtd * handle, diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c index a88e0aa9a0..479153c549 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.c @@ -39,7 +39,7 @@ GST_DEBUG_CATEGORY_STATIC (an_relation_meta_debug); */ typedef struct { - GstAnalyticsMtdType analysis_type; + const GstAnalyticsMtdImpl *impl; guint id; gsize size; gpointer data[]; @@ -88,8 +88,6 @@ typedef struct _GstAnalyticsRelationMeta } GstAnalyticsRelationMeta; -static char invalid_type_name[] = "_invalid"; - static guint gst_analytics_relation_meta_get_next_id (GstAnalyticsRelationMeta * meta); @@ -111,25 +109,24 @@ gst_analytics_relation_meta_get_mtd_data_internal (GstAnalyticsRelationMeta * } /** - * gst_analytics_mtd_get_type_quark: + * gst_analytics_mtd_get_mtd_type: * @instance: Instance of #GstAnalyticsMtd * Get analysis result type. * - * Returns: quark associated with type. + * Returns: opaque id of the type * * Since: 1.24 */ GstAnalyticsMtdType -gst_analytics_mtd_get_type_quark (GstAnalyticsMtd * handle) +gst_analytics_mtd_get_mtd_type (GstAnalyticsMtd * handle) { GstAnalyticsRelatableMtdData *rlt; rlt = gst_analytics_relation_meta_get_mtd_data_internal (handle->meta, handle->id); - g_return_val_if_fail (rlt != NULL, - g_quark_from_static_string (invalid_type_name)); + g_return_val_if_fail (rlt != NULL, 0); - return rlt->analysis_type; + return (GstAnalyticsMtdType) rlt->impl; } /** @@ -170,6 +167,15 @@ gst_analytics_mtd_get_size (GstAnalyticsMtd * handle) return rlt->size; } +const gchar * +gst_analytics_mtd_type_get_name (GstAnalyticsMtdType type) +{ + GstAnalyticsMtdImpl *impl = (GstAnalyticsMtdImpl *) type; + + g_return_val_if_fail (impl != NULL, NULL); + + return impl->name; +} /** * gst_analytics_relation_get_length: @@ -801,7 +807,7 @@ gst_buffer_get_analytics_relation_meta (GstBuffer * buffer) /** * gst_analytics_relation_meta_add_mtd: (skip) * @meta: Instance - * @type: Type of relatable (#GstAnalyticsRelatableMtd) + * @impl: Implementation of relatable (#GstAnalyticsRelatableMtd) * @size: Size required * @rlt_mtd: Updated handle * @@ -814,7 +820,7 @@ gst_buffer_get_analytics_relation_meta (GstBuffer * buffer) */ gpointer gst_analytics_relation_meta_add_mtd (GstAnalyticsRelationMeta * meta, - GstAnalyticsMtdType type, gsize size, GstAnalyticsMtd * rlt_mtd) + const GstAnalyticsMtdImpl * impl, gsize size, GstAnalyticsMtd * rlt_mtd) { gsize object_size; gsize new_size; @@ -860,7 +866,7 @@ gst_analytics_relation_meta_add_mtd (GstAnalyticsRelationMeta * meta, dest = (GstAnalyticsRelatableMtdData *) (meta->analysis_results + meta->offset); - dest->analysis_type = type; + dest->impl = impl; dest->id = gst_analytics_relation_meta_get_next_id (meta); dest->size = size; meta->mtd_data_lookup[dest->id] = meta->offset; @@ -870,7 +876,7 @@ gst_analytics_relation_meta_add_mtd (GstAnalyticsRelationMeta * meta, rlt_mtd->meta = meta; GST_CAT_TRACE (GST_CAT_AN_RELATION, "Add %p relatable type=%s (%" G_GSIZE_FORMAT " / %" G_GSIZE_FORMAT ").", dest, - g_quark_to_string (type), new_size, meta->max_size); + impl->name, new_size, meta->max_size); } else { GST_CAT_ERROR (GST_CAT_AN_RELATION, "Failed to add relatable, out-of-space (%" G_GSIZE_FORMAT " / %" @@ -915,11 +921,12 @@ gst_analytics_relation_meta_get_mtd (GstAnalyticsRelationMeta * meta, if (d == NULL) return FALSE; - if (d->analysis_type == 0) { + if (d->impl == NULL) { return FALSE; } - if (type != GST_ANALYTICS_MTD_TYPE_ANY && d->analysis_type != type) { + if (type != GST_ANALYTICS_MTD_TYPE_ANY && + d->impl != (GstAnalyticsMtdImpl *) type) { return FALSE; } @@ -976,8 +983,8 @@ gst_analytics_relation_meta_get_direct_related (GstAnalyticsRelationMeta * meta, gsize i; GST_CAT_TRACE (GST_CAT_AN_RELATION, - "Looking for %s related to %u by %d", g_quark_to_string (type), - an_meta_id, relation_type); + "Looking for %s related to %u by %d", + gst_analytics_mtd_type_get_name (type), an_meta_id, relation_type); g_return_val_if_fail (rmeta != NULL, FALSE); g_return_val_if_fail (type != 0, FALSE); @@ -1009,7 +1016,7 @@ gst_analytics_relation_meta_get_direct_related (GstAnalyticsRelationMeta * meta, rlt_mtd_data = (GstAnalyticsRelatableMtdData *) (meta->mtd_data_lookup[i] + meta->analysis_results); rlt_mtd->id = rlt_mtd_data->id; - if (gst_analytics_mtd_get_type_quark (rlt_mtd) == type) { + if (gst_analytics_mtd_get_mtd_type (rlt_mtd) == type) { if (state) { *state = GSIZE_TO_POINTER (G_MINSSIZE | i); } @@ -1059,7 +1066,7 @@ gst_analytics_relation_meta_iterate (GstAnalyticsRelationMeta * meta, rlt_mtd->id = rlt_mtd_data->id; rlt_mtd->meta = meta; if (type == GST_ANALYTICS_MTD_TYPE_ANY || - gst_analytics_mtd_get_type_quark (rlt_mtd) == type) { + gst_analytics_mtd_get_mtd_type (rlt_mtd) == type) { *state = GSIZE_TO_POINTER (G_MINSSIZE | index); return TRUE; } diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h index aff472f4e9..9e31544e7c 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsmeta.h @@ -41,7 +41,7 @@ typedef struct _GstAnalyticsMtd GstAnalyticsMtd; * * Since: 1.24 */ -typedef guint32 GstAnalyticsMtdType; +typedef guintptr GstAnalyticsMtdType; /** * GST_ANALYTICS_MTD_TYPE_ANY: @@ -75,8 +75,18 @@ struct _GstAnalyticsMtd GstAnalyticsRelationMeta *meta; }; +typedef struct { + const char *name; + + gboolean (*mtd_meta_transform) (GstBuffer *transbuf, GstAnalyticsMtd *mtd, + GstBuffer *buffer, GQuark type, + gpointer data); + + gpointer _reserved[GST_PADDING_LARGE]; +} GstAnalyticsMtdImpl; + GST_ANALYTICS_META_API -GstAnalyticsMtdType gst_analytics_mtd_get_type_quark (GstAnalyticsMtd * instance); +GstAnalyticsMtdType gst_analytics_mtd_get_mtd_type (GstAnalyticsMtd * instance); GST_ANALYTICS_META_API guint gst_analytics_mtd_get_id (GstAnalyticsMtd * instance); @@ -84,6 +94,9 @@ guint gst_analytics_mtd_get_id (GstAnalyticsMtd * instance); GST_ANALYTICS_META_API gsize gst_analytics_mtd_get_size (GstAnalyticsMtd * instance); +GST_ANALYTICS_META_API +const gchar *gst_analytics_mtd_type_get_name (GstAnalyticsMtdType type); + typedef struct _GstAnalyticsRelationMetaInitParams GstAnalyticsRelationMetaInitParams; @@ -174,7 +187,7 @@ gst_buffer_get_analytics_relation_meta (GstBuffer * buffer); GST_ANALYTICS_META_API gpointer gst_analytics_relation_meta_add_mtd (GstAnalyticsRelationMeta * meta, - GstAnalyticsMtdType type, gsize size, GstAnalyticsMtd * rlt_mtd); + const GstAnalyticsMtdImpl * impl, gsize size, GstAnalyticsMtd * rlt_mtd); GST_ANALYTICS_META_API gboolean diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c index dc9ab7e5a2..c31aa62d7c 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.c @@ -24,10 +24,6 @@ #include "gstanalyticsobjectdetectionmtd.h" -#define GST_RELATABLE_MTD_OD_TYPE_NAME "object-detection" - -static char type[] = GST_RELATABLE_MTD_OD_TYPE_NAME; - typedef struct _GstAnalyticsODMtdData GstAnalyticsODMtdData; /** @@ -53,33 +49,23 @@ struct _GstAnalyticsODMtdData gfloat location_confidence_lvl; }; +static const GstAnalyticsMtdImpl od_impl = { + "object-detection", + NULL +}; /** - * gst_analytics_od_mtd_get_type_quark: - * Get a quark that represent object-detection metadata type + * gst_analytics_od_mtd_get_mtd_type: + * Get an id that represent object-detection metadata type * - * Returns: Quark of #GstAnalyticsMtd type + * Returns: Opaqu id of the #GstAnalyticsMtd type * * Since: 1.24 */ GstAnalyticsMtdType -gst_analytics_od_mtd_get_type_quark (void) +gst_analytics_od_mtd_get_mtd_type (void) { - return g_quark_from_static_string (type); -} - -/** - * gst_analytics_od_mtd_get_type_name: - * Get a text representing object-detection metadata type. - * - * Returns: #GstAnalyticsMtd type name. - * - * Since: 1.24 - */ -const gchar * -gst_analytics_od_mtd_get_type_name (void) -{ - return GST_RELATABLE_MTD_OD_TYPE_NAME; + return (GstAnalyticsMtdType) & od_impl; } /** @@ -121,20 +107,21 @@ gst_analytics_od_mtd_get_location (GstAnalyticsODMtd * instance, } /** - * gst_analytics_od_mtd_get_type: + * gst_analytics_od_mtd_get_obj_type: * @handle: Instance handle + * * Quark of the class of object associated with this location. + * * Returns: Quark different from on success and 0 on failure. * * Since: 1.24 */ GQuark -gst_analytics_od_mtd_get_type (GstAnalyticsODMtd * handle) +gst_analytics_od_mtd_get_obj_type (GstAnalyticsODMtd * handle) { GstAnalyticsODMtdData *data; g_return_val_if_fail (handle != NULL, 0); - data = gst_analytics_relation_meta_get_mtd_data (handle->meta, - handle->id); + data = gst_analytics_relation_meta_get_mtd_data (handle->meta, handle->id); g_return_val_if_fail (data != NULL, 0); return data->object_type; } @@ -161,10 +148,9 @@ gst_analytics_relation_meta_add_od_mtd (GstAnalyticsRelationMeta * gfloat loc_conf_lvl, GstAnalyticsODMtd * od_mtd) { g_return_val_if_fail (instance != NULL, FALSE); - GstAnalyticsMtdType mtd_type = gst_analytics_od_mtd_get_type_quark (); gsize size = sizeof (GstAnalyticsODMtdData); GstAnalyticsODMtdData *od_mtd_data = (GstAnalyticsODMtdData *) - gst_analytics_relation_meta_add_mtd (instance, mtd_type, size, od_mtd); + gst_analytics_relation_meta_add_mtd (instance, &od_impl, size, od_mtd); if (od_mtd_data) { od_mtd_data->x = x; od_mtd_data->y = y; @@ -195,5 +181,5 @@ gst_analytics_relation_meta_get_od_mtd (GstAnalyticsRelationMeta * meta, guint an_meta_id, GstAnalyticsODMtd * rlt) { return gst_analytics_relation_meta_get_mtd (meta, an_meta_id, - gst_analytics_od_mtd_get_type_quark (), (GstAnalyticsODMtd *) rlt); + gst_analytics_od_mtd_get_mtd_type (), (GstAnalyticsODMtd *) rlt); } diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h index 8bc3bf3abc..640c448e2f 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjectdetectionmtd.h @@ -46,17 +46,14 @@ G_BEGIN_DECLS typedef struct _GstAnalyticsMtd GstAnalyticsODMtd; GST_ANALYTICS_META_API -GstAnalyticsMtdType gst_analytics_od_mtd_get_type_quark (void); - -GST_ANALYTICS_META_API -const gchar *gst_analytics_od_mtd_get_type_name (void); +GstAnalyticsMtdType gst_analytics_od_mtd_get_mtd_type (void); GST_ANALYTICS_META_API gboolean gst_analytics_od_mtd_get_location (GstAnalyticsODMtd * instance, gint * x, gint * y, gint * w, gint * h, gfloat * loc_conf_lvl); GST_ANALYTICS_META_API -GQuark gst_analytics_od_mtd_get_type (GstAnalyticsODMtd * handle); +GQuark gst_analytics_od_mtd_get_obj_type (GstAnalyticsODMtd * handle); GST_ANALYTICS_META_API gboolean gst_analytics_relation_meta_add_od_mtd ( diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c index 97e614fa29..6e776efb36 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.c @@ -24,8 +24,6 @@ #include "gstanalyticsobjecttrackingmtd.h" -#define GST_RELATABLE_MTD_TRACKING_TYPE_NAME "object-tracking" - typedef struct _GstAnalyticsTrackingMtdData GstAnalyticsTrackingMtdData; /** @@ -48,34 +46,23 @@ struct _GstAnalyticsTrackingMtdData }; -static char type[] = GST_RELATABLE_MTD_TRACKING_TYPE_NAME; +static const GstAnalyticsMtdImpl tracking_impl = { + "object-tracking", + NULL +}; /** - * gst_analytics_tracking_mtd_get_type_quark: - * Returns: Quark representing the type of GstAnalyticsRelatableMtd + * gst_analytics_tracking_mtd_get_mtd_type: + * Returns: id representing the type of GstAnalyticsRelatableMtd * - * Get the quark identifying the relatable type + * Get the opaque id identifying the relatable type * * Since: 1.24 */ GstAnalyticsMtdType -gst_analytics_tracking_mtd_get_type_quark (void) +gst_analytics_tracking_mtd_get_mtd_type (void) { - return g_quark_from_static_string (type); -} - -/** - * gst_an_od_mtd_get_type_name: - * Returns: #GstAnalyticsMtd type name. - * - * Get the name identifying relatable type name - * - * Since: 1.24 - */ -const gchar * -gst_analytics_tracking_mtd_get_type_name (void) -{ - return GST_RELATABLE_MTD_TRACKING_TYPE_NAME; + return (GstAnalyticsMtdType) & tracking_impl; } /** @@ -176,11 +163,10 @@ gst_analytics_relation_meta_add_tracking_mtd (GstAnalyticsRelationMeta * { g_return_val_if_fail (instance, FALSE); - GstAnalyticsMtdType type = gst_analytics_tracking_mtd_get_type_quark (); gsize size = sizeof (GstAnalyticsTrackingMtdData); GstAnalyticsTrackingMtdData *trk_mtd_data = (GstAnalyticsTrackingMtdData *) - gst_analytics_relation_meta_add_mtd (instance, - type, size, trk_mtd); + gst_analytics_relation_meta_add_mtd (instance, &tracking_impl, size, + trk_mtd); if (trk_mtd_data) { trk_mtd_data->tracking_id = tracking_id; @@ -210,6 +196,6 @@ gst_analytics_relation_meta_get_tracking_mtd (GstAnalyticsRelationMeta * meta, guint an_meta_id, GstAnalyticsTrackingMtd * rlt) { return gst_analytics_relation_meta_get_mtd (meta, an_meta_id, - gst_analytics_tracking_mtd_get_type_quark (), + gst_analytics_tracking_mtd_get_mtd_type (), (GstAnalyticsTrackingMtd *) rlt); } diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h index d658eb6502..f081fe038f 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h +++ b/subprojects/gst-plugins-bad/gst-libs/gst/analytics/gstanalyticsobjecttrackingmtd.h @@ -46,10 +46,7 @@ G_BEGIN_DECLS typedef struct _GstAnalyticsMtd GstAnalyticsTrackingMtd; GST_ANALYTICS_META_API -GQuark gst_analytics_tracking_mtd_get_type_quark (void); - -GST_ANALYTICS_META_API -const gchar *gst_analytics_tracking_mtd_get_type_name (void); +GstAnalyticsMtdType gst_analytics_tracking_mtd_get_mtd_type (void); GST_ANALYTICS_META_API gboolean gst_analytics_tracking_mtd_update_last_seen (GstAnalyticsTrackingMtd * instance, diff --git a/subprojects/gst-plugins-bad/tests/check/libs/analyticsmeta.c b/subprojects/gst-plugins-bad/tests/check/libs/analyticsmeta.c index adbab4ea51..3aed1f6b4b 100644 --- a/subprojects/gst-plugins-bad/tests/check/libs/analyticsmeta.c +++ b/subprojects/gst-plugins-bad/tests/check/libs/analyticsmeta.c @@ -654,10 +654,10 @@ GST_START_TEST (test_od_cls_relation) exist = gst_analytics_relation_meta_get_mtd (rmeta, ids[0], 0, &rlt_mtd); fail_unless (exist == TRUE); - GQuark mtd_type = gst_analytics_mtd_get_type_quark (&rlt_mtd); + GstAnalyticsMtdType mtd_type = gst_analytics_mtd_get_mtd_type (&rlt_mtd); /* Verify relatable meta with id == 1 is of type Object Detection */ - fail_unless (mtd_type == gst_analytics_od_mtd_get_type_quark ()); + fail_unless (mtd_type == gst_analytics_od_mtd_get_mtd_type ()); gst_analytics_od_mtd_get_location ((GstAnalyticsODMtd *) & rlt_mtd, &_x, &_y, &_w, &_h, &_loc_conf_lvl); @@ -667,14 +667,14 @@ GST_START_TEST (test_od_cls_relation) fail_unless (_h == h); fail_unless (_loc_conf_lvl == loc_conf_lvl); - GST_LOG ("mtd_type:%s", g_quark_to_string (mtd_type)); + GST_LOG ("mtd_type:%s", gst_analytics_mtd_type_get_name (mtd_type)); exist = gst_analytics_relation_meta_get_mtd (rmeta, ids[1], 0, &rlt_mtd); fail_unless (exist == TRUE); - mtd_type = gst_analytics_mtd_get_type_quark (&rlt_mtd); + mtd_type = gst_analytics_mtd_get_mtd_type (&rlt_mtd); /* Verify relatable meta with id == 0 is of type classification */ - fail_unless (mtd_type == gst_analytics_cls_mtd_get_type_quark ()); + fail_unless (mtd_type == gst_analytics_cls_mtd_get_mtd_type ()); gint index = gst_analytics_cls_mtd_get_index_by_quark ((GstAnalyticsClsMtd *) & rlt_mtd, @@ -691,7 +691,7 @@ GST_START_TEST (test_od_cls_relation) gst_analytics_cls_mtd_get_level ((GstAnalyticsClsMtd *) & rlt_mtd, index); fail_unless (lvl == 0.3f); - GST_LOG ("mtd_type:%s", g_quark_to_string (mtd_type)); + GST_LOG ("mtd_type:%s", gst_analytics_mtd_type_get_name (mtd_type)); GST_LOG ("cat %f [%d, %d %d, %d", lvl, _x, _y, _w, _h); gst_buffer_unref (buf); @@ -714,7 +714,8 @@ GST_START_TEST (test_multi_od_cls_relation) GArray *path = NULL; gfloat _loc_conf_lvl; gint x, _x, y, _y, w, _w, h, _h; - GQuark mtd_type, cls_type; + GstAnalyticsMtdType mtd_type; + GQuark cls_type; GstAnalyticsMtd mtd; gpointer state = NULL; GQuark class_quarks[2]; @@ -810,8 +811,8 @@ GST_START_TEST (test_multi_od_cls_relation) * the correct data. */ gst_analytics_relation_meta_get_mtd (rmeta, ids[0], 0, &mtd); - mtd_type = gst_analytics_mtd_get_type_quark (&mtd); - fail_unless (mtd_type == gst_analytics_od_mtd_get_type_quark ()); + mtd_type = gst_analytics_mtd_get_mtd_type (&mtd); + fail_unless (mtd_type == gst_analytics_od_mtd_get_mtd_type ()); gst_analytics_od_mtd_get_location ((GstAnalyticsODMtd *) & mtd, &_x, &_y, &_w, &_h, &_loc_conf_lvl); @@ -821,14 +822,14 @@ GST_START_TEST (test_multi_od_cls_relation) fail_unless (_h == 16); fail_unless (_loc_conf_lvl == 0.7f); - GST_LOG ("mtd_type:%s", g_quark_to_string (mtd_type)); + GST_LOG ("mtd_type:%s", gst_analytics_mtd_type_get_name (mtd_type)); /* Verify the relatable metadata 2 is of correct type * (ObjectDetection). */ gst_analytics_relation_meta_get_mtd (rmeta, ids[1], 0, &mtd); - mtd_type = gst_analytics_mtd_get_type_quark (&mtd); - fail_unless (mtd_type == gst_analytics_cls_mtd_get_type_quark ()); + mtd_type = gst_analytics_mtd_get_mtd_type (&mtd); + fail_unless (mtd_type == gst_analytics_cls_mtd_get_mtd_type ()); /* Verify data of the CLASSIFICATION retrieved */ gint index = @@ -843,7 +844,7 @@ GST_START_TEST (test_multi_od_cls_relation) gst_analytics_cls_mtd_get_index_by_quark ((GstAnalyticsClsMtd *) & mtd, g_quark_from_string ("cat")); lvl = gst_analytics_cls_mtd_get_level ((GstAnalyticsClsMtd *) & mtd, index); - GST_LOG ("mtd_type:%s", g_quark_to_string (mtd_type)); + GST_LOG ("mtd_type:%s", gst_analytics_mtd_type_get_name (mtd_type)); GST_LOG ("cat %f [%d, %d %d, %d", lvl, _x, _y, _w, _h); fail_unless (lvl == 0.9f); @@ -852,7 +853,7 @@ GST_START_TEST (test_multi_od_cls_relation) * Verify it's the first classification metadata */ gst_analytics_relation_meta_get_direct_related (rmeta, od_mtd[0].id, - GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_cls_mtd_get_type_quark (), + GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_cls_mtd_get_mtd_type (), &state, &mtd); cls_id = gst_analytics_mtd_get_id (&mtd); @@ -865,7 +866,7 @@ GST_START_TEST (test_multi_od_cls_relation) * Verify it's the first classification metadata */ gst_analytics_relation_meta_get_direct_related (rmeta, od_mtd[1].id, - GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_cls_mtd_get_type_quark (), + GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_cls_mtd_get_mtd_type (), &state, &mtd); cls_id = gst_analytics_mtd_get_id (&mtd); @@ -884,7 +885,7 @@ GST_START_TEST (test_multi_od_cls_relation) state = NULL; ret = gst_analytics_relation_meta_get_direct_related (rmeta, od_mtd[1].id, - GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_od_mtd_get_type_quark (), + GST_ANALYTICS_REL_TYPE_CONTAIN, gst_analytics_od_mtd_get_mtd_type (), &state, &mtd); fail_unless (ret == FALSE);