tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

GSoC - USB Video Class (UVC) webcam driver

Hi, I'm Patrick Mahoney and my Summer of Code project has
been accepted.  I'll be implementing a driver for the USB
Video Class (UVC) specification.

Compliance with the UVC spec [1] is a requirement for the
"Certified for Windows Vista", so it is expected that many
future webcams will be supported by this driver.  For those
interested in buying a webcam, be sure to check the box for
"Certified for Vista".  Many cameras say "Works with Vista",
but this is not enough.


I currently have a Panasonic PV-GS9 camcorder and a Logitech
QuickCam Deluxe for Notebooks [2].  Based on some web
searching, I believe the less expensive Envision V-CAM is
UVC [3], but don't quote me on that.  The Linux UVC driver
page [4] has a list of many webcamcs as well.  After
plugging in the device, a USB interface of class 0xE
indicates a UVC device (there should typically be at least
two such interfaces: one is the Control interface and the
other the Streaming interface).


The driver project page is
which will (soon) be updated with information as the driver


One design decision that must be made is the API that the
driver will export.  My mentor Jared suggested exporting a
NetBSD/UVC specific API while providing a compatibility
layer to translate the Video4Linux (or Video4Linux2) API as
is done with the OSS audio driver.  Many user applications
use the Video4Linux API, so supporting this would help in
getting application support.

The native API is very much up in the air; comments are very
much welcome.  Currently, NetBSD has the bktr(4) API for
video capture cards.  For a new API, the obvious choice is
to design something that mimics the UVC spec.  In a
nutshell, UVC provides endpoints that either provide
(webcam) or accept (recording device) video frames, a means
of negotiating the video format details, various enumerated
controls such as brightness and focus, and "extended"
controls that must be interpreted by the application (each
control provides information about the range of valid
values, the step size, default value).

In Video4Linux and probably any API I would design, each
call to read() returns at most a single frame of video (or
packet of an MPEG stream).  It is up to the application to
determine or negotiate the format beforehand with the
appropriate ioctl's.  These ioctl's could closely follow the
UVC spec, which is hopefully designed well to gracefully
cover a wide range of video hardware.

Home | Main Index | Thread Index | Old Index