Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU)
GPU T4
• DeepStream Version
deepstream-5.1
• TensorRT Version
tensorrt-7.2.2.3
• NVIDIA GPU Driver Version (valid for GPU only)
NVIDIA-SMI 470.57.02 Driver Version: 470.57.02 CUDA Version: 11.4
• Issue Type( questions, new requirements, bugs)
bugs
• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)
I create pipeline
appsrc ->queue → jpegdec → fakesink
read image(JPG) from disk and use ** gst_buffer_add_nvds_meta ** method add some meta into buffer , then I probe all element in pipeline, still find the meta in nvjpegdec sink probe callback , but the meta data in nvjpegdec src probe callback lost ,that’s why ?
more: I and probe the meta in this probe callback
- appsrc src probe
- queue sink probe
- queue src probe
- nvjpegdec sink probe
when nvjpegdec src probe callback run ,the meta lost
the probe callback code
static GstPadProbeReturn metric_probe(GstPad *pad, GstPadProbeInfo *info, gpointer u_data) {
GstElement *element = (GstElement *) u_data;
GstBuffer *buf = (GstBuffer *) info->data;
GstMeta *gst_meta;
NvDsMeta *dsmeta;
gpointer state = NULL;
NvDsBatchMeta *batch_meta = NULL;
NvDsMetaList *l_frame = NULL;
NvDsUserMeta *user_meta = NULL;
NvDsMetaList *l_user_meta = NULL;
GstMapInfo inmap = GST_MAP_INFO_INIT;
logger_info("element %s pad %s received,buffer=%p,size=%ld,thread_id=%ld", GST_ELEMENT_NAME(element),
GST_PAD_NAME(pad),
buf, inmap.size, std::this_thread::get_id());
gboolean find = false;
batch_meta = gst_buffer_get_nvds_batch_meta(buf);
if (batch_meta) {
logger_info("gst_buffer_get_nvds_batch_meta,element %s pad %s ", GST_ELEMENT_NAME(element),
GST_PAD_NAME(pad));
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_meta = frame_meta->frame_user_meta_list; l_user_meta != NULL;
l_user_meta = l_user_meta->next) {
logger_info("frame_user_meta_list,element %s pad %s ", GST_ELEMENT_NAME(element),
GST_PAD_NAME(pad));
user_meta = (NvDsUserMeta *) (l_user_meta->data);
if (user_meta->base_meta.meta_type == JA_HTTP_SRC_REQUEST_META) {
find = true;
gst_println("OKKKKKKKKKKK,element=%s pad=%s", GST_ELEMENT_NAME(element), GST_PAD_NAME(pad));
}
}
}
} else {
while ((gst_meta = gst_buffer_iterate_meta(buf, &state))) {
dsmeta = (NvDsMeta *) gst_meta;
logger_info("meta type:%d", dsmeta->meta_type);
if (dsmeta->meta_type == JA_HTTP_SRC_REQUEST_META) {
find = true;
gst_println("OKKKKKKKKKKK--shi,element=%s pad=%s", GST_ELEMENT_NAME(element), GST_PAD_NAME(pad));
}
}
}
if (find) {
logger_info("meta exist,element=%s pad=%s", GST_ELEMENT_NAME(element), GST_PAD_NAME(pad));
}else {
logger_info("meta lost,element=%s pad=%s", GST_ELEMENT_NAME(element), GST_PAD_NAME(pad));
}
return GST_PAD_PROBE_OK;
}
/**
*
* @param element
* @param pad
*/
void Metric::install_metric_probe(GstElement *element, std::string pad) {
int prob_id = 0;
logger_info("install metric probe for element=%s,pad=%s", GST_ELEMENT_NAME(element), pad.c_str());
NVGSTDS_ELEM_ADD_PROBE(prob_id, element, pad.c_str(), metric_probe, GST_PAD_PROBE_TYPE_BUFFER, element);
}
• Requirement details( This is for new requirement. Including the module name-for which plugin or for which sample application, the function description)