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);