Live FullHD video display on TX2i

Hello,

I’m currently having some troubles with one of my project.

I work on a TX2i platform. I need to acquire a full HD (1920x1080p) video via SDI, process it for video enhancement and then display it in FHD. Framerate is always 25 fps.

The application is programmed in C++/Cuda. Acquisition is made with V4L2 using a specific card connected on the M2 port. Display is performed with “imshow()” from OpenCV. The video processing part is under 35 milliseconds and mainly uses the GPU. NVP Model is set to 0 and jetson-clocks is launched.

Output frames are uncompressed 8bits Grayscale images.

At execution, I encounter a huge latency (around 2-3 seconds). Many frames are also skipped within the video flow. This problem does not appear if I set the display output on lower definition like HD (1280x720p). The display output definition and framerate are set with xrandr.

I tried to disable the processing part to free some resources for display but it doesn’t even reduce the issue.

Is the TX2i not supposed to be able to perform FHD display without struggle?

Do you have any ideas on how to resolve this issue? Maybe using something else than OpenCV but what?

VPI doesn’t seems to be made for this. Maybe libargus is more of a suitable candidate but I don’t see clearly how to use it. (Looks more MIPI capture oriented.)

Any help please?
Andrea

Hi,

Such issue is more likely to be on application side. Tegra side should be no problem since there are other users to run 1080p@60 fps usecase everyday. If you have any doubt about this part, maybe you can run our MMAPI sample and see if it can achieve the 60fps under FHD. I believe it can.

Could you check if you feed imshow() dummy frames, will it achieve the fps you need?

Hi WayneWWW,
Thanks for your answer.
I fed imshow() with dummy images it didn’t achieve the right fps but I think it helped me finding a solution.

I must admit that I feel a bit (a lot) stupid about it because I tried many other more complex solutions before, but changing the value of the waitkey() function seems to resolve my problem.
I used to have waitkey(1) now it’s waitkey(40)
I get why it can actually improve the display but I wonder if it is a “clean” solution ?

Thanks anyway for your help