Video Capture (UVC)

Example source: examples/device/video_capture

A USB Video Class (UVC) camera that streams generated color-bar frames.

What it does

  • Presents itself as a UVC camera and streams 128x96 video at 10 fps.

  • By default generates YUY2 (uncompressed) color-bar frames into a RAM frame buffer; build options select alternatives: CFG_EXAMPLE_VIDEO_READONLY streams fixed MJPEG images from flash (or YUY2 with CFG_EXAMPLE_VIDEO_DISABLE_MJPEG), and CFG_EXAMPLE_VIDEO_BUFFERLESS fills the payload on the fly.

  • Uses an isochronous streaming endpoint by default (bulk if CFG_TUD_VIDEO_STREAMING_BULK is set).

  • Adopts the frame interval requested by the host at stream commit.

  • Blinks the board LED to indicate USB state (not mounted / mounted / suspended).

USB Descriptors

Interface

Class driver

0–1

UVC video (control + streaming)

Configuration

Notable tusb_config.h settings:

#define CFG_TUD_VIDEO                       1
#define CFG_TUD_VIDEO_STREAMING            1
#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE 256
#define CFG_TUD_VIDEO_STREAMING_BULK       0   // 0 = isochronous, 1 = bulk streaming

Building

CMake:

mkdir build && cd build
cmake -DBOARD=raspberry_pi_pico ..
cmake --build .

Make:

make BOARD=raspberry_pi_pico all

Try it

The device appears as a webcam. On Linux, find it with v4l2-ctl --list-devices and view it with ffplay /dev/videoN or any camera app. You should see scrolling color bars.