Hello, I sent this to the video 4 linux mailing list earlier, but perhaps it's more appropriate here since the code is very uvc specific. I've created a small c program that uses pure v4l2 code to read from a webcam on a uvc driver then copy that data into an SDL overlay. I've posted the code here: http://basementcode.com/serverMain.html and I've attached a log file I created from the output of that program. Overall the program works great except that after a few frames, about 35 (varies each run) in my case, the select() function that is supposed to block until new data from the webcam is available stops working and returns right away. This isn't a huge problem because the following ioctl(fd, VIDIOC_DQBUF, &buf) call simply fails and sets errno to EAGAIN, then my app simply tries again and again until it works. I'd rather select worked for the entire duration of the capture to save cpu time and make sure that I read the frame asap each time. The relevant function in the code I posted above is "mainLoop", however I can't be sure the error is actually in that function. I hope I've posted enough information. Thanks in advance, Chris.
//The code for this log can been seen at: // http://basementcode.com/serverMain.html // Commandline = $./camTest /dev/video0 -w 640 -h 480 Device name: /dev/video0 Requested Width: 640 Requested Height 480 ---------Device Capabilities--------- Driver: uvcvideo Name: UVC Camera (046d:08ca) Bus: 0000:00:02.1 Driver Version: 0.1.0 Video Capture: Yes Read/write: No Async IO: No Streaming: Yes ------------------------------------- ----------Device Connections--------- Input #0 Name: Camera 1 Type: Camera Video standard: 0 ------------------------------------- Set to input 0 -------Image format enumeration----- Format #0 MJPEG Pixel format id: 1196444237 Type: V4L2_BUF_TYPE_VIDEO_CAPTURE Compressed: Yes Format #1 YUV 4:2:2 (YUYV) Pixel format id: 1448695129 Type: V4L2_BUF_TYPE_VIDEO_CAPTURE Compressed: No ------------------------------------- Default image format locked! Current image format: Width: 640 Height 480 PixelFormat: 1448695129 Bytes per line: 1280 Feild: V4L2_FIELD_NONE Image code: YUYV Colorspace: V4L2_COLORSPACE_SRGB Got 20 buffers for memory map streaming. OverLay has 1 planes. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Got image. Again. Again. Again. Again. Again. Again. Got image. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Got image. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Again. Got image. ... ... ... ... This output repeats until the program shuts down. ... ... ... ... Again. Again. Again. Again. Again. Again. Again. Got image. Unmapped all 20 buffers.
_______________________________________________ Linux-uvc-devel mailing list [email protected] https://lists.berlios.de/mailman/listinfo/linux-uvc-devel
