I am developing an application in Golang that uses the CSI camera port. I have tried a couple of different approaches (OpenCV, as well as Webcam library for Go, that uses V4L). The camera seems to suffer terribly low frame rates, and I read online that using GUVCView and changing the exposure from Auto to Manual will greatly assist. I tried this first on my desktop, and sure enough, I went from 9FPS to a solid 30FPS (max of the USB camera I was using). However when I try to use GUVCView on my Raspberry Pi (8GB version) running Ubuntu MATE, I can never get more than 1.32FPS. The image is terrible too, regardless of what pixel format I use etc. and the resolution is stuck at 32*32.
OpenCV (running as GoCV package and compiled in Golang) presents me with an image using the CSI camera, however it has huge latency and a very low frame rate (about 4FPS, so still better than GUVCView, but nowhere near as good as the camera can deliver if I were using Raspbian OS). This has zero image manipulation in it, simply acquiring the camera image and presenting it in my GUI canvas.
Note all my Raspberry Pi 4 tests are using an OV5647 based camera, plugged into the CSI port.
A final comment is that I found some research done by another company (albeit back in 2016) who stated that the CSI camera connects directly to the GPU, and the driver for this interface is exclusive to the Raspberry Pi foundation (closed source). Therefore the assumption is that any other OS is not going to deliver the same standard of video quality/frame rate. Is this true for Mate today in 2021?
So basically my question is, is it even possible to use the CSI camera effectively in MATE? Why does GUVCView struggle to achieve a decent image? I have also installed the V4L ctrl utilities, but nothing there appears to reveal anything more on the issue.