Hi
The main steps are as follows:
-
In deepstream-app main(), I add a probe at the src pad of secondary gie since I use primary gie with a yolo detector:
GstPad *src_pad = NULL;GstElement *pose = appCtx[i]->pipeline.common_elements.secondary_gie_bin.sub_bins[0].secondary_gie; src_pad = gst_element_get_static_pad (pose, "src"); if (!src_pad) g_print ("Unable to get primary_gie src pad\n"); else { gst_pad_add_probe(src_pad, GST_PAD_PROBE_TYPE_BUFFER, pgie_src_pad_buffer_probe, NULL, NULL); gst_object_unref (src_pad); } -
In this probe function, I use a function – “pose_meta_data()” to deal with pose estimation meta data which I put it into another cpp source file named pose_meta.cpp:
static GstPadProbeReturn
pgie_src_pad_buffer_probe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data)
{
//gchar *msg = NULL;
GstBuffer *buf = (GstBuffer *)info->data;
NvDsBatchMeta *batch_meta = gst_buffer_get_nvds_batch_meta(buf);
pose_meta_data(batch_meta);
return GST_PAD_PROBE_OK;
}
3)In pose_mate.cpp, I just changed a little bit of your original code:
extern “C” void
pose_meta_data(NvDsBatchMeta *batch_meta)
{
NvDsMetaList *l_frame = NULL;
NvDsMetaList *l_obj = NULL;
NvDsMetaList *l_user = NULL;
for (l_frame = batch_meta->frame_meta_list; l_frame != NULL; l_frame = l_frame->next) {
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *)(l_frame->data);
for (l_user = frame_meta->frame_user_meta_list; l_user != NULL; l_user = l_user->next) {
NvDsUserMeta *user_meta = (NvDsUserMeta *)l_user->data;
if (user_meta->base_meta.meta_type == NVDSINFER_TENSOR_OUTPUT_META)
{
NvDsInferTensorMeta *tensor_meta =
(NvDsInferTensorMeta *)user_meta->user_meta_data;
Vec2D<int> objects;
Vec3D<float> normalized_peaks;
tie(objects, normalized_peaks) = parse_objects_from_tensor_meta(tensor_meta);
create_display_meta(objects, normalized_peaks, frame_meta, frame_meta->source_frame_width, frame_meta->source_frame_height);
}
}
for (l_obj = frame_meta->obj_meta_list; l_obj != NULL; l_obj = l_obj->next) {
NvDsObjectMeta *obj_meta = (NvDsObjectMeta *)l_obj->data;
for (l_user = obj_meta->obj_user_meta_list; l_user != NULL;
l_user = l_user->next) {
NvDsUserMeta *user_meta = (NvDsUserMeta *)l_user->data;
if (user_meta->base_meta.meta_type == NVDSINFER_TENSOR_OUTPUT_META) {
NvDsInferTensorMeta *tensor_meta =
(NvDsInferTensorMeta *)user_meta->user_meta_data;
Vec2D<int> objects;
Vec3D<float> normalized_peaks;
tie(objects, normalized_peaks) = parse_objects_from_tensor_meta(tensor_meta);
create_display_meta(objects, normalized_peaks, frame_meta, frame_meta->source_frame_width, frame_meta->source_frame_height);
}
}
}
}
return;
}
The other functions are not touched.
4)I’ve set secondary gie’s propperty as:
g_object_set(G_OBJECT(pgie), “output-tensor-meta”, TRUE,…