This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VH-Q1: Display graph stuck at vxGraphParameterDequeueDoneRef() in multi graph scenario

Part Number: TDA4VH-Q1

Hi TI,

SDK 9.2.0.5

Goal: To be able to switch display input of two mosaic nodes using user input.

The design of the app is as below:

Graph1:

The OD graph(graph1) has four pipelines running in four different tasks each giving draw box detection output. The OD chain is as below

ldc1->msc1->preproc1->tidl1->drawbox1

ldc2->msc2->preproc2->tidl2->drawbox2

ldc3->msc3->preproc3->tidl3->drawbox3

ldc4->msc4->preproc4->tidl4->drawbox4

The four LDC images are coming from an another graph.

This graph is storing its output in a common object array as show in the diagram.

Graph2:

This is having only one node that is Mosaic node. Its job to mosaic the four images that are stored by graph1 and store its output in an object array on first position of it. This object array is common between graph2, graph3, graph4 as shown in the diagram.

Graph3:

Similar to graph2, only has one node that is mosaic node, mosaics two images instead of four and store the output in second position in the object array as shown in the diagram.

Graph4:

This graph is having only one node that is display node. This takes input of the two mosaic nodes stored by graph2 and graph3. The refs list size of this graph is 1 and ref list is the second common object array.

The bufq depth of drawbox detection nodes in od graphs is 4. The changes in the drawbox detection for writing its output in the object array are as below:

The in_imgOD array contains references of the object array elements that is common between graph1, graph2 and graph3. 

Note: The bufq depth is 4 for draw detection nodes but I am only storing their output0(in code) image in the respective positions in in_imgOD array.  Is it causing the issue?

I also tried to store the second buffers output (output1 in code) of drawbox3 and drawbox4 to a different object array then use that object array for graph3 refs list but that was not working either.


Issue Facing:
The display graph is stuck at vxGraphParameterDequeueDoneRef().Its not even running once. Stuck on first call in the enqueue-dequeue loop.

Note: When I comment one of the graph from graph2 and graph3 then the graph4 runs. It also switches the image just the image is blank only for one graph that is commented.

I am doubting its related to bufq depth but not sure.

Tried another design where I put both the mosaic nodes in the display graph but writing their output to the same object array gives a runtime error. "Two nodes of graph are trying to write the same edge". 

How can I implement this to be able to switch between two mosaic outputs in display node ?

Thanks and regards,
Lalit

  • Hi Lalit

    The main requirement to switch in the display node is a vx_image extracted from an object array that is sent as parameter to the display image. After this, you would have to switch the active channel using the display node's control command.

    In your case, I see that you are combining the images from 2 mosaic node into an object array. May I know how you did this? If this implemented correctly, then you could have to send the 0th instance of object array to display node and then use to control command to switch the active channel.

    Regards,

    Nikhil

  • Hi Nikhil,

    Below is how I am storing the output of the two mosaic nodes in an object array

    Display Node creation:

    Display graph refs_list:

    regards,

    Lalit

  • Hi Lalit,

    If you are making the display node output as graph parameter. In this case you could feed the images from the mosaic node directly to the display from the application itself, right?

    May I know if you could try this option?

    Regards,

    Nikhil

  • Hi Nikhil,

    Is display node output image visible to the application? I don't see that in the parameters list of display node. Only configuration and input image is there. Correct me if I am wrong.

    UPDATE: I have a really strange observation here. So, the display graph is stuck at dequeue but I can see the output on display. BUT, it is only that channels(Mosaic output) output which is passed to the tivxDisplayNode(). IT DOES NOT SWITCH.

    Case1: I pass disp2_hdlr_obj_ptr->in_img[DISP2_CH_SRV] as input image. The expected output displays on monitor and it is live view. Checked with moving the camera around. It is updating on the display. Not stuck or anything.

    Case2: Same as case1 I pass disp2_hdlr_obj_ptr->in_img[DISP2_CH_SPLITVIEW] now. It shows on the display as expected. 

    How is this possible that graph is stuck at dequeue but I can see the output on the display ? When I disable the graph it doesn't show anything so I am sure that this graph only is giving the output to the display. 

    regards,

    Lalit

  • Hi Lalit,

    Is display node output image visible to the application? I don't see that in the parameters list of display node. Only configuration and input image is there. Correct me if I am wrong.

    Yes, sorry that was a typo, I meant display input.

    Case1: I pass disp2_hdlr_obj_ptr->in_img[DISP2_CH_SRV] as input image. The expected output displays on monitor and it is live view. Checked with moving the camera around. It is updating on the display. Not stuck or anything.

    Case2: Same as case1 I pass disp2_hdlr_obj_ptr->in_img[DISP2_CH_SPLITVIEW] now. It shows on the display as expected. 

    How is this possible that graph is stuck at dequeue but I can see the output on the display ? When I disable the graph it doesn't show anything so I am sure that this graph only is giving the output to the display. 

    If the display input in a graph parameter and the display graph is a separate graph with only display node in it, then as long as the application does not provide an image to the display node (i.e. enqueue) the display graph does not execute.

    In order to understand how this is happening, could you please review your application? Is it possible to share the same here? 

    Regards,

    Nikhil