Hi,
I've posted the stuff below a while ago - but I've just discovered I was
actually replying privately to the original poster by mistake. So a bit
late, but I will post it again to the list - just in case anybody is
interested.
On 09/08/2010 03:04 PM, Martin wrote:
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.
I have managed to get 4 cameras working, at 10fps and 640x480 on one usb
2.0 controller. The only way I managed to achieve this was by using
mjpeg capable cameras - and forcing the stream in mjpeg format directly
from the webcam - not in raw video.
Also, according to my experiments - it looks like the compression rate
varies from camera to camera (probably a characteristic of the internal
chipset) - which will affect the usb bandwidth used. I have 4 different
mjpeg capable webcam models - I could run some measurements.
VLC is capable of requesting mjpeg stream. FFmpeg was capable - but the
syntax changed. However, it looks like it is possible to set the camera
in mjpeg mode using v4l2-ctl first - which would open up the possibility
of using other capture software which is not capable of requesting an
mjpeg stream - I think.
One more thing - avoid Microsoft LifeCam Cinema HD - it requests a
constant amount of bandwidth - regardless of resolution or compression
used - so that is a no go. Unless you modify the v4l2/uvc driver - to
ignore the bandwidth requests from camera.
Hope the above helps a bit,
Sebastian
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
[email protected]
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel
_______________________________________________
Linux-uvc-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel