OK, so the current linux UVC driver doesn't support still image capture. What is needed to implement that?
Is it just a case of programming in the data structures, or is there a lot more needed for decoding/converting a captured image and interfacing? Will a new /dev device need creating dedicated to still image capture?... How much interest is there for that? (Presumably there will be some so as to utilise HD webcams to their full resolution...) Regards, Martin On 30/08/10 12:30, Martin wrote: > On 27/08/10 15:14, Martin wrote: >> The problem: >> >> From reading around this list and elsewhere, it appears that you simply >> cannot run more than one webcam video stream per USB root hub. >> >> When enabled for video streaming, the webcam reserves the full >> isochronous bandwidth needed to stream data at the selected resolution >> and framerate, regardless... [...] >> *A possible solution* ? >> >> Instead, could the UVC driver 'simulate' a reduced framerate by instead >> using the "STILL_IMAGE_FRAME" mode of the webcam and grab for itself a >> set number of images per second? Or even only when polled by a read from >> the user application? >> >> On *nix, "everything is a file"... Could the uvc driver accept reading >> of /dev/videoX by the command "cp" so that still image data is copied, >> formatted for a jpg or png? >> >> Could the "quirks" setting be abused to set the image grab rate? Or some >> other neater method? > > That still looks to be the best solution. The webcam is supposed to > support still image capture, but how do I do that?! Is there a nice > little snippet of C code that I can compile to grab a still image to a > jpg or png? [...] >> Further details: >> >> I'm trying to use two webcams simultaneously: >> >> iManufacturer 1 Sweex >> iProduct 2 WC060 Series HD Webcam >> >> >> On separate hubs, they work fine. On the same hub, the second one to >> start shows the error: >> >> "Error starting stream VIDIOC_STREAMON: No space left on device". >> >> I've only got the one root hub on the system I want to use for the two >> webcams! >> >> >> Their descriptors show: >> >> bFrameIntervalType 2 >> dwFrameInterval( 0) 2000000 >> dwFrameInterval( 1) 4000000 >> >> >> Can I tweak the UVC driver to preferentially choose the slower frame >> rate available? >> >> Aside: The MJPG format doesn't seem to work, nor are any compression >> settings visible... >> >> >> Given a few hints or a patch, I can hack the kernel module to test :-) >> >> This is running on Gentoo, kernel 2.6.34 using the in-kernel uvc module. >> >> Any comment/ideas welcomed. >> >> Regards, >> Martin >> >> >> >> >> From lsusb -v (excerpt): >> >> VideoStreaming Interface Descriptor: >> bLength 34 >> bDescriptorType 36 >> bDescriptorSubtype 5 (FRAME_UNCOMPRESSED) >> bFrameIndex 9 >> bmCapabilities 0x00 >> Still image unsupported >> wWidth 1600 >> wHeight 1200 >> dwMinBitRate 768000 >> dwMaxBitRate 196608000 >> dwMaxVideoFrameBufferSize 3840000 >> dwDefaultFrameInterval 2000000 >> bFrameIntervalType 2 >> dwFrameInterval( 0) 2000000 >> dwFrameInterval( 1) 4000000 >> VideoStreaming Interface Descriptor: >> bLength 42 >> bDescriptorType 36 >> bDescriptorSubtype 3 (STILL_IMAGE_FRAME) >> bEndpointAddress 0 >> bNumImageSizePatterns 9 >> wWidth( 0) 640 >> wHeight( 0) 480 >> wWidth( 1) 352 >> wHeight( 1) 288 >> wWidth( 2) 320 >> wHeight( 2) 240 >> wWidth( 3) 176 >> wHeight( 3) 144 >> wWidth( 4) 160 >> wHeight( 4) 120 >> wWidth( 5) 800 >> wHeight( 5) 600 >> wWidth( 6) 1280 >> wHeight( 6) 960 >> wWidth( 7) 1280 >> wHeight( 7) 1024 >> wWidth( 8) 1600 >> wHeight( 8) 1200 >> bNumCompressionPatterns 9 _______________________________________________ Linux-uvc-devel mailing list Linux-uvc-devel@lists.berlios.de https://lists.berlios.de/mailman/listinfo/linux-uvc-devel