#1142599 Wishlist: gspca_spca561 exposes only S561 and GBRG formats, unusable by modern PipeWire/WebRTC camera applications

#1142599#5
Date:
2026-07-22 13:03:35 UTC
From:
To:
The hardware of the tested USB camera is as follows:
# lsusb -v -d 046d:092f | egrep -i "idProduct|idVendor"
   idVendor           0x046d Logitech, Inc.
   idProduct          0x092f QuickCam Express Plus

Windows 11 says it's “Logitech Quickcam Express/Go”.

The camera is handled by the gspca_spca561 driver:

# readlink -f /sys/class/video4linux/video1/device/driver
/sys/bus/usb/drivers/spca561


Problem: The driver exposes only S561 (320×240 and 352×288) and GBRG (160×120 and 176×144) formats:


$ v4l2-ctl -d /dev/video1 --all --list-formats-ext
Driver Info:
         Driver name      : spca561
         Card type        : Camera
         Bus info         : usb-0000:00:14.0-5.1
         Driver version   : 6.12.96
         Capabilities     : 0x85200001
                 Video Capture
                 Read/Write
                 Streaming
                 Extended Pix Format
                 Device Capabilities
         Device Caps      : 0x05200001
                 Video Capture
                 Read/Write
                 Streaming
                 Extended Pix Format
Priority: 2
Video input : 0 (spca561: ok)
Format Video Capture:
         Width/Height      : 352/288
         Pixel Format      : 'S561' (GSPCA SPCA561)
         Field             : None
         Bytes per Line    : 352
         Size Image        : 50688
         Colorspace        : sRGB
         Transfer Function : Default (maps to sRGB)
         YCbCr/HSV Encoding: Default (maps to ITU-R 601)
         Quantization      : Default (maps to Full Range)
         Flags             :
Streaming Parameters Video Capture:
         Frames per second: invalid (0/0)
         Read buffers     : 2

User Controls

                      brightness 0x00980900 (int)    : min=-128 max=127 step=1 default=0 value=0 flags=slider
                             hue 0x00980903 (int)    : min=1 max=127 step=1 default=64 value=64 flags=slider
                        exposure 0x00980911 (int)    : min=1 max=2372 step=1 default=700 value=700
                            gain 0x00980913 (int)    : min=0 max=255 step=1 default=63 value=70
ioctl: VIDIOC_ENUM_FMT
         Type: Video Capture

         [0]: 'S561' (GSPCA SPCA561, compressed)
                 Size: Discrete 320x240
                 Size: Discrete 352x288
         [1]: 'GBRG' (8-bit Bayer GBGB/RGRG)
                 Size: Discrete 160x120
                 Size: Discrete 176x144


Modern PipeWire camera applications cannot use the camera directly. Snapshot doesn't detect the camera, and Firefox and Chromium see the camera but cannot obtain a usable video stream.

The only workaround known to me is a cumbersome multistep process requiring root privileges:
1) Determine the /dev/video… device corresponding to the camera from the output of `v4l2-ctl --list-devices`. In our test, this is /dev/video1, and it's subject to change (say, at boot or when re-plugging).
2) Create a loopback device:
    $ sudo modprobe -r v4l2loopback
    $ sudo modprobe v4l2loopback video_nr=10 card_label="QuickCam Express (converted)" exclusive_caps=1
3) Convert the stream and feed it into the loopback device in a new xterm:
    $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libv4l/v4l2convert.so ffmpeg -f v4l2 -video_size 352x288 -i /dev/video1 -f v4l2 /dev/video10
    Keep the process running as long as you need the camera (to quit, hit “q”). The maximal resolution was taken from the output of `v4l2-ctl -d /dev/video1 --list-formats-ext`.
4) Restart PipeWire components:
    $ systemctl --user restart pipewire pipewire-pulse wireplumber
5) Applications can then use the virtual camera exposed through /dev/video10. Tests:
    $ snapshot
    $ ffplay -f v4l2 /dev/video10
    $ firefox https://webcamtests.com
    $ chromium https://webrtc.github.io/samples/src/content/getusermedia/resolution

Wish:
Please consider exposing at least one commonly supported standard V4L2 pixel format in addition to the existing S561 and GBRG formats. Examples include YUYV or another standard format directly usable by modern PipeWire/WebRTC camera applications. This would allow the camera to be used directly by applications such as Snapshot, Firefox, and Chromium without requiring an ffmpeg + v4l2loopback conversion pipeline.