i have similar error DS 4.0
static GstFlowReturn
gst_menudraw_prepare_output_buffer(GstBaseTransform * btrans, GstBuffer * inbuf, GstBuffer ** outbuf)
{
GstMenuDraw *menudraw = GST_MENUDRAW (btrans);
GstFlowReturn flow_ret = GST_FLOW_ERROR;
GstMapInfo out_map_info;
NvBufSurface *newoutsurface = NULL;
NvBufSurface *outsurface = NULL;
NvBufSurfaceCreateParams create_params;
DrawParam DrawParam;
NvDsBatchMeta *batch_meta = NULL;
NvDsFrameMeta *frame_meta = NULL;
NvDsMeta *meta = NULL;
g_print ("Prepare start\n");
/* An intermediate buffer for NV12/RGBA to BGR conversion will be
* required. Can be skipped if custom algorithm can work directly on NV12/RGBA. */
create_params.gpuId = menudraw->gpu_id;
create_params.width = menudraw->processing_width;
create_params.height = menudraw->processing_height;
create_params.size = 0;
create_params.colorFormat = NVBUF_COLOR_FORMAT_RGBA;
create_params.layout = NVBUF_LAYOUT_PITCH;
#ifdef __aarch64__
create_params.memType = NVBUF_MEM_DEFAULT;
g_print("set surface memtype nvbuf_mem_dafault\n");
#else
create_params.memType = NVBUF_MEM_CUDA_UNIFIED;
#endif
//Make GST Buffer
if (NvBufSurfaceCreate (&newoutsurface, 1,
&create_params) != 0) {
GST_ERROR ("Error: Could not allocate internal buffer for menudraw");
goto error;
}
*outbuf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_ZERO_PREFIXED, newoutsurface, sizeof(NvBufSurface), 0, sizeof(NvBufSurface), NULL, NULL);
//g_print("m1\n");
batch_meta = nvds_create_batch_meta(1);
//g_print("m2\n");
meta = gst_buffer_add_nvds_meta (*outbuf , batch_meta, NULL, copy_user_meta, release_user_meta);
//g_print("m3\n");
meta->meta_type = NVDS_BATCH_GST_META;
batch_meta->base_meta.batch_meta = batch_meta;
batch_meta->base_meta.copy_func = copy_user_meta;
batch_meta->base_meta.release_func = release_user_meta;
batch_meta->max_frames_in_batch = 1;
frame_meta = nvds_acquire_frame_meta_from_pool(batch_meta);
//g_print("m4\n");
nvds_add_frame_meta_to_batch(batch_meta, frame_meta);
//g_print("m5\n");
// Some important parameters to fill
frame_meta->pad_index = 0;
frame_meta->source_id = 0;
frame_meta->buf_pts = 0;
frame_meta->ntp_timestamp = 0;
frame_meta->frame_num = 0;
frame_meta->batch_id = 0;
frame_meta->source_frame_width = 1024;
frame_meta->source_frame_height = 600;
frame_meta->num_surfaces_per_frame = 1 ;
CHECK_CUDA_STATUS (cudaSetDevice (menudraw->gpu_id),
"Unable to set cuda device");
memset (&out_map_info, 0, sizeof (out_map_info));
if (!gst_buffer_map (*outbuf, &out_map_info, GST_MAP_READWRITE)) {
g_print ("Error: Failed to out map gst buffer\n");
goto error;
}
outsurface = (NvBufSurface *) out_map_info.data;
GST_DEBUG_OBJECT (menudraw,"Processing Frame Surface %p\n",outsurface);
if (CHECK_NVDS_MEMORY_AND_GPUID (menudraw, outsurface))
{
g_print ("Error: Check NVDS Memory And Gpu id\n");
goto error;
}
NvBufSurfaceMemSet(outsurface, 0, 0, 0);
AddImage(&DrawParam, &Image_Arr[INDEX_MENU_BACKGROUND_CAMERA_FLIP_CAMERA_RECT], 0, 0);
if (NvBufSurfaceMap (outsurface, 0, 0, NVBUF_MAP_READ_WRITE) != 0){
g_print("Draw surface map Error\n");
return GST_FLOW_ERROR;
}
NvBufSurfaceSyncForCpu (outsurface, 0,0);
Process_Draw_Menu(outsurface, &DrawParam);
NvBufSurfaceSyncForDevice (outsurface, 0,0);
if (NvBufSurfaceUnMap (outsurface, 0,0)){
g_print("Draw surface unmap Error\n");
goto error;
}
flow_ret = GST_FLOW_OK;
g_print ("Prepare OK\n");
//*outbuf = menudraw->outBuff;
error:
gst_buffer_unmap (*outbuf, &out_map_info);
//g_print ("Prepare unmap OK\n");
return flow_ret;
}
i got a same error on API NvBufSurfaceSyncForCpu (outsurface, 0,0)
I hope can find the answer to this topic.