From 760b16230102a6dd05009eb9a991b97c76f26abd Mon Sep 17 00:00:00 2001 From: Barzan Hayati Date: Thu, 18 Sep 2025 21:04:38 +0000 Subject: [PATCH] Refactor osd src pad buffer metadata probe function --- src/nv_osd_manager.cpp | 65 +++++++++++++++++++++--------------------- src/nv_osd_manager.hpp | 2 ++ 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/nv_osd_manager.cpp b/src/nv_osd_manager.cpp index 18dea2a..bb940f4 100644 --- a/src/nv_osd_manager.cpp +++ b/src/nv_osd_manager.cpp @@ -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); } } } diff --git a/src/nv_osd_manager.hpp b/src/nv_osd_manager.hpp index 9f47890..f095f2c 100644 --- a/src/nv_osd_manager.hpp +++ b/src/nv_osd_manager.hpp @@ -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 *); }; \ No newline at end of file