Part Number: TDA4VH-Q1
Tool/software:
Hi TI,
We want to log viss/ldc output images continuously with as much FPS as we can get. I want to access both viss and ldc output buffers. Questions:
1. Is it possible to access buffers set by tivxSetNodeParameterNumBufByIndex() api while the graph is running? I have read tiovx graph pipeline documentation and there it is mentioned that the application can only access graph parameter buffers. Just wanted to confirm.
2. In my graph the capture node output is the graph parameter. I tried making viss node output image (params idx = 6) also as graph parameter but the output I am getting is as below(attached a recording) and I am getting some errors also.(attached terminal ss)
I have read the FAQ on how to create viss node output as graph parameters and I am following exact same steps as mentioned in the single cam patch in my application.
The buffer queue depth for both capture and viss output is 4.
code snippet for enqueue dequeue is below:
/*!
* CMS Graph pipeline enqueue references : pipe up + execute first reference
* Pipe up -> Enqueue input references (NUM_BUFS - 1) times but do not trigger graph execution
* Execute first reference -> after pipe up, now enqueue a buffer to trigger graph scheduling
*/
for (buf_id = 0; buf_id < NUM_BUFS; buf_id++)
{
status = vxGraphParameterEnqueueReadyRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->captureObj.graph_parameter_index,
(vx_reference *)&class_ii_iv_graph_obj_ptr->captureObj.raw_image_out_arr[buf_id],
1);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph enqueue failed for capt cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
status = vxGraphParameterEnqueueReadyRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->vissObj.graph_parameter_index,
(vx_reference *)&class_ii_iv_graph_obj_ptr->vissObj.out_arr[buf_id],
1);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph enqueue failed for capt cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
}
/* dequeue first and then after alternate executed reference from graph parameter.
* check TIVX_OBJ_DESC_QUEUE_MAX_DEPTH if do not want to use dequeue.
* enqueue back first or alternate reference into graph parameter after dequeue.
*/
while (!class_ii_iv_graph_obj_ptr->stop_task_graph)
{
for (buf_id = 0; buf_id < NUM_BUFS; buf_id++)
{
/* Dequeue one image buffer */
status = vxGraphParameterDequeueDoneRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->captureObj.graph_parameter_index,
(vx_reference *)&raw_image_temp,
1,
&num_refs);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph dequeue failed for capt cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
/* Dequeue one image buffer */
status = vxGraphParameterDequeueDoneRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->vissObj.graph_parameter_index,
(vx_reference *)&viss_out_temp,
1,
&num_refs);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph dequeue failed for viss cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
status = vxGraphParameterEnqueueReadyRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->captureObj.graph_parameter_index,
(vx_reference *)&class_ii_iv_graph_obj_ptr->captureObj.raw_image_out_arr[buf_id],
1);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph enqueue failed for capt cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
status = vxGraphParameterEnqueueReadyRef(class_ii_iv_graph_obj_ptr->graph,
class_ii_iv_graph_obj_ptr->vissObj.graph_parameter_index,
(vx_reference *)&class_ii_iv_graph_obj_ptr->vissObj.out_arr[buf_id],
1);
if (status != VX_SUCCESS)
{
GEN3_DBG_PRINTF_ERR("ERROR: graph enqueue failed for viss cl2 cl4 out arr[%d], status = %d\n", buf_id, status);
}
}
}

regards,
Lalit
