Skip to content

Webcam

For quite some time already, I work with Dell laptops that ship with Ubuntu pre-installed. Usually, everything works. But Dell supports an LTS release, and I want to upgrade to newer versions of Ubuntu.

That's where I end up in the messy world of open source, where many actors across the software stack all have different timelines of keeping things up-to-date.

My attempt to make sense of it all.

USB versus MIPI

The core of the problem is a difference between USB and MIPI webcams.

USB
A complete camera for the host. Provides a relatively standardised interface that provides a stream of images via a well-defined device. Image handling is done on the device. A web browser can access this directly.
MIPI
A set of components to be coordinated by the host. Provides a raw data stream to hardware that is handled by a Linux kernel module, and offered via a different API. Image handling is done through firmware modules on the laptop. A web browser needs to access this through a separate layer in the desktop OS.

In layers:

USB MIPI MIPI
Browser Browser GNOME camera, Gstreamer
- xdg-desktop-portal -
PipeWire Pipewire -
- WirePlumber (session manager) -
V4L2 source (/dev/video* device) PipeWire node (media controller, /dev/media* and /dev/video*) -
- libspa-libcamera (PipeWire SPA plugin) -
- libcamera libcamera
UVC driver IPU6/Media drivers IPU6/Media drivers
kernel kernel kernel
  • UVC: USB Video Class

Intel MIPI Camera Stack: Component Roles

2025-05-25

Component Purpose Key Verification Command
Kernel Drivers Low-level communication with IPU6/7 hardware (e.g., ipu6, ivsc) lsmod \| grep -E 'ipu6\|ivsc\|v4l2loopback'
Firmware Microcode for camera signal processing ls /lib/firmware/intel/ipu6/*.bin
libcamhal Userspace HAL for format conversion and ISP tuning apt policy libcamhal0
v4l2-relayd Bridges libcamhal output to v4l2loopback virtual device systemctl status v4l2-relayd.service
v4l2loopback Virtual video device for app compatibility (e.g., /dev/video0) v4l2-ctl --device=/dev/video0 --all
Browser/App Permissions Grants access to virtual camera device snap connections firefox \| grep camera

History

Ever since I upgraded to Ubuntu 23.04, I have had problems with the MIPI webcam in my laptop. Sometimes I managed to get it working again, but not for 25.05 or 25.10. When I did, it usually took at least half a day of digging through forums and trying out things until I lost track of what I was doing.

In 2023, I used a separate package archive, ppa:oem-solutions-group/intel-ipu6, and managed to get it working. Back then, the IPU6 kernel driver required for the Intel MIPI webcam was "out-of-tree", and so not part of the regular Linux kernel.

Somewhere in 2025, this was supposedly resolved. But although I have my webcam partially working, I still loose track of how everything is supposed to work together. Search engines and AI platforms only offer very limited help: each web page, forum post, or AI answer addresses a slightly different combination of versions in the software stack, and actual developments are hard to map out.

It is inevitable to end up with a corpus of suggestions and advice that are often not accurate, not tailored to my situation, and not helping in creating insight.