++bcao modified start++
pls refer the #24
++bcao modified end++
Can you refer to this code:
static GstPadProbeReturn
tiler_src_pad_buffer_probe (GstPad * pad, GstPadProbeInfo * info,
gpointer u_data)
{
#ifdef DUMP_JPG
GstBuffer *buf = (GstBuffer *) info->data;
NvDsMetaList * l_frame = NULL;
NvDsMetaList * l_user_meta = NULL;
NvDsUserMeta *user_meta = NULL;
NvDsInferSegmentationMeta* seg_meta_data = NULL;
// Get original raw data
GstMapInfo in_map_info;
char* src_data = NULL;
if (!gst_buffer_map (buf, &in_map_info, GST_MAP_READ)) {
g_print ("Error: Failed to map gst buffer\n");
gst_buffer_unmap (buf, &in_map_info);
return GST_PAD_PROBE_OK;
}
NvBufSurface *surface = (NvBufSurface *)in_map_info.data;
NvDsBatchMeta *batch_meta = gst_buffer_get_nvds_batch_meta (buf);
for (l_frame = batch_meta->frame_meta_list; l_frame != NULL;
l_frame = l_frame->next) {
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *) (l_frame->data);
/* Validate user meta */
for (l_user_meta = frame_meta->frame_user_meta_list; l_user_meta != NULL;
l_user_meta = l_user_meta->next) {
user_meta = (NvDsUserMeta *) (l_user_meta->data);
if (user_meta && user_meta->base_meta.meta_type == NVDSINFER_SEGMENTATION_META) {
seg_meta_data = (NvDsInferSegmentationMeta*)user_meta->user_meta_data;
}
}
src_data = (char*) malloc(surface->surfaceList[frame_meta->batch_id].dataSize);
if(src_data == NULL) {
g_print("Error: failed to malloc src_data \n");
continue;
}
cudaMemcpy((void*)src_data,
(void*)surface->surfaceList[frame_meta->batch_id].dataPtr,
surface->surfaceList[frame_meta->batch_id].dataSize,
cudaMemcpyDeviceToHost);
dump_jpg(src_data,
surface->surfaceList[frame_meta->batch_id].width,
surface->surfaceList[frame_meta->batch_id].height,
seg_meta_data, frame_meta->source_id, frame_meta->frame_num);
if(src_data != NULL) {
free(src_data);
src_data = NULL;
}
}
gst_buffer_unmap (buf, &in_map_info);
#endif