libcamera has been maturing since it's first announcement at the Embedded Linux Conference Europe in Edinburgh in 2018, and is now used by platforms including the Raspberry Pi, Rockchip, NXP and the Intel IPU3. The conversion from V4L2 to the libcamera API has required applications to face updates that they weren't necessarily expecting.
For Desktop Ubuntu, this is becoming apparent with a growing range of existing laptops that use the IPU3, or newer devices that use an IPU6 based camera system from Intel. For Embedded Ubuntu, users of ROS with Raspberry Pi, or other embedded platforms find themselves now looking at a new camera stack.
In this talk, we look at some current applications that utilise cameras, and how to ensure they will work well with libcamera platforms, or what to do if you find your application which used to work on a legacy V4L2 camera stack, now has a libcamera requirement. We will look at how desktop camera integration can be handled with PipeWire and the XDG camera portal, providing a layer of security on top of libcamera, and the provision of multiple applications being able to access the camera simultaneously, and what that will mean for applications, and users. We'll also look at the expanding ways that applications can access cameras on these platforms, using the libcamera native API, GStreamer element, Python bindings, or the V4L2 adaptation layer wrapper 'libcamerify', and what extra development is needed on those layers.
Session author bios
Kieran Bingham is an embedded software engineer working with Ideas on Board and specialising in Linux kernel developments with a focus on media related subsystems. Kieran has worked with embedded Linux systems for over 16 years through professional service companies and silicon vendors and now focuses on upstream-first projects. He has previously presented at the Embedded Linux Conference, Automotive Linux Summit, and Linaro Connect. As one of the core libcamera developers, he is always interested in seeing how libcamera is used, and how it can be used to support new use cases.
|Level of Difficulty||Intermediate|