I'm working with board based on Nitrogen6x using v4l2 for capturing mt9v131 Aptina sensor through mxc capture drivers.
Sensor is connected through csi and ipu and works with mxc_v4l2_capture.c subsystem.
As it has FRAME_NUM = 10 buffer frames i have a video stream with delay of 10 frames. One of solutions i have found to have fresh frame is to dequeue and queue buffers as long as it possible with timeout = 0 while select returns something with Read descriptor. When select returns an error you have a latest frame or, as it could be, have to wait for timeout != 0 (corresponding with your FPS).
So, the problem is that select with timeout = 0
res = select(handlePrivate->devHandle + 1, &readFDSet, NULL, NULL, 0);
everytime returns 1, means that something is to be readed. It happens even in endless loop with select request only.
The questions are:
- Is the camera filedescriptor has something to read? What could it be? Not only frames?
- Maybe there is a more elegant way to get latest frame with v4l2?
Thanx for suggestions!
P.S. I've tried this solution with USB webcam and it worked fine.