Integrated deepstream-pose-estimation into deepstream-app with smalll display issue

Hi

The main steps are as follows:

  1. 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);
    
     }
    
  2. 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,…