Tool/software:
Hi, TI experts
I'm making my app base on "app_single_cam" in vision_apps.
I would like to divide it into two processes, the 'capture' process and the 'display' process
I think that a 'capture' process have CSI2-RX - VISS - LDC -(MSC) nodes, it can be designed vx pipeline schedule design same as "app_single_cam"
capture process send updated vx_image by pipelining to display node process,
however, the display process only has DSS (tivxDisplayNode) nodes.
I'm beginner to use tiovx framework, I'm not sure how to run a vxgraph that only uses tivxDisplayNode.
anyway, I tried make display process demo for unit test like this (simplified from my source)
// make vx_image
obj->source_img = tivx_utils_create_vximage_from_bmpfile(obj->context, filename, vx_false_e);
// connect display to source
obj->display_image = obj->source_img
// make display node
memset(&obj->display_params, 0, sizeof(tivx_display_params_t));
obj->display_params.opMode = TIVX_KERNEL_DISPLAY_ZERO_BUFFER_COPY_MODE;
obj->display_params.pipeId = 0;
obj->display_params.outHeight = 1080;
obj->display_params.outWidth = 1920;
obj->display_params.posX = 0;
obj->display_params.posY = 0;
obj->display_param_obj = vxCreateUserDataObject(obj->context, "tivx_display_params_t", sizeof(tivx_display_params_t), &obj->display_params);
obj->displayNode = tivxDisplayNode(obj->graph, obj->display_param_obj, obj->display_image);
// make gragh queue param
graph_parameters_queue_params_list[graph_parameter_num].graph_parameter_index = graph_parameter_num;
graph_parameters_queue_params_list[graph_parameter_num].refs_list_size = obj->num_buf;
graph_parameters_queue_params_list[graph_parameter_num].refs_list = (vx_reference*)&(obj->display_image);
tivxSetGraphPipelineDepth(obj->graph, 1);
vxSetGraphScheduleConfig(obj->graph,
VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO,
1,
graph_parameters_queue_params_list
);
// run gragh
// start enque
vxGraphParameterEnqueueReadyRef(obj->graph, 0, (vx_reference*)&(obj->display_image), 1);
// deque
vxGraphParameterDequeueDoneRef(obj->graph, 0, (vx_reference*)&test_image, 1, &num_refs_capture);
// re enque
vxGraphParameterEnqueueReadyRef(obj->graph, 0, (vx_reference*)&test_image, 1);
when this app run,
image shows correctly in monitor, but app process hanged like this.
vxSetGraphScheduleConfig done
79.032796 s: VX_ZONE_INFO:[ownNodeKernelValidate:256] Validating kernel com.ti.display
79.033254 s: VX_ZONE_INFO:[ownNodeKernelInit:563] Calling create callback for node node_89
79.034193 s: VX_ZONE_INFO:[ownNodeKernelInit:583] Create callback for node node_89 completed
79.034302 s: VX_ZONE_INFO:[ownGraphNodeKernelInit:615] kernel init for node 0, kernel com.ti.display ...
79.034316 s: VX_ZONE_INFO:[ownGraphNodeKernelInit:626] kernel init for node 0, kernel com.ti.display ... done !!!
79.042260 s: VX_ZONE_INFO:[ownDataRefQueueEnqueueReadyRef:90] Q (queue=15, ref=4)
79.042332 s: VX_ZONE_INFO:[ownGraphScheduleGraph:843] Scheduling Graph (graph=18, pipe=0)
79.042349 s: VX_ZONE_INFO:[ownNodeKernelSchedule:800] Scheduling Node (node=7, pipe=0)
enque start ... done
79.042431 s: VX_ZONE_INFO:[ownDataRefQueueDequeueDoneRef:166] DQ (queue=16) .. NO BUFFER
79.042630 s: VX_ZONE_INFO:[ownCheckGraphCompleted:751] Graph Completed (graph=18, pipe=0)
79.042645 s: VX_ZONE_INFO:[ownCheckGraphCompleted:779] All Graphs Completed
my question:
Like this, do I have to operate with pipeline scheduling even if I only use the display node in graph?
or is there other way to run display node?
if pipeline scheduling is needed to run graph
can i get guide to this design?