libcamera v0.3.2

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Sep 24 16:15:03 CEST 2024


Hi all,

I'm pleased to share that the libcamera v0.3.2 'Vienna' release has been
tagged and pushed.

Archives are available from:

 - https://gitlab.freedesktop.org/camera/libcamera/-/releases/v0.3.2

## ABI Compliance:

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

## Integration overview

This release brings 150 commits throughout. This release is now
providing better enablement of the SoftISP for IPU6 platforms and
improvements to reduce power consumption on devices using PipeWire where
UVC cameras were being held, preventing the USB parents from entering
low power modes. The SoftISP is now performing explicit cache
synchronisation when doing debayering to reduce tearing issues observed
on some mobile devices.

Also of interest is additions for supporting the Sony IMX214 and IMX283
directly on both Raspberry Pi and libipa platforms, including a tuning
file for the OneInchEye open souce camera module for use on a Raspberry
Pi.

The RKISP1 which also supports the i.MX8MP ISP, now has support for the
'Extensible Parameters' format which allows new processing blocks to be
configured in the ISP. This now allows the 'Black Level Correction' to
be handled correctly on the i.MX8MP, and will support HDR companding use
cases in the future.

On the application side, the final remains of QT5 have been dropped,
updating our python cam examples to utilise PyQt6, and fixing rendering
issues discovered in qcam.

The project Documentation has been reworked to provide a better split
between public API documentation and internal developer documentation.

This release drops support for GCC 8.


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

 - meson: Enable simple pipeline handler on all platforms by default
   - Fixes: 06e0d8508e5c ("libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP")
 - libcamera: udev: Catch udev notification errors
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=230
 - libcamera: Drop remaining file names from header comment blocks
   - Fixes: 829acb3ab0b1 ("libcamera: Drop file name from header comment blocks in templates")
 - Documentation: Fix link to introduction on mainpage.dox
   - Fixes: 860a3e30319c ("Documentation: Rework docs.rst into introduction.rst")
 - Documentation: Fix links from API references to guides
   - Fixes: e93886178106 ("Documentation: Improve doxygen main page")
 - pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=168


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

core:
 - libcamera: Avoid variable-length arrays
 - meson: Enable simple pipeline handler on all platforms by default
 - libcamera: base: Add MemFd helper class
 - libcamera: base: memfd: Handle uClibc compatibility with function wrapper
 - libcamera: shared_mem_object: Prevent memfd from shrinking or growing
 - libcamera: simple: Log a missing sensor in a better way
 - libcamera: ipa_proxy: Unify configurationFile argument name
 - libcamera: ipa_proxy: Report a missing configuration as a warning
 - libcamera: Remove spaces at end of lines
 - meson: Drop gcc 8 support
 - utils: checkstyle.py: Warn when no valid Signed-off-by line is found
 - libcamera: Drop path prefix from Doxygen file directive
 - libcamera: Make all internal headers visible to Doxygen
 - libcamera: Unify Doxygen file directive prefix for formats.h
 - libcamera: Mark internal parts of public classes with \internal
 - libcamera: Hide *::Private classes with __DOXYGEN_PUBLIC__
 - libcamera: Split public and internal source arrays
 - libcamera: Add version.h to public headers
 - libcamera: Drop libcamera_generated_ipa_headers from sources
 - libcamera: Move IPA headers to the libcamera_private dependency
 - libcamera: Consolidate all IPA headers in libcamera_ipa_headers
 - libcamera: Add missing headers to libcamera_internal_headers
 - libcamera: Consolidate tracepoint header in libcamera_internal_headers
 - libcamera: Don't add libcamera_public_headers to libcamera_public_sources
 - utils: checkstyle.py: Add author property to Commit class
 - utils: checkstyle.py: Validate SoB trailer against author
 - utils: checkstyle.py: Fix trailer parsing for commits with changelogs
 - libcamera: ipa_manager: Remove singleton requirement
 - libcamera: udev: Catch udev notification errors
 - libcamera: Add missing <stdint.h> include to base/file.h
 - libcamera: Add missing <stdint.h> include to internal/yaml_parser.h
 - libcamera: Fix header grouping
 - libcamera: formats: Adding Support for Y12P
 - utils: checkstyle.py: Rework commit message parsing
 - utils: checkstyle.py: Skip title and trailers checkers for pre-commit
 - utils: checkstyle.py: Add __repr__ method to Commit class
 - libcamera: simple: Fix a typo in a doc string
 - libcamera: camera: Hide Camera::create() from the public API
 - meson: Store controls and properties YAML files in variables
 - meson: Fix mismatch in controls and properties generated file names
 - libcamera: Drop remaining file names from header comment blocks
 - meson: Move all code generation scripts to utils/codegen/
 - meson: utils: Provide environment for Python scripts
 - utils: codegen: gen-header.sh: Generate libcamera.h based on meson.build
 - utils: codegen: gen-controls.py: Convert to jinja2 templates
 - utils: codegen: gen-controls.py: Move helper classes to separate file
 - libcamera: controls: Improve formatting of control descriptions in YAML
 - libcamera: pipeline_handler: Fix unlocking media devices too early
 - libcamera: pipeline_handler: Call releaseDevice() before unlocking media devices
 - libcamera: controls: Fix example for ExposureValue
 - utils: update-kernel-headers: Support relative path to kernel git tree
 - include: linux: Update headers for rkisp1 extensible parameters
 - libcamera: camera: Use invokeMethod() for pipe_->acquire() and pipe_->release()
 - libcamera: uvcvideo: Fix includes
 - libcamera: v4l2: Remove unused includes
 - libcamera: v4l2: Fix an include placement
 - libcamera: v4l2: Fix indirect include
 - libcamera: libcamera: Remove unused includes
 - libcamera: libcamera: Add missing includes
 - libcamera: libcamera: Formatting improvements
 - libcamera: includes: Add missing includes
 - libcamera: includes: Remove unused includes
 - libcamera: includes: Formatting improvements
 - utils: checkstyle: Add a python formatter
 - utils: checkstyle: Remove style checker for python pep8
 - libcamera: utils: Add ScopeExitActions class
 - libcamera: v4l2_videodevice: Improve readability
 - libcamera: media_object: Add MediaPad string representations
 - libcamera: media_object: Add MediaLink string representations
 - libcamera: media_device: Use MediaLink string helper
 - libcamera: yaml-parser: Add additional tests
 - libcamera: yaml-parser: Add failing test for unexpected behavior
 - libcamera: yaml-parser: Differentiate between empty and empty string
 - Document additional environmental variables

pipeline:
 - libcamera: software_isp: Remove file seal TODO item
 - libcamera: software_isp: Replace malloc() with std::vector<>
 - pipeline: rkisp1: Use the extensible parameters format
 - pipeline_handler: Add acquireDevice() function to mirror releaseDevice()
 - pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()
 - libcamera: ipu3: Remove unused includes
 - libcamera: ipu3: Replace wrong include
 - libcamera: ipu3: Formatting improvements
 - libcamera: rkisp1: Remove unused includes
 - libcamera: rkisp1: Formatting improvements
 - pipeline: rkisp1: Use ScopeExitActions to simplify error handling in start
 - libcamera: pipeline: simple: Fix typos in match routing comment
 - pipeline: simple: Remove media member variable
 - libcamera: pipeline: simple: Use MediaLink string helper
 - libcamera: debayer_cpu: Sync DMABUFs

ipa:
 - ipa: libipa: camera_sensor_helper: Reference blackLevel() in documentation
 - ipa: libipa: Add missing CameraSensorHelper fn label in docs
 - ipa: rkisp1: Pass parameters buffer format to IPA module
 - ipa: rkisp1: Pass parameters buffer size to pipeline handler
 - ipa: rkisp1: Add ISP parameters abstraction class
 - ipa: rkisp1: Use the new ISP parameters abstraction
 - ipa: rkisp1: params: Add companding blocks
 - ipa: rkisp1: Add compand feature flag to ipa context
 - ipa: rkisp1: blc: Add support for BLS in compand
 - libcamera: libipa: Remove unused includes
 - libcamera: ipa: Remove unused includes
 - utils: ipc: Include <string> in generated headers where needed
 - libcamera: ipa: Drop unneded includes from ipa_interface.h
 - ipa: rpi: agc: Ignore stable region when exposure/gain set manually
 - ipa: rpi: Adding IMX283 support
 - libcamera: libipa: camera_sensor: Add IMX283 black level
 - ipa: libipa: Add generic Interpolator class
 - ipa: rkisp1: Use generic Interpolator class
 - ipa: rkisp1: Remove MatrixInterpolator
 - ipa: rkisp1: Use interpolator in lsc
 - ipa: rkisp1: Move loader functions into helper class
 - ipa: libipa: Add lsc polynomial class
 - ipa: rkisp1: Add sensor info to context
 - ipa: rkisp1: Add polynomial LSC loader
 - libcamera: libipa: camera_sensor: Add Sony IMX214 sensor properties

apps:
 - gstreamer: Fix width and height range handling
 - apps: qcam: Disable -Wextra-semi
 - gstreamer: Fix missing "greater than" symbol in author string
 - py: cam: Convert to PyQt6
 - py: gen-py-controls: Use Control class
 - py: gen-py-controls: Convert to jinja2 templates
 - v4l2: Support setting frame rate in the V4L2 Adaptation layer
 - qcam: Decrease minimum width of selector dialog
 - qcam: Drop Qt version checks
 - qcam: viewfinder_qt: Draw the letterbox background black
 - qcam: viewfinder_gl: Fix binding of vertex buffer and shader program
 - qcam: viewfinder_gl: Drop duplicate glClearColor()
 - qcam: viewfinder_gl: Render image centered in letterbox


documentation:
 - Documentation: Add Thread safety page
 - Documentation: Split doxygen_input in public and internal inputs
 - Documentation: Split public/private documentation
 - Documentation: Improve doxygen main page
 - Documentation: Add documentation-contents.rst
 - Documentation: Alphabetise the Documentation toctree
 - Documentation: Synchronise camera stack details
 - Documentation: Breakout docs.rst
 - Documentation: Remove libcamera architecture from introduction.rst
 - Documentation: Rework docs.rst into introduction.rst
 - Documentation: Rework index.rst
 - Documentation: Add internal-api-html placeholder
 - Documentation: Reformat documentation_contents.rst
 - Documentation: Rename "API" section to "API Reference"
 - Documentation: Drop local table of contents from introduction
 - Documentation: Rename "Documentation" section to "Introduction"
 - Documentation: Fix link to introduction on mainpage.dox
 - Documentation: Fix links from API references to guides

tuning:
 - utils: tuning: rkisp1: Clean up tuner construction
 - utils: tuning: Change Tuner.add() to accept a list of modules

test:
 - tests: Add a missing iostream include
 - test: ipa: libipa: Add tets for Interpolator

--
Regards

Kieran Bingham


More information about the libcamera-devel mailing list