Hi Tim,

On Thursday 13 August 2009 01:32:22 Tim Harvey wrote:
> I'm looking at using multiple UVC cameras which likely will not support
> MJPEG.  I'm curious how to calculate my max framerate for a given
> resolution and number of cameras based on a single USB 2.0 bus and thus
> am trying to understand the calculation and the architecture of UVC and
> the uvcvideo driver.
>
> I recall reading somewhere (perhaps the uvccapture source) the uvcvideo
> driver (or perhaps UVC itself, or perhaps a limitation of uvccapture)
> was not able to capture still images from cameras and instead it would
> put the camera in streaming mode and grab frames as directed.

UVC specifies 3 different methods to support still capture. The most simple 
one (method 1) is to just take the next frame from a video stream. There's 
nothing required on the camera side for this, making it a very simple and 
popular method among camera developers.

Two other methods are also possible. One of them (method 2) involves 
temporarily stopping the video stream, negotiating still image capture 
parameters, get a still image from the camera through the video stream and 
then resuming video streaming. The other (method 3) uses a separate bulk 
endpoint to stream the still image.

I've never seen any camera implementing the last method. Method 2 is supported 
by several webcams, but not by the UVC driver. One main obstacle to getting 
that supported by the driver is the lack of a still image capture API in v4l2.

> If this is true then even if I only want to grab 1 frame per second from
> each camera (to lower overall USB bandwidth) the bus would still need to
> support the full-framerate stream from each camera. Is this true?

Even if both the driver and the device supported still capture, the UVC 
specification doesn't clearly state that still image capture is supported 
while no video stream is active, so it's not clear how the camera would behave 
in such a case.

> Is the streaming framerate a per-camera feature so that I can't necessarily
> count on any given UVC camera to allow me to stream only 1fps on the bus?

It's a camera feature, yes. You need to check the USB descriptors for the 
available frame rates.

Furthermore, the required bandwidth is also a per-camera feature. Some cameras 
will require a lower bandwidth when you lower the frame rate, some won't. This 
depends on the size of the camera frame buffer, which is usually quite small 
(maybe a few lines). The camera would need to be able to buffer a full frame 
to send low frame rates at lower bandwidths.

--
Regards,
 
Laurent Pinchart
_______________________________________________
Linux-uvc-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to