Part Number: TDA4VM
Tool/software:
Hi team,
I'm working on SDK 08_02_00_05(Linux+RTOS).
When testing a application, I'm facing the below Segmentation fault.
In app_run_graph_for_one_frame_pipeline function, after completing execution of if(obj->pipeline < 0), it is directly reaching end of app_run_graph_for_one_frame_pipeline, instead of executing else if(obj->pipeline >= 0), which causing segmentation fault.
What could be the reason for this behaviour? how to avoid it.
root@j7-evm:/opt/vision_apps# ./btc_tpa_dl_base.out --cfg btc_tpa_dl.cfg
APP: Init ... !!!
MEM: Init ... !!!
MEM: Initialized DMA HEAP (fd=4) !!!
MEM: Init ... Done !!!
IPC: Init ... !!!
IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!
85.048687 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!
85.055237 s: VX_ZONE_INIT:Enabled
85.055260 s: VX_ZONE_ERROR:Enabled
85.055271 s: VX_ZONE_WARNING:Enabled
85.059338 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
85.059509 s: VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!!
Default param set!
Parsed user params!
Updated user params!
end app_init_res_resize, vx_status:0
inside mesh img creation
resolution resize init Done!
app_init_color_conv_RGB_NV12() : ENTERING
app_init_color_conv_RGB_NV12() : EXITING
color_conv_RGB_NV12 Done!
[LDC-MODULE] configure_dcc_params() : ENTERING
[LDC-MODULE] configure_dcc_params() : Setting DCC config object to NULL!
[LDC-MODULE] configure_dcc_params() : EXITING
LDC init done!
Scaler Init Done!
Computing checksum at 0x0000FFFFA5E62F00, size = 785072
TIDL Init Done!
Pre Proc Update Done!
Pre Proc Init Done! +-----------------------------+
APP_INIT Number of Input Tensors in draw detections 1 | |
rci postproc Update Done! | Cannot open /dev/ttyUSB0! |
rci postproc Init Done! | |
App Init Done! +-----------------------------+
I am inside app_create_graph_reso_res
Before tivxResoResizeNode !
tivxResoResizeNode after!
Tensor releasing Start Done!
Tensor releasing Done!
app_create_graph_res_resize graph done!
app_create_graph_color_conv_RGB_NV12() : ENTERING
Color convert RGB_NV12 node create started
Color convert node RGB_NV12 create done
app_create_graph_color_conv_RGB_NV12() : EXITING
app_create_graph_color_conv_RGB_NV12 graph done!
[LDC-MODULE] app_create_graph_ldc() : ENTERING
[LDC-MODULE] app_create_graph_ldc() : DCC config object is NULL
printing the status of output image:0
[LDC-MODULE] Created LDC node without DCC config and NULL mesh_config!
[LDC-MODULE] app_create_graph_ldc() : EXITING
LDC graph done!
scaler Create Done!
pre proc Create Done!
TIDL Create Done!
RCI Create Postproc Done!
App Create Graph Done!
App Verify Graph Done!
App Send MSC Command Done!
App Verify Graph Done!
before app_run_graph_for_one_frame_pipeline
inside obj->pipeline < 0
pipeline value:-1, enqueue count:0
App Reading Input Done!
before vxGraphParameterEnqueueReadyRef
after vxGraphParameterEnqueueReadyRef
pipeline value:0, enqueue count:0
App Process Graph Done!
after app_run_graph_for_one_frame_pipeline
app_tidl_rci_od: Frame ID 0 of 1 ... Done.
value of count:0
app_tidl_od: Iteration 0 of 1 ... Done.
Segmentation fault (core dumped)
root@j7-evm:/opt/vision_apps#
static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 frame_id)
{
vx_status status = VX_SUCCESS;
//vx_uint32 actual_checksum = 0;
vx_char input_file_name[APP_MAX_FILE_PATH];
vx_char output_file_name[APP_MAX_FILE_PATH];
vx_int32 obj_array_idx = -1;
//ColorConvRGBNV12Obj *colorConvRGBNV12 = &obj->colorConvRGBNV12Obj;
//ImgMosaicObj *imgMosaicObj = &obj->imgMosaicObj;
ResResizeObj *resResizeObj = &obj->resResizeObj;
snprintf(input_file_name, APP_MAX_FILE_PATH, "%s/%06d.bmp", obj->input_file_path, frame_id);
appPerfPointBegin(&obj->total_perf);
if(obj->pipeline < 0)
{
/* Enqueue outpus */
printf("inside obj->pipeline < 0\n");
printf("pipeline value:%d, enqueue count:%d\n",obj->pipeline,obj->enqueueCnt);
appPerfPointBegin(&obj->fileio_perf);
/* Read input */
if(status == VX_SUCCESS)
{
status = readScalerInputRGB(input_file_name, obj->input.arr[obj->enqueueCnt], APP_MODULES_READ_FILE, 0);
}
appPerfPointEnd(&obj->fileio_perf);
APP_PRINTF("App Reading Input Done!\n");
/* Enqueue input - start execution */
if(status == VX_SUCCESS)
{
printf("before vxGraphParameterEnqueueReadyRef\n");
status = vxGraphParameterEnqueueReadyRef(obj->graph, resResizeObj->graph_parameter_index, (vx_reference*)&obj->input_images[obj->enqueueCnt], 1);
printf("after vxGraphParameterEnqueueReadyRef\n");
}
snprintf(output_file_name, APP_MAX_FILE_PATH, "%s/tidl_output_%0d", obj->output_file_path, frame_id);
writeTIDLOutput(output_file_name, &obj->tidlObj);
obj->enqueueCnt++;
obj->enqueueCnt = (obj->enqueueCnt >= APP_BUFFER_Q_DEPTH)? 0 : obj->enqueueCnt;
obj->pipeline++;
printf("pipeline value:%d, enqueue count:%d\n",obj->pipeline,obj->enqueueCnt);
}
else if(obj->pipeline >= 0)
{
printf("inside obj->pipeline >= 0\n");
printf("pipeline value:%d\n",obj->pipeline);
vx_image scaler_input_image;
//vx_image mosaic_output_image;
uint32_t num_refs;
/* Dequeue input */
if(status == VX_SUCCESS)
{
printf("before vxGraphParameterDequeueDoneRef resresize\n");
status = vxGraphParameterDequeueDoneRef(obj->graph, resResizeObj->graph_parameter_index, (vx_reference*)&scaler_input_image, 1, &num_refs);
printf("after vxGraphParameterDequeueDoneRef resresize\n");
}
if((obj->en_out_img_write == 1) || (obj->test_mode == 1))
{
//vx_char output_file_name[APP_MAX_FILE_PATH];
/* Dequeue output */
/*if(status == VX_SUCCESS)
{
printf("before vxGraphParameterDequeueDoneRef resresize\n");
status = vxGraphParameterDequeueDoneRef(obj->graph, imgMosaicObj->graph_parameter_index, (vx_reference*)&mosaic_output_image, 1, &num_refs);
printf("after vxGraphParameterDequeueDoneRef resresize\n");
}*/
/* Check that you are within the first n frames, where n is the number
of samples in the checksums_expected */
/*if(status == VX_SUCCESS)
{
if (obj->test_mode == 1 && (frame_id < (obj->start_frame + obj->num_frames - TEST_BUFFER)))
{
vx_uint32 expected_idx = frame_id - obj->start_frame - 1;
if(app_test_check_image(mosaic_output_image, checksums_expected[0][expected_idx],
&actual_checksum) == vx_false_e)
{
test_result = vx_false_e;
}*/
/* in case test fails and needs to change */
//populate_gatherer(0 , expected_idx, actual_checksum);
//}
//}
/*if ((obj->en_out_img_write == 1) && (status == VX_SUCCESS))
{
APP_PRINTF("App Writing Outputs Start...\n");
snprintf(output_file_name, APP_MAX_FILE_PATH, "%s/mosaic_output_%010d_1920x1080.yuv", obj->output_file_path, (frame_id - APP_BUFFER_Q_DEPTH));
status = writeMosaicOutput(output_file_name, mosaic_output_image);
APP_PRINTF("App Writing Outputs Done!\n");
}*/
/* Enqueue output */
/*if(status == VX_SUCCESS)
{
status = vxGraphParameterEnqueueReadyRef(obj->graph, imgMosaicObj->graph_parameter_index, (vx_reference*)&mosaic_output_image, 1);
}*/
}
//snprintf(output_file_name, APP_MAX_FILE_PATH, "%s/tidl_output_%0d", obj->output_file_path, frame_id);
//writeTIDLOutput(output_file_name, &obj->tidlObj);
printf("before appPerfPointBegin\n");
appPerfPointBegin(&obj->fileio_perf);
printf("after appPerfPointBegin\n");
if(status == VX_SUCCESS)
{
printf("before app_find_object_array_index\n");
app_find_object_array_index(obj->input.arr, (vx_reference)scaler_input_image, APP_BUFFER_Q_DEPTH, &obj_array_idx);
printf("after app_find_object_array_index\n");
}
if((obj_array_idx != -1) && (status == VX_SUCCESS))
{
status = readScalerInputRGB(input_file_name, obj->input.arr[obj_array_idx], APP_MODULES_READ_FILE, 0);
}
printf("before appPerfPointEnd\n");
appPerfPointEnd(&obj->fileio_perf);
printf("after appPerfPointEnd\n");
APP_PRINTF("App Reading Input Done!\n");
/* Enqueue input - start execution */
if(status == VX_SUCCESS)
{
status = vxGraphParameterEnqueueReadyRef(obj->graph, resResizeObj->graph_parameter_index, (vx_reference*)&scaler_input_image, 1);
}
printf("after vxGraphParameterEnqueueReadyRef\n");
obj->enqueueCnt++;
obj->dequeueCnt++;
obj->enqueueCnt = (obj->enqueueCnt >= APP_BUFFER_Q_DEPTH)? 0 : obj->enqueueCnt;
obj->dequeueCnt = (obj->dequeueCnt >= APP_BUFFER_Q_DEPTH)? 0 : obj->dequeueCnt;
}
appPerfPointEnd(&obj->total_perf);
APP_PRINTF("App Process Graph Done!\n");
return status;
}
Regards,
Chaitanya Prakash Uppala