I have issue creating ctx in gstdsexample.cpp's gst_dsexample_transform_ip function
.
static GstFlowReturn
gst_dsexample_transform_ip (GstBaseTransform * btrans, GstBuffer * inbuf)
{
NvDsObjEncCtxHandle obj_ctx_handle = nvds_obj_enc_create_context (dsexample->gpu_id);
if (!obj_ctx_handle) {
g_print ("Unable to create context\n");
return -1;
}
gpointer ctx = (gpointer) obj_ctx_handle;
}
My whole code is as follows.
static GstFlowReturn
gst_dsexample_transform_ip (GstBaseTransform * btrans, GstBuffer * inbuf)
{
GstDsExample *dsexample = GST_DSEXAMPLE (btrans);
GstMapInfo in_map_info;
GstFlowReturn flow_ret = GST_FLOW_ERROR;
gdouble scale_ratio = 1.0;
NvBufSurface *surface = NULL;
NvDsBatchMeta *batch_meta = NULL;
NvDsFrameMeta *frame_meta = NULL;
NvDsObjectMeta *obj_meta = NULL;
NvDsMetaList * l_frame = NULL;
NvDsMetaList *l_obj = NULL;
guint i = 0;
static gchar font_name[] = "Serif";
char fileFrameNameString[FILE_NAME_SIZE];
const char *osd_string = "restitude";
dsexample->frame_num++;
CHECK_CUDA_STATUS (cudaSetDevice (dsexample->gpu_id), "Unable to set cuda device");
NvDsObjEncCtxHandle obj_ctx_handle = nvds_obj_enc_create_context (dsexample->gpu_id);
if (!obj_ctx_handle) {
g_print ("Unable to create context\n");
return -1;
}
gpointer ctx = (gpointer) obj_ctx_handle;
memset (&in_map_info, 0, sizeof (in_map_info));
if (!gst_buffer_map (inbuf, &in_map_info, GST_MAP_READ)) {
g_print ("Error: Failed to map gst buffer\n");
goto error;
}
nvds_set_input_system_timestamp (inbuf, GST_ELEMENT_NAME (dsexample));
surface = (NvBufSurface *) in_map_info.data;
GST_DEBUG_OBJECT (dsexample, "Processing Frame %" G_GUINT64_FORMAT " Surface %p\n", dsexample->frame_num, surface);
if (CHECK_NVDS_MEMORY_AND_GPUID (dsexample, surface))
goto error;
batch_meta = gst_buffer_get_nvds_batch_meta (inbuf);
if (batch_meta == nullptr) {
GST_ELEMENT_ERROR (dsexample, STREAM, FAILED, ("NvDsBatchMeta not found for input buffer."), (NULL));
return GST_FLOW_ERROR;
}
if (dsexample->process_full_frame) {
//std::chrono::time_point<std::chrono::system_clock> before = std::chrono::system_clock::now();
for (l_frame = batch_meta->frame_meta_list; l_frame != NULL; l_frame = l_frame->next) {
NvDsFrameMeta *frame_meta = (NvDsFrameMeta *) (l_frame->data);
NvDsUserMetaList *usrMetaList = frame_meta->frame_user_meta_list;
NvDsObjEncUsrArgs frameData = { 0 };
/* Preset */
frameData.isFrame = 1;
/* To be set by user */
frameData.saveImg = TRUE;
frameData.attachUsrMeta = TRUE;
/* Set if Image scaling Required */
frameData.scaleImg = FALSE;
frameData.scaledWidth = 0;
frameData.scaledHeight = 0;
/* Quality */
frameData.quality = 80;
/* Main Function Call */
nvds_obj_enc_process (ctx, &frameData, surface, NULL, frame_meta);
nvds_obj_enc_finish (ctx);
char fileFrameNameString[FILE_NAME_SIZE];
const char *osd_string = "OSD";
FILE *file;
g_print("here");
for (l_obj = frame_meta->obj_meta_list; l_obj != NULL; l_obj = l_obj->next) {
g_print("here_1");
obj_meta = (NvDsObjectMeta *) (l_obj->data);
if (obj_meta->class_id == PGIE_CLASS_ID_NOHELMET) {
g_print("here_2");
int stream_num = 0;
while (usrMetaList != NULL) {
g_print("here_3");
NvDsUserMeta *usrMetaData = (NvDsUserMeta *) usrMetaList->data;
if (usrMetaData->base_meta.meta_type == NVDS_CROP_IMAGE_META) {
snprintf (fileFrameNameString, FILE_NAME_SIZE, "%s_frame_%d.jpg", osd_string, stream_num++);
NvDsObjEncOutParams *enc_jpeg_image = (NvDsObjEncOutParams *) usrMetaData->user_meta_data;
file = fopen (fileFrameNameString, "wb");
fwrite (enc_jpeg_image->outBuffer, sizeof (uint8_t),
enc_jpeg_image->outLen, file);
fclose (file);
}
usrMetaList = usrMetaList->next;
}
}
}
}
//std::chrono::time_point<std::chrono::system_clock> after = std::chrono::system_clock::now();
//auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(after - before).count();
//g_print("interval %d \n", (int)millis);
}
return GST_FLOW_OK;
error:
nvds_set_output_system_timestamp (inbuf, GST_ELEMENT_NAME (dsexample));
gst_buffer_unmap (inbuf, &in_map_info);
return flow_ret;
}
The errors are as follows.
gstdsexample.cpp:807:13: error: invalid conversion from ‘int’ to ‘GstFlowReturn’ [-fpermissive]
807 | return -1;
| ^
| |
| int
gstdsexample.cpp:848:33: error: invalid conversion from ‘gpointer’ {aka ‘void*’} to ‘NvDsObjEncCtxHandle’ {aka ‘_NvDsObjEncCtx*’} [-fpermissive]
848 | nvds_obj_enc_process (ctx, &frameData, surface, NULL, frame_meta);
| ^~~
| |
| gpointer {aka void*}
In file included from gstdsexample.cpp:30:
../../includes/nvds_obj_encode.h:92:28: note: initializing argument 1 of ‘bool nvds_obj_enc_process(NvDsObjEncCtxHandle, NvDsObjEncUsrArgs*, NvBufSurface*, NvDsObjectMeta*, NvDsFrameMeta*)’
92 | bool nvds_obj_enc_process (NvDsObjEncCtxHandle, NvDsObjEncUsrArgs *,
| ^~~~~~~~~~~~~~~~~~~
gstdsexample.cpp:849:32: error: invalid conversion from ‘gpointer’ {aka ‘void*’} to ‘NvDsObjEncCtxHandle’ {aka ‘_NvDsObjEncCtx*’} [-fpermissive]
849 | nvds_obj_enc_finish (ctx);
| ^~~
| |
| gpointer {aka void*}
In file included from gstdsexample.cpp:30:
../../includes/nvds_obj_encode.h:96:27: note: initializing argument 1 of ‘void nvds_obj_enc_finish(NvDsObjEncCtxHandle)’
96 | void nvds_obj_enc_finish (NvDsObjEncCtxHandle);
| ^~~~~~~~~~~~~~~~~~~
gstdsexample.cpp:886:1: error: jump to label ‘error’
886 | error:
| ^~~~~
gstdsexample.cpp:127:10: note: from here
127 | goto error; \
| ^~~~~
gstdsexample.cpp:803:3: note: in expansion of macro ‘CHECK_CUDA_STATUS’
803 | CHECK_CUDA_STATUS (cudaSetDevice (dsexample->gpu_id), "Unable to set cuda device");
| ^~~~~~~~~~~~~~~~~
gstdsexample.cpp:809:12: note: crosses initialization of ‘void* ctx’
809 | gpointer ctx = (gpointer) obj_ctx_handle;
| ^~~
gstdsexample.cpp:804:23: note: crosses initialization of ‘_NvDsObjEncCtx* obj_ctx_handle’
804 | NvDsObjEncCtxHandle obj_ctx_handle = nvds_obj_enc_create_context (gpu_id);
| ^~~~~~~~~~~~~~
make: *** [Makefile:80: gstdsexample.o] Error 1