Refactor osd src pad buffer metadata probe function

This commit is contained in:
Barzan Hayati 2025-09-18 21:04:38 +00:00
parent e7c20e08ea
commit 760b162301
2 changed files with 35 additions and 32 deletions

View File

@ -432,6 +432,37 @@ void NvOsdManager::generate_event_msg_meta(gpointer data, gint class_id,
}
}
void NvOsdManager::event_message_meta(NvDsBatchMeta *batch_meta,
NvDsFrameMeta *frame_meta,
NvDsObjectMeta *obj_meta,
float *user_meta_data) {
NvDsEventMsgMeta *msg_meta =
(NvDsEventMsgMeta *)g_malloc0(sizeof(NvDsEventMsgMeta));
msg_meta->bbox.top = obj_meta->rect_params.top;
msg_meta->bbox.left = obj_meta->rect_params.left;
msg_meta->bbox.width = obj_meta->rect_params.width;
msg_meta->bbox.height = obj_meta->rect_params.height;
msg_meta->frameId = frame_number;
msg_meta->trackingId = obj_meta->object_id;
msg_meta->confidence = obj_meta->confidence;
msg_meta->embedding.embedding_vector = user_meta_data;
msg_meta->embedding.embedding_length = EMBEDDING_VECTOR_SIZE;
generate_event_msg_meta(msg_meta, obj_meta->class_id, obj_meta);
NvDsUserMeta *user_event_meta =
nvds_acquire_user_meta_from_pool(batch_meta);
if (user_event_meta) {
user_event_meta->user_meta_data = (void *)msg_meta;
user_event_meta->base_meta.meta_type = NVDS_EVENT_MSG_META;
user_event_meta->base_meta.copy_func = (NvDsMetaCopyFunc)meta_copy_func;
user_event_meta->base_meta.release_func =
(NvDsMetaReleaseFunc)meta_free_func;
nvds_add_user_meta_to_frame(frame_meta, user_event_meta);
} else {
g_print("Error in attaching event meta to buffer\n");
}
}
/* osd_sink_pad_buffer_probe will extract metadata received on OSD sink pad
* and update params for drawing rectangle, object information etc. */
GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_metadata_probe(
@ -525,38 +556,8 @@ GstPadProbeReturn NvOsdManager::osd_src_pad_buffer_metadata_probe(
}
if (is_meta_type_NVOSD_embedding_vector == true) {
// is_first_object && !(frame_number % frame_interval) &&
/* Frequency of messages to be send will be based on use case.
* Here message is being sent for first object every
* frame_interval(default=30).
*/
NvDsEventMsgMeta *msg_meta =
(NvDsEventMsgMeta *)g_malloc0(sizeof(NvDsEventMsgMeta));
msg_meta->bbox.top = obj_meta->rect_params.top;
msg_meta->bbox.left = obj_meta->rect_params.left;
msg_meta->bbox.width = obj_meta->rect_params.width;
msg_meta->bbox.height = obj_meta->rect_params.height;
msg_meta->frameId = frame_number;
msg_meta->trackingId = obj_meta->object_id;
msg_meta->confidence = obj_meta->confidence;
msg_meta->embedding.embedding_vector = user_meta_data;
msg_meta->embedding.embedding_length = EMBEDDING_VECTOR_SIZE;
generate_event_msg_meta(msg_meta, obj_meta->class_id, obj_meta);
NvDsUserMeta *user_event_meta =
nvds_acquire_user_meta_from_pool(batch_meta);
if (user_event_meta) {
user_event_meta->user_meta_data = (void *)msg_meta;
user_event_meta->base_meta.meta_type = NVDS_EVENT_MSG_META;
user_event_meta->base_meta.copy_func =
(NvDsMetaCopyFunc)meta_copy_func;
user_event_meta->base_meta.release_func =
(NvDsMetaReleaseFunc)meta_free_func;
nvds_add_user_meta_to_frame(frame_meta, user_event_meta);
} else {
g_print("Error in attaching event meta to buffer\n");
}
event_message_meta(batch_meta, frame_meta, obj_meta,
user_meta_data);
}
}
}

View File

@ -40,4 +40,6 @@ class NvOsdManager {
static void meta_free_func_custom(gpointer, gpointer);
static void generate_face_meta(gpointer);
static void generate_person_meta(gpointer);
static void event_message_meta(NvDsBatchMeta *, NvDsFrameMeta *,
NvDsObjectMeta *, float *);
};