Skip to content
libcamera v0.3.1

The abi-compliance checker reports 100% binary and source compatibility,
so this release does not change the SONAME.

  Binary compatibility: 100%
  Source compatibility: 100%
  Total binary compatibility problems: 0, warnings: 0
  Total source compatibility problems: 0, warnings: 0

The following commits in this release relate to either a bug fix or
improvement to existing commit.

- ipa: rpi: Make monoSensor() accessor const
  - Fixes: 2031e2f29014 ("ipa: rpi: Add accessor function for monoSensor_")
- libcamera: dma_buf_allocator: Create memfd with CLOEXEC
  - Fixes: ea4baaacc325 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc
  - Fixes: ea4baaacc325 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- libcamera: dma_buf_allocator: Work around lack of file seals in uClibc
  - Fixes: ea4baaacc325 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- test: ipa: rkisp1: utils: Fix floating and fixed point conversion test
  - Fixes: 9d152e9c66c1 ("ipa: rkisp1: Add a helper to convert floating-point to fixed-point")
- ipa: rkisp1: Fix algorithm controls vanish after configure
  - Fixes: 4c5152843a2a ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")
- pipeline: rpi: Don't validate configuration in generateConfiguration()
  - Bug: https://github.com/raspberrypi/libcamera/issues/138
- ipa: rkisp1: agc: Fix initialization without metering modes
  - Fixes: 35233938ee5d ("ipa: rkisp1: agc: Read histogram weights from tuning file")
- v4l2: v4l2_compat: Fix redirect from `__open(at)64_2()`
  - Fixes: 1023107b6405 ("v4l2: v4l2_compat: Intercept open64, openat64, and mmap64")
- ipa: rkisp1: blc: Drop [[maybe_unused]] attribute
  - Fixes: 50c28e135100 ("ipa: rkisp1: blc: Query black levels from camera sensor helper")
- ipa: rkisp1: ccm: Fix ccm metadata output
  - Fixes: cbfdfa42cacc ("ipa: rkisp1: algorithms: Add crosstalk algorithm")
- gstreamer: pool: Replace GstAtomicQueue with deque and mutex
  - Bug: https://bugs.libcamera.org/show_bug.cgi?id=201
- gstreamer: allocator: Ensure camera manager stay alive
  - Bug: https://bugs.libcamera.org/show_bug.cgi?id=211

And the following updates have been made in this release, grouped by
category:

core:
 - treewide: Query list of cameras just once
 - libcamera: yaml_parser: Avoid double lookup in `operator[]`
 - utils: checkstyle.py: Refactor IncludeChecker
 - utils: checkstyle.py: Extend IncludeChecker to cover math.h
 - utils: checkstyle.py: Add a check for hex values
 - utils: checkstyle.py: Show location of coding style issue within line
 - update-kernel-headers: Add linux/udmabuf.h to headers to sync
 - include: linux: Update kernel headers to version v6.10-rc1
 - libcamera: v4l2_subdevice: Update to the new kernel routing API
 - libcamera: Rename DmaHeap class to DmaBufAllocator
 - libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf
 - libcamera: dma_buf_allocator: Create memfd with CLOEXEC
 - libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc
 - libcamera: dma_buf_allocator: Work around lack of file seals in uClibc
 - libcamera: Add gamma control id
 - clang-format: Make Qt includes matching case sensitive
 - meson: Group libipa and libipa_includes in a dependency object
 - libcamera: controls: Add missing period at end of Gamma description
 - libcamera: yaml_parser: Make default value templated in `get()`
 - libcamera: yaml_parser: Drop std::enable_if_t guards for get() function
 - libcamera: yaml_parser: Delegate YamlObject::get() to helper structure
 - libcamera: yaml_parser: Add support for float types
 - libcamera: base: log: Declare log categories when defining them
 - meson: Enable warnings to flag missing declarations
 - libcamera: Fix maybe-uninitialized error
 - converter: converter_v4l2_m2m: Rectify streams sanity check
 - converter: converter_v4l2_m2m: Rename private Stream class
 - libcamera: converter: Replace usage of stream index by Stream pointer
 - libcamera: base: utils: Implement hex() for 8-bit and 16-bit values
 - libcamera: v4l2_videodevice: Use bufferType_ in [get|try|set]Format()
 - utils: gen-version: Use posix compliant date

-----------------------------------------------------------------------------
ipa:
 - ipa: rpi: Make monoSensor() accessor const
 - ipa: rkisp1: Add a helper to convert floating-point to fixed-point
 - ipa: rpi: Disable StatsOutputEnable control by default
 - ipa: rkisp1: Fix algorithm controls vanish after configure
 - ipa: rkisp1: Add GammaOutCorrection algorithm
 - ipa: libipa: Add Vector class
 - ipa: libipa: Copy pwl from rpi, and clean it up to match libcamera
 - ipa: rpi: controller: Use libipa's Pwl class
 - ipa: rkisp1: goc: Fix typographical issues in documentation.
 - ipa: rkisp1: goc: Drop incorrect [[maybe_unused]]
 - ipa: rkisp1: goc: Use copydoc
 - ipa: rkisp1: goc: Mark default gamma table as static constexpr
 - ipa: rkisp1: goc: Avoid use of auto for short type
 - libcamera: libipa: camera_sensor: Define AR0521 helper functions inline
 - ipa: rkisp1: cproc: Use anonymous namespace to limit symbol visibility
 - ipa: rkisp1: cproc: Merge identical functions
 - ipa: rkisp1: cproc: Drop incorrect [[maybe_unused]]
 - ipa: rkisp1: agc: Read histogram weights from tuning file
 - ipa: rkisp1: agc: Plumb mode-selection and frame duration controls
 - ipa: libipa: vector: Specialize YamlObject getter
 - ipa: libipa: vector: Drop readYaml() function
 - ipa: libipa: pwl: Suffix \param with direction
 - ipa: libipa: pwl: Make the empty() function inline
 - ipa: libipa: pwl: Add a size() function
 - ipa: libipa: pwl: Add a constructor that moves a Point vector
 - ipa: libipa: pwl: Specialize YamlObject getter
 - ipa: libipa: Add Matrix class
 - ipa: libipa: Add MatrixInterpolator class
 - ipa: rkisp1: algorithms: Add crosstalk algorithm
 - ipa: libipa: vector: Add matrix-vector multiplication
 - ipa: rkisp1: agc: Fix initialization without metering modes
 - ipa: libipa: agc_mean_luminance: Fix enumerator names
 - ipa: libipa: agc_mean_luminance: Include missing header
 - ipa: rkisp1: Document all AGC parameters in IPAActiveState
 - ipa: rkisp1: Document all AGC parameters in IPAFrameContext
 - ipa: rkisp1: agc: Make size argument to computeHistogramPredivider const
 - ipa: rkisp1: agc: Don't update histogram parameters unnecessarily
 - ipa: rkisp1: agc: Simplify predivider calculation
 - ipa: rkisp1: agc: Use mode from frame context to calculate new EV
 - ipa: rkisp1: agc: Rename maxShutterSpeed to maxFrameDuration
 - ipa: rkisp1: agc: Correctly clamp maximum shutter speed
 - ipa: rkisp1: agc: Move AeEnable control to the AGC algorithm
 - ipa: rpi: controller: Replace Pwl::readYaml() with YamlObject::get()
 - ipa: libipa: pwl: Drop readYaml() function
 - ipa: rkisp1: agc: Rename frame context update variable to updateMetering
 - ipa: libipa: matrix: Fix incorrect symbol namespace
 - ipa: ipa_interface: Declare ipaCreate() in libcamera namespace
 - ipa: rpi: Define local functions in anonymous namespace
 - ipa: libipa: Add black levels to camera sensor helper
 - ipa: rkisp1: Move camHelper into IPAContext
 - ipa: rkisp1: blc: Query black levels from camera sensor helper
 - ipa: rkisp1: blc: Report sensor black levels in metadata
 - ipa: rkisp1: data: Update tuning files for imx219 and imx258
 - ipa: rkisp1: Move ov4689 and ov5640 black levels into sensor helpers
 - ipa: rkisp1: blc: Drop [[maybe_unused]] attribute
 - ipa: rkisp1: Install all tuning files
 - libipa: camera_sensor_helper: Add OV5675 black level
 - ipa: rkisp1: awb: Clamp gains to machine limits
 - ipa: rkisp1: awb: Unconditionally fill metadata
 - ipa: rkisp1: ccm: Fix ccm metadata output
 - ipa: rkisp1: ccm: Ensure metadata contains valid ccm
 - libcamera: libipa: camera_sensor: Add onsemi AR0144 sensor properties
 - ipa rkisp1: Remove temperatureK from FrameContext

-----------------------------------------------------------------------------
apps:
 - android: camera_capabilities: Fix GCC 14 warning
 - v4l2: v4l2_compat: Fix redirect from `__open(at)64_2()`
 - v4l2: v4l2_compat: Move `open*()` flag check into function
 - py: libcamera: Move function declarations to common header
 - v4l2: v4l2_compat: Include missing headers
 - v4l2: v4l2_compat: Selectively disable -Wmissing-declarations
 - apps: Define local functions in anonymous namespace
 - apps: common: dng_writer: Workaround for "Unknown tag 33421" error
 - apps: common: dng_writer: Support RAW16 formats
 - apps: common: dng_writer: Rename packing functions
 - apps: common: dng_writer: Add thumbnail scanline function for Raw
 - apps: common: dng_writer: Support RAW10 and RAW12 format
 - apps: common: dng_writer: Fix thumbnail generation on BE machines
 - apps: common: dng_writer: Fix RAW10 and RAW12 packing on BE machines
 - qcam: viewfinder_qt: Maintain aspect ratio
 - apps: qcam: Port to Qt 6
 - gstreamer: pool: Replace GstAtomicQueue with deque and mutex
 - gstreamer: allocator: Ensure camera manager stay alive
 - v4l2: v4l2_compat: Fix ioctl() prototype with musl C library
 - gst: Add child proxy support to libcamerasrc
 - gst: Document libcamerasrc multi stream usage

-----------------------------------------------------------------------------
test:
 - test: ipa: rkisp1-utils: Fix capitalization of hex numbers
 - test: camera: Increase timeout for vimc capture tests
 - test: fence: Turn class member variable into local variable
 - test: fence: Fix race condition
 - test: fence: Increase timeout for fence test
 - test: v4l2_videodevice: Increase timeout for vimc capture tests
 - test: ipa: rkisp1-utils: Fix coding style for template arguments
 - test: ipa: rkisp1: utils: Fix floating and fixed point conversion test
 - test: ipc: unixsocket: Define local function in anonymous namespace
 - test: gstreamer: Include missing sanitizer/asan_interface.h header
 - test: utils: Extend utils::hex() test to 8-bit and 16-bit values
 - test: gstreamer: Test memory lifetime

-----------------------------------------------------------------------------
pipeline:
 - libcamera: software_isp: Use a specific integer type for black level
 - libcamera: software_isp: Honor black level in AWB
 - libcamera: software_isp: Move color mappings out of debayering
 - libcamera: software_isp: Remove DebayerParams::kGain10
 - libcamera: software_isp: Remove TODO about internal representation
 - pipeline: vimc: Don't hardcode scaling factor with recent kernels
 - libcamera: software_isp: Allow using dma-buffers from /dev/udmabuf
 - libcamera: software_isp: Fix includes ordering in simple.cpp
 - pipeline: rkisp1: cproc: Fix default value handling
 - pipeline: rpi: Don't validate configuration in generateConfiguration()
 - libcamera: debayer_cpu: Add 32bits/aligned output formats
 - libcamera: software_isp: Drop unnecessary sanity check
 - libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP
 - libcamera: pipeline: simple: Enable Soft ISP for TI CSI-RX

-----------------------------------------------------------------------------
tuning:
 - utils: raspberrypi: ctt: Adapt tuning tool for both VC4 and PiSP
 - utils: raspberrypi: ctt: Added CAC support to the CTT
 - utils: raspberrypi: ctt: Changed CTT handling of VC4 and PiSP
 - utils: raspberrypi: ctt: Update tuning tool for HDR
 - utils: raspberrypi: ctt: Add option to convert between vc4/pisp targets
 - utils: raspberrypi: ctt: Add a maximum gain parameter for LSC
 - utils: libtuning: modules: Add skeletal AGC module
 - utils: tuning: rkisp1: Add skeletal AGC to the rkisp1 tuning script
 - utils: libtuning: Correct GBRG Image parsing
 - libtuning: Backport improvements in MacBeth search reliability
 - libtuning: Fix reference image
 - libtuning: Copy files from raspberrypi
 - libtuning: Copy visualize_macbeth_chart from raspberry pi
 - utils: tuning: Add requirements file and update readme
 - libtuning: Fix imports
 - libtuning: Migrate prints to python logging framework
 - libtuning: Fix visualize_macbeth_chart()
 - libtuning: Improve filename parsing
 - libtuning: Implement a minimal yaml parser
 - libtuning: Reactivate macbeth locator
 - libtuning: Be a bit more verbose
 - libtuning: lsc: rkisp1: Clip lsc values to valid range
 - libtuning: Use the color member of the Image class
 - libtuning: Remove need for Cam object from ccm
 - libtuning: modules: Add initial CCM module
 - libtuning: Handle cases, where no lsc tuning images are present
 - libtuning: Only warn if processing returns None
 - libtuning: Add static module
 - tuning: rkisp1: Add some static modules
 - libtuning: lsc: rkisp1: Do not calculate ratios to green
 - libtuning: lsc: Prevent negative values
 - libtuning: agc: rkisp1: Increase y-target

Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>