Skip to content

Tags: raspberrypi/libcamera

Tags

v0.5.0+rpt20250429

Toggle v0.5.0+rpt20250429's commit message
utils: raspberrypi: ctt: Fix NaNs in chromatic aberration tables

NaNs can appear if no black dots can be found and analysed in a
particular region of the calibration image. There needs to be at least
one such dot in every 8x8 cell covering the image.

This is now detected, and an error message issued. No CAC tables are
generated, so CAC is disabled.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>

v0.5.0

Toggle v0.5.0's commit message

Verified

This tag was signed with the committer’s verified signature. The key has expired.
kbingham Kieran Bingham
libcamera v0.5.0

The abi-compliance-checker reports there are both ABI and API changes in this
release:

  Binary compatibility: 99%
  Source compatibility: 99.5%
  Total binary compatibility problems: 5, warnings: 1
  Total source compatibility problems: 6, warnings: 1

Substantially less than the previous release, and ultimately quite minor but
unfortunately there nonetheless and so the SONAME is updated to 0.5
accordingly. I do not anticipate anything there that cannot be solved for
applications without just a recompile. I had hoped to get a longer run for 0.4
series...

A full and detailed ABI report for those interested can always be generated
between any two versions with the internal tooling:

 "./utils/abi-compat.sh v0.4.0 v0.5.0"

Integration overview:

This release brings in 201 commits with a huge list of fixes and code clean up
which I'm very happy to see, including interesting fixes to the AGC and AWB
handling in libipa.

In regards to new features, libcamera-0.5 has aptly now got the core Raspberry
Pi 5 support merged!. There are still patches that are currently maintained by
Raspberry Pi for additional features, and while the transition to upstream
API's continue, but I think we're all happy to see this support getting in
directly, and Raspberry Pi continue to lead the way in upstream camera
development. I look forward to the kernel API's for streams being fully
utilised by the PiSP platform for upstream camera metadata handling. This
upcoming work is also supported by the CameraSensor factory and CameraSensorRaw
support that is now also merged in this release.

Further more in the platform support, the software_isp continues to be
developed and is now able to measure colour temperature, which will bring in
improvements for AWB, and a CCM can be applied while peforming debayering (at a
CPU cost) which will allow us to finally apply color tuning for sensors on
devices that need to fall back to the software ISP.

New sensor support seems fairly short in this release, with the IMX415 being
the prominent addition.

In libipa, and algorithm developments, along with many fixes and improvements
there is a substantial new feature that the Baysian AWB algorithm from
Raspberry Pi can now also be used on all libipa supported IPA modules, and has
shown good impovements for the RkISP1 supported devices.

There is minimal changes to the application support side, but it is notable
that now the Y444 format has been mapped to be usable by the gstreamer src
element. lc-compliance has seen some progress which I hope will bring this to
being a more central part of the test infrastructure.

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

 - DmaBufAllocator: Make DmaSyncer non-copyable
   - Fixes: 39482d5 ("DmaBufAllocator: Add Dma Buffer synchronization function & helper class")
 - utils: codegen: controls.py: Fix missing direction error message
   - Fixes: 39fe4ad ("utils: codegen: controls.py: Parse direction information")
 - Thread: Fix setThreadAffinity race condition in start
   - Fixes: 4d9db06 ("libcamera: add method to set thread affinity")
 - meson: Don't override pipeline list when `auto` is selected
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=247
 - DmaBufAllocator: Avoid syncing with an invalid file descriptor
   - Fixes: 545046a ("DmaBufAllocator: Make DmaSyncer non-copyable")
 - controls: Introduce AEGC-related controls
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=42
 - Documentation: guides: application-developer: Fix variable shadowing
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=252
 - libcamera: pipeline: virtual: Fill buffer's metadata
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=245
 - ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)
   - Fixes: ee918b3 ("ipa: rkisp1: agc: Initialize enum controls with a list of values")
 - ipa: rpi: Apply default ControlInfo values for sensor controls
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=253
 - ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo
   - Fixes: bea2db5 ("ipa: rpi: Apply default ControlInfo values for sensor controls")
 - ipa: rkisp1: algorithms: agc: Fix whitespace
   - Fixes: 0e0e32b ("ipa: rkisp1: algorithms: agc: Check for correct stats type")
 - libcamera: pipeline: Fix LIBCAMERA_<NAME>_TUNING_FILE handling
   - Fixes: f5da05e ("libcamera: pipeline: Move tuning file override handling to IPAProxy")
 - ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode
   - Fixes: 29892f1 ("ipa: libipa: colour: Use the RGB class to model RGB values")
 - libipa: awb: Fix non-virtual destructor warning in AwbStats
   - Fixes: 6f66399 ("libipa: Add AWB algorithm base class")
 - ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit
   - Fixes: f72c76e ("rkisp1: Honor the FrameDurationLimits control")
 - ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC
   - Fixes: 34c9ab6 ("ipa: libipa: Add ExposureModeHelper")
 - libcamera: software_isp: Emit ispStatsReady only if IPA is running
   - Reported-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
 - libcamera: base: log: Fix uninitialized variable warning
   - Fixes: 8fa119e ("libcamera: base: log: Use `std::from_chars()`")
 - libcamera: media_object: Fix unnecessary copy
   - Fixes: 9490c66 ("libcamera: Add members to MediaEntity to support ancillary entities")
 - ipa: rkisp1: agc: Fix metering modes
   - Fixes: 4c51528 ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")
 - libcamera: software_isp: Reset stored exposure in black level
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=259
 - libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setup
   - Fixes: bad8d59 ("libcamera: uvcvideo: Register ExposureTimeMode control")
 - libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setting
   - Fixes: bad8d59 ("libcamera: uvcvideo: Register ExposureTimeMode control")
 - ipa: simple: Initialize ccmEnabled to false
   - Fixes: ac30686 ("libcamera: software_isp: Track whether CCM is enabled")
 - gstreamer: Use `Control<>` objects when setting controls
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=261
 - gstreamer: Restore `AeEnable` control
   - Fixes: 187f2d5 ("gstreamer: Generate the new AEGC controls")
 - pipeline: rpi: Fix potential empty optional read
   - Fixes: 6c71ee1 ("pipeline: raspberrypi: Introduce PipelineHandlerBase class")

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

core:
 - libcamera: virtual: Avoid some copies
 - libcamera: virtual: Query number of planes correctly
 - libcamera: virtual: Speed up test pattern animation
 - libcamera: camera_sensor_properties: Add delays for imx415
 - include: linux: Update headers for line-based embedded data support
 - include: linux: videodev2: Add generic line based pixel formats
 - libcamera: v4l2_subdevice: Add new metadata formats
 - libcamera: v4l2_videodevice: Update to the new kernel metadata API
 - libcamera: Add CameraSensor implementation for raw V4L2 sensors
 - libcamera: camera_sensor: Add support for embedded data
 - libcamera: base: Remove custom __nodiscard attribute
 - libcamera: Add missing <stdint.h> include to dma_buf_allocator.h
 - libcamera: include: Include missing stdint.h header
 - utils: codegen: controls.py: Fix missing direction error message
 - meson: Convert `v4l2` into a feature option
 - meson: Don't override pipeline list when `auto` is selected
 - libcamera: pipeline_handler: Enable silent configuration file lookup
 - libcamera: virtual: Install configuration file
 - libcamera: v4l2_subdevice: Work around false positive warning
 - libcamera: uvcvideo: Register ExposureTimeMode control
 - libcamera: camera: Pre-process AeEnable control
 - libcamera: base: object,thread: Disable copy/move
 - libcamera: matrix: Add read-only accessor to internal data
 - libcamera: log: Match whole category in LIBCAMERA_LOG_LEVELS
 - libcamera: Copy Vector class files from libipa
 - libcamera: Adapt Vector class to new location
 - libcamera: request: addBuffer(): Do fence check earlier
 - libcamera: Drop spurious colon after doxygen \todo directive
 - meson: Enable the -Wnon-virtual-dtor compiler option
 - libcamera: formatting: Avoid spaces in for loops without expression
 - libcamera: base: log: Remove move constructor
 - libcamera: base: log: Use `std::from_chars()`
 - libcamera: base: log: Remove `LogMessage::init()`
 - libcamera: base: log: Make `LogCategory::severity_` atomic
 - libcamera: base: log: Use `std::string_view` to avoid some copies
 - libcamera: base: log: Pass dynamic prefix through
 - libcamera: base: log: Protect log categories with lock
 - libcamera: base: log: Avoid manual `LogCategory` deletion
 - libcamera: meson: Fix libyuv detection
 - libcamera: base: thread: Support dispatching for a specific receiver
 - libcamera: base: log: Fix uninitialized variable warning
 - libcamera: base: signal: Drop pre-C++17 support
 - meson: Add libpisp.wrap
 - libcamera: media_object: Fix unnecessary copy
 - libcamera: ipa_manager: Store `IPAModule`s in `std::unique_ptr`
 - libcamera: base: mutex: Remove unnecessary constructors
 - libcamera: media_device: Ignore `lockf()` return value
 - libcamera: v4l2_videodevice: `lastUsedCounter_` need not be atomic
 - libcamera: camera: Ensure correct id maps are always set
 - libcamera: base: span: Explicitly default copy assignment
 - libcamera: controls: Check size of enum
 - libcamera: camera_manager: Do not emit signals while holding lock
 - libcamera: camera_manager: Simplify camera lookup
 - libcamera: camera_manager: Take camera id in `std::string_view`
 - libcamera: base: object: Forward arguments when invoking
 - libcamera: base: bound_method: Simplify `invokePack()`
 - libcamera: v4l2_device: add frame start event helpers
 - DmaBufAllocator: Make DmaSyncer non-copyable
 - Thread: Fix setThreadAffinity race condition in start
 - DmaBufAllocator: Avoid syncing with an invalid file descriptor
 - controls: Introduce AEGC-related controls
 - controls: Remove AeLocked
 - controls: Redefine AeEnable

ipa:
 - ipa: rpi: Add cam_helper for imx415
 - ipa: rpi: Add vc4 tuning files for imx415
 - ipa: rpi: Use r-value references in the set()/setLocked() functions
 - ipa: rpi: Add erase()/eraseLocked() to RPiController::Metadata
 - ipa: rpi: Add a HW property to determine if the data buffer is strided
 - ipa: rpi: Provide the camera helper with the hardware configuration
 - ipa: raspberry: Port to the new AEGC controls
 - ipa: rkisp1: Port to the new AEGC controls
 - ipa: rkisp1: agc: Report new AeEnable control as available
 - ipa: raspberry: Report new AeEnable control as available
 - ipa: libipa: lux: Fix indentation
 - ipa: rkisp1: agc: Initialize enum controls with a list of values
 - ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)
 - ipa: rpi: Apply default ControlInfo values for sensor controls
 - ipa: Use Vector class from libcamera
 - libipa: Drop Vector class
 - ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo
 - ipa: rkisp1: algorithms: agc: Fix whitespace
 - libipa: interpolator: Add accessor to internal data
 - libipa: pwl: Add clear() function
 - libipa: Add AWB algorithm base class
 - libipa: awb: Add helper functions for AWB mode support
 - libipa: Add grey world AWB algorithm
 - ipa: rkisp1: Move calculation of RGB means into own function
 - ipa: rkisp1: Use grey world algorithm from libipa
 - libipa: Add bayesian AWB algorithm
 - ipa: rkisp1: Add support for bayes AWB algorithm from libipa
 - ipa: rkisp1: awb: Apply gains based on default colour temperature on start
 - libipa: lux: Normalize referenceY to 1
 - libipa: awb_bayes: Add logging of value limits
 - libipa: awb_bayes: Remove overly verbose log messages
 - libipa: awb_bayes: Change the probabilities from log space to linear space
 - libipa: awb: Sort class member documentation according to header order
 - libipa: awb: Capitalize AWB
 - libipa: awb: Follow function names with '()' in doxygen documentation
 - libipa: awb: Standardize spelling on 'grey' world
 - libipa: awb: Replace reference to pipeline handle with IPA module
 - libipa: awb: Pass lux value to calculateAwb() as unsigned int
 - ipa: rkisp1: awb: Fix wrong indentation in comment
 - libipa: awb: Rename AwbStats::getRGBMeans() to rgbMeans()
 - libipa: awb: Tidy up includes
 - libipa: awb_grey: Minor comment fixes
 - ipa: rkisp1: awb: Don't calculate RGB means if stats are missing
 - ipa: rkisp1: awb: Capitalize AWB
 - ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode
 - libipa: awb: Fix non-virtual destructor warning in AwbStats
 - ipa: rkisp1: Initialise AGC from FrameDurationLimits controls
 - ipa: rkisp1: Alias lineDuration
 - ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit
 - ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC
 - utils: ipc: Only dispatch messages for proxy when stopping thread
 - ipa: rpi: Add support for Raspberry Pi 5
 - ipa: simple: lut: Fix include path
 - ipa: rkisp1: agc: Fix metering modes
 - ipa: rkisp1: agc: Set measurement window to full frame
 - ipa: rkisp1: Add debug log for the sensor controls being set
 - ipa: libipa: agc_mean_luminance: Error out when effectiveExposureValue is zero
 - ipa: rksip1: Remove setControls(0) to reduce startup oscillations
 - ipa: simple: softisp: Extend to pass metadata
 - ipa: simple: Report the ColourGains in metadata
 - ipa: simple: Report black levels in metadata
 - ipa: simple: Report contrast in metadata
 - ipa: simple: Report exposure in metadata
 - ipa: simple: Initialize ccmEnabled to false
 - libipa: histogram: Fix quantile() calculation for fractional results
 - libipa: histogram: Fix interQuantileMean() for small ranges

apps:
 - gstreamer: allocator: gst_libcamera_allocator_new(): Recognize errors
 - gstreamer: allocator: gst_libcamera_allocator_new(): Fix memory leak
 - gstreamer: Generate the new AEGC controls
 - apps: ppm_writer: Add a missing include
 - apps: ppm_writer: Return EIO on I/O errors
 - gstreamer: Fix scaler-crop property get
 - apps: common: event_loop: Take callbacks by rvalue ref
 - apps: common: event_loop: Disable copy/move
 - apps: common: event_loop: Use `std::deque` instead of `std::list`
 - apps: common: event_loop: Use single event source for deferred calls
 - apps: common: event_loop: Remove unused type alias
 - apps: lc-compliance: Initialize `CameraManager` pointer in `Environment`
 - apps: lc-compliance: Put tests into anonymous namespace
 - apps: lc-compliance: Optimize `std::shared_ptr` usage
 - apps: lc-compliance: Remove redundant getter call
 - apps: lc-compliance: Don't allocate `FrameBufferAllocator` dynamically
 - apps: lc-compliance: Use `std::vector` for argument array
 - apps: lc-compliance: Use array instead of `std::vector`
 - apps: lc-compliance: Add message to `GTEST_SKIP()`
 - apps: lc-compliance: Merge `CaptureBalanced` and `CaptureUnbalanced`
 - gstreamer: Add Y444 format support to the YUV list
 - apps: cam: Fix include order
 - apps: qcam: Simplify `PixelFormat` search
 - apps: cam: Highlight default enumerator
 - gstreamer: Use `Control<>` objects when setting controls
 - gstreamer: Restore `AeEnable` control

pipeline:
 - libcamera: pipeline: virtual: Demote config file error message to debug
 - libcamera: pipeline: Move tuning file override handling to IPAProxy
 - libcamera: software_isp: Move a non-loop condition out of the loop
 - libcamera: software_isp: Handle signals in the proper thread
 - libcamera: pipeline: virtual: Simplify error return
 - libcamera: pipeline: virtual: Fill buffer's metadata
 - libcamera: pipeline: virtual: Set `FrameError` on error
 - libcamera: pipeline: Fix LIBCAMERA_<NAME>_TUNING_FILE handling
 - rkisp1: Honor the FrameDurationLimits control
 - libcamera: software_isp: Emit ispStatsReady only if IPA is running
 - libcamera: software_isp: Handle queued output buffers on stop
 - libcamera: software_isp: Handle queued input buffers on stop
 - libcamera: software_isp: Dispatch messages on stop
 - pipeline: rpi: Add new stream flags for PiSP
 - pipeline: rpi: Add support for Raspberry Pi 5
 - libcamera: software_isp: Determine color temperature
 - libcamera: software_isp: Use RGB type to represent gains
 - libcamera: software_isp: Store color temperature to metadata
 - libcamera: software_isp: lut: Remove maybe_unused on a used argument
 - libcamera: software_isp: Use common code to store debayered pixels
 - libcamera: software_isp: Use a macro to assign debayering methods
 - libcamera: software_isp: Add CCM algorithm
 - libcamera: software_isp: Add an example CCM to uncalibrated.yaml
 - libcamera: software_isp: Track whether CCM is enabled
 - libcamera: software_isp: Apply CCM in debayering
 - pipeline: rpi: pisp: Fix uninitialized variable warning
 - libcamera: software_isp: Track frames and requests
 - libcamera: software_isp: Reset stored exposure in black level
 - libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setup
 - libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setting
 - pipeline: rpi: Fix potential empty optional read
 - pipeline: simple: Connect/disconnect frameStart signal at start/stop time
 - pipeline: simple: Enable frame start events
 - pipeline: simple: Create DelayedControls instance once only
 - pipeline: simple: Reset delayedCtrls at start

documentation:
 - Documentation: design: ae: Document the design for AE controls
 - Documentation: guides: application-developer: Fix variable shadowing
 - Revert "README.rst: Report py dependencies"

test:
 - test: ipa_data_serialization: Use DebugMetadataEnable
 - test: threads: Use `pthread_testcancel()`
 - test: ipa: libipa: Add histogram tests
 - test: ipa: libipa: histogram: Add tests for quantile() returning a fraction
 - test: ipa: libipa: histogram: Add tests for small inter quantile mean ranges

tuning:
 - libtuning: module: awb: Add bayes AWB support
 - libtuning: Add module for lux calibration
 - utils: tuning: rkisp1: Add lux module

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

v0.4.0+rpt20250213

Toggle v0.4.0+rpt20250213's commit message
ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo

controls::ExposureTime is of type ControlTypeInteger32, but the
default ControlInfoMap casts a value to int64_t causing incorrect
initialisation of the associated ControlInfo.

Fix this by casting correctly to int32_t.

Fixes: 8cebd77 ("ipa: rpi: Apply default ControlInfo values for sensor controls (2)")
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>

v0.4.0+rpt20250211

Toggle v0.4.0+rpt20250211's commit message
ipa: rpi: Apply default ControlInfo values for sensor controls (2)

Unfortunately the previous fix for default sensor ControlInfo values was
incomplete, and the static list must also have default values so that
the ConrolInfo during ipa::init() are present. Fix this.

Fixes: ca36c77 ("ipa: rpi: Apply default ControlInfo values for sensor controls")
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>

v0.4.0+rpt20250210

Toggle v0.4.0+rpt20250210's commit message
ipa: rpi: Apply default ControlInfo values for sensor controls

The existing IPA initialisation code did not set default values for
some sensor related controls. This caused a crash using libcamerify
when the it was trying to access the default value for
controls::FrameDurationLimits as part of a recent change.

Ensure controls::FrameDurationLimits, controls::AnalogueGain and
controls::ExposureTime advertise default values along with the existing
min/max values. The default is set to the defaults defined in the IPA
set during initialisation.

Bug: https://bugs.libcamera.org/show_bug.cgi?id=253
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>

v0.4.0+rpt20250127

Toggle v0.4.0+rpt20250127's commit message
ipa: rpi: pisp: Update all tuning files for sync algorithm

Default to all the standard parameter values.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>

v0.4.0

Toggle v0.4.0's commit message

Verified

This tag was signed with the committer’s verified signature. The key has expired.
kbingham Kieran Bingham
libcamera v0.4.0

The abi-compliance-checker reports that there is both ABI and API breakage in
this release.

  Binary compatibility: 91.2%
  Source compatibility: 98.9%
  Total binary compatibility problems: 69, warnings: 0
  Total source compatibility problems: 9, warnings: 0

This is not too surprising as this was the reason for the extra delay holding
up this release, and as such this release bumps the SONAME to 0.4 accordingly.

The majority of the ABI breakages are around the public API for Control
handling and definitions, which have caused underlying identifiers to be
changed, and the reuqired storage for controls has increased.

I hope that grouping the expected ABI and API breakages and delaying this
release will allow a longer stability on the 0.4 series but as we are
developing rapidly this can not be guaranteed, though we aim to minimise
disruption to distributions and applications whereever possible.

This release brings in 253 commits, with substantial development on image
control and tuning features for IPA and Pipeline handlers supporting libipa, as
well as integrating libipa support for IPA handling on the ARM Mali-C55 ISP.

A new 'Virtual Pipeline Handler' has been introduced to support more testing in
CI and virtual environments.

Gstreamer has had some interesting development to rework expressing the full
control set from libcamera using auto generation from the full control
descriptors.

A key and notable change in this release too is that the softISP is now moving
towards utilising the libipa implementaitons which will enable future tuning
and image control capabilities, and should also support future development on a
GPU-ISP implementation for GPU-accelerated handling. I do believe this work may
have introduced an oscillation regression in the AEGC which will need to be
investigated and fixed in the near future, but I don't want to hold up
progressing the ABI updates at this stage.

The i.MX8MP can now make full use of the DW100 Dewarp Engine for full rotation
and digital zoom capabilities.

Raspberry Pi systems now have improved support for the OV7251, IMX462, and
IMX327 Sensors, and libipa platforms can now make use of the GalaxyCore gc05a2
and gc08a3 Image sensors.

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

 - ipa: rpi: Use std::abs()
   - Reported-by: Maarten Lankhorst <dev@lankhorst.se>
 - libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path
   - Fixes: 7615454 ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
 - libcamera: rkisp1: Rectify SensorConfiguration check
   - Fixes: 047d647 ("libcamera: rkisp1: Integrate SensorConfiguration support")
 - libcamera: controls: Add missing size to control_type<Point>
   - Fixes: 200d535 ("libcamera: controls: Add ControlTypePoint")
 - pycamera: Add missing code for ControlTypePoint
   - Fixes: 200d535 ("libcamera: controls: Add ControlTypePoint")
 - libcamera: software_isp: Clear IPA context on configure and stop
   - Fixes: 04d171e ("libcamera: software_isp: Call Algorithm::queueRequest")
 - utils: checkstyle.py: Centralize dependency handling for checkers
   - Fixes: 8ffaf37 ("utils: checkstyle: Add a python formatter")
 - test: py: Fix log level restore in SimpleTestMethods()
   - Fixes: 06cb713 ("py: Add unittests.py")
 - v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
   - Fixes: 5456e02 ("v4l2: Support setting frame rate in the V4L2 Adaptation layer")
 - gstreamer: Remove auto-focus-mode property from device provider
   - Fixes: 5a14243 ("gstreamer: Add enable_auto_focus option to the GStreamer plugin")
 - libcamera: software_isp: Clean up pending requests on stop
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=234
 - ipa: rpi: awb: Disable CT search bias for Grey World AWB
   - Fixes: ea8fd63 ("ipa: rpi: awb: Add a bias to the AWB search")
 - meson: Don't unnecessarily fallback to libyuv wrap
   - Fixes: eeaa7de ("libcamera: pipeline: Add test pattern for VirtualPipelineHandler")
 - libcamera: Don't copy `StreamConfiguration` when iterating
   - Fixes: 4217c9f ("libcamera: camera: Zero streams before validate()")
 - libcamera: software_isp: Actually apply black level from tuning data
   - Fixes: 41e3d61 ("libcamera: software_isp: Clear IPA context on configure and stop")
 - gstreamer: keep same transfer with that in negotiated caps
   - Bug: https://bugs.libcamera.org/show_bug.cgi?id=150
 - pipeline: rkisp1: Fix scope of dewarper stop() exit action
   - Fixes: 12b553d ("libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter")
 - pipeline: rkisp1: Limit sensor size to max resolution
   - Fixes: 7615454 ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")

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

core:
 - utils: abi-compat: Disable python build
 - utils: abi-compat: sort meson options
 - libcamera: controls: Add enum names and values map to ControlId
 - libcamera: controls: Add array information to ControlId
 - libcamera: v4l2_videodevice: Add getSelection() function
 - libcamera: controls: Handle enum values without a cast
 - libcamera: Replace usage of lroundf() with std::lround()
 - libcamera: Replace last users of math.h
 - libcamera: geometry: Clarify Rectangle's top-left corner
 - libcamera: geometry: Add two-point Rectangle constructor
 - libcamera: controls: Add ControlTypePoint
 - libcamera: control_ids_draft: Add face detection controls
 - libcamera: android: Add face detection control support
 - libcamera: yaml_parser: Take string keys in `std::string_view`
 - libcamera: camera: Fix CameraConfiguration spelling error
 - libcamera: MappedFrameBuffer: Fix typo in comment formatting
 - libcamera: controls: Add missing size to control_type<Point>
 - libcamera: tracepoints: Fix copyright year for reproducible builds
 - libcamera: controls: Add vendor information to ControlId
 - libcamera: converter: Add interface for feature flags
 - libcamera: converter: Add interface to support cropping capability
 - libcamera: formats: Change bytesPerGroup of RGB565 and RGB565_BE from 3 to 2
 - utils: checkstyle.py: Factor out common code to new CheckerBase class
 - utils: checkstyle.py: Turn check() into a class method for all checkers
 - utils: checkstyle.py: Print issues using __str__
 - utils: checkstyle.py: Centralize dependency handling for checkers
 - libcamera: camera_sensor: Introduce CameraSensorFactory
 - libcamera: camera_sensor: Create abstract base class
 - libcamera: camera_sensor: Sort factories by priority
 - libcamera: pipeline_handler: Provide cancelRequest
 - libcamera: simple: Track requests in conversionQueue_
 - libcamera: Rationalize IPA and handlers names
 - libcamera: Add debug control space
 - libcamera: Add a DebugMetadata helper
 - utils: Add script to generate control_ids_debug.yaml
 - libcamera: yaml_parser: Use std::from_chars()
 - libcamera: add DmaBufAllocator::exportBuffers()
 - libcamera: Remove PipelineHandler Fatal check of non-empty MediaDevices
 - libcamera: virtual: Add VirtualPipelineHandler
 - libcamera: virtual: Add ImageFrameGenerator
 - libcamera: virtual: Read config and register cameras based on the config
 - meson: Don't unnecessarily fallback to libyuv wrap
 - libcamera: Rename "shutter speed" to "exposure time"
 - libcamera: camera_sensor_properties: Add sensor control delays
 - libcamera: pipelines: Draw control delays from CameraSensor properties
 - libcamera: Don't copy `StreamConfiguration` when iterating
 - treewide: Avoid some copies in range-based for loops
 - libcamera: v4l2_videodevice: Clarify V4L2M2MDevice
 - libcamera: Extend u32 control type
 - libcamera: Extend u16 control type
 - libcamera: add method to set thread affinity
 - libcamera: Copy Matrix class from libipa to libcamera
 - libcamera: internal: Move Matrix class into libcamera namespace
 - libcamera: internal: matrix: Replace vector with array in constructor
 - libcamera: internal: Add Matrix class to build
 - libcamera: mali-c55: Limit max size to sensor resolution
 - libcamera: mali-c55: Limit ISP input size
 - libcamera: mali-c55: Init camera properties
 - libcamera: mali-c55: Simplify bufferReady()
 - libcamera: mali-c55: Remove MaliC55CameraData::mbusCodes()
 - libcamera: mali-c55: Add stride and size to rawConfig
 - libcamera: v4l2-subdevice: Add Mali C55 media bus formats
 - libcamera: bayer_format: Add 20-bit bayer formats
 - libcamera: mali-c55: Propagate CSI-2 format to ISP
 - libcamera: mali-c55: Correct input/output format representation
 - libcamera: mali-c55: Enable links between resizer and video node
 - libcamera: mali-c55: Enable usage of scaler
 - libcamera: mali-c55: implement support for ScalerCrop
 - libcamera: yaml_parser: Output more details when parsing fails
 - libcamera: yaml_parser: Include stdlib.h instead of cstdlib
 - libcamera: utils: StringSplitter: Inline some trivial methods
 - libcamera: utils: StringSplitter: Add `operator==`
 - libcamera: stream: Add operator<<(StreamConfiguration)
 - libcamera: yaml_parser: Improve efficiency of string empty check
 - libcamera: geometry: Add Rectangle::transformedBetween()
 - libcamera: converter_v4l2_m2m: Add missing override specifier
 - libcamera: converter_v4l2_m2m: Refactor get crop bounds code
 - libcamera: converter: Add function to query crop bounds
 - libcamera: converter: Add function to check if a stream was configured
 - libcamera: converter: Add functions to adjust config
 - libcamera: camera: Add a const version of the pipe() function
 - libcamera: camera_sensor: Add parameter to limit returned sensor size
 - libcamera: camera_sensor_properties: Add ov7251 and ov9281
 - libcamera: rpi: Draw sensor delays from CameraSensorProperties
 - include: linux: Add mali-c55-config.h
 - include: linux: Add Mali-C55 Stats and Params V4L2 format
 - libcamera: mali-c55: Acquire and plumb in 3a params and stats
 - libcamera: controls: Populate direction field in control definitions
 - utils: codegen: controls.py: Parse direction information
 - libcamera: controls: Add support for querying direction information
 - libcamera: controls: Update the ColourTemperature control to be writable
 - utils: gen-debug-controls: Output direction flag
 - hooks: pre-push: Verify that co-authors have a SoB line
 - gitignore: Add venv directory to gitignore
 - CameraManager: Ensure we cleanup on failure
 - Add .editorconfig file
 - DmaBufAllocator: Add Dma Buffer synchronization function & helper class

apps:
 - apps: cam: Print control enum values more nicely
 - py: Add bindings for ControlId enum name
 - apps: cam: Print control array sizes
 - apps: Replace HAVE_DNG with HAVE_TIFF
 - apps: cam: Print an error when outputting DNG and DNG support is missing
 - pycamera: Add missing code for ControlTypePoint
 - apps: cam: Print control vendor information when listing controls
 - py: Add bindings for ControlId vendor information
 - qcam: Automatically select the camera if only one is available
 - gstreamer: Implement caps negotiation for video/x-bayer
 - v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
 - gstreamer: Remove auto-focus-mode property from device provider
 - gstreamer: Remove auto-focus-mode property from libcamerasrc
 - gstreamer: Generate controls from control_ids_*.yaml files
 - py: Add bindings for ControlId array information
 - qcam: Use pointer when choosing camera
 - gstreamer: keep same transfer with that in negotiated caps
 - apps: cam: Print control direction information

pipeline:
 - libcamera: software_isp: Remove superfluous includes
 - libcamera: software_isp: Move BlackLevel to libcamera::ipa::soft
 - libcamera: software_isp: Define skeletons for IPA refactoring
 - libcamera: software_isp: Let IPASoftSimple inherit Module
 - libcamera: software_isp: Make stats frame and buffer aware
 - libcamera: software_isp: Remove final dots in debayer.cpp docstrings
 - libcamera: software_isp: Track and pass frame ids
 - libcamera: software_isp: Create algorithms
 - libcamera: software_isp: Call Algorithm::configure
 - libcamera: software_isp: Call Algorithm::queueRequest
 - libcamera: software_isp: Call Algorithm::prepare
 - libcamera: software_isp: Call Algorithm::process
 - libcamera: software_isp: Move black level to an algorithm module
 - libcamera: software_isp: Move color handling to an algorithm module
 - libcamera: software_isp: Use floating point for color parameters
 - libcamera: software_isp: Use DelayedControls
 - libcamera: software_isp: Move exposure+gain to an algorithm module
 - libcamera: software_isp: Update black level only on exposure changes
 - pipeline: simple: Increase buffer count to four
 - libcamera: rkisp1: Eliminate hard-coded resizer limits
 - pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline
 - libcamera: software_isp: Improve wording in a comment
 - libcamera: rkisp1: Integrate SensorConfiguration support
 - libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path
 - libcamera: rkisp1: Use const reference for sensor configuration
 - libcamera: rkisp1: Rectify SensorConfiguration check
 - libcamera: rkisp1: Maintain alphabetical order of forward declarations
 - libcamera: software_isp: Clear IPA context on configure and stop
 - libcamera: software_isp: Get black level from the camera helper
 - libcamera: software_isp: Black level from tuning file
 - libcamera: pipeline: rkisp1: Fix typo in todo task
 - libcamera: rkisp1: Prepare for additional camera controls
 - libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter
 - pipeline: rpi: Remove CameraData::scalerCrop_
 - pipeline: rpi: Pass crop rectangle as a parameter to platformSetIspCrop()
 - pipeline: rpi: Introduce CameraData::CropParams
 - pipeline: rpi: Track which ISP output is configured for a stream
 - pipeline: rpi: Pass ISP output index into platformSetIspCrop()
 - pipeline: rpi: Handler controls::rpi::ScalerCrops
 - libcamera: rkisp1: Create main buffer pool out of if(!isRaw)
 - libcamera: software_isp: Clean up pending requests on stop
 - libcamera: pipeline: Add test pattern for VirtualPipelineHandler
 - libcamera: software_isp: Refactor SoftwareIsp to use DmaBufAllocator::exportBuffers
 - libcamera: software_isp: Initialize exposure+gain before agc calculations
 - libcamera: software_isp: Remove unused IPAActiveState fields
 - libcamera: software_isp: Actually apply black level from tuning data
 - rkisp1: Use Matrix class from libcamera
 - libcamera: software_isp: Add support for contrast control
 - libcamera: software_isp: Add contrast control
 - pipeline: rkisp1: Fix scope of dewarper stop() exit action
 - pipeline: rkisp1: Keep aspect ratio on imx8mp
 - pipeline: rkisp1: Split inputCrop and outputCrop
 - pipeline: rkisp1: Reorder sensorInfo collection code
 - pipeline: rkisp1: Query dewarper crop bounds if no stream configured
 - pipeline: rkisp1: Fix ScalerCrop to be in sensor coordinates
 - pipeline: rkisp1: Add ScalerMaximumCrop property
 - pipeline: rkisp1: Refactor path validation
 - pipeline: rkisp1: Enable the dewarper unconditionally
 - pipeline: rkisp1: make RkISP1CameraConfiguration a friend of the pipeline handler
 - pipeline: rkisp1: Fix config validation when dewarper is used
 - pipeline: rkisp1: Limit sensor size to max resolution
 - debayer_cpu: Replace syncing DMABUFs with DmaSyncer
 - include: media-bus-formats: Add Mali-C55 mbus codes
 - mali-c55: Plumb the IPA module in

ipa:
 - ipa: rpi: Use std::abs()
 - ipa: rpi: Replace last users of math.h
 - ipa: rpi: awb: Add a const for the default colour temperature
 - ipa: rpi: awb: Add a bias to the AWB search
 - ipa: rkisp1: algorithms: agc: Check for correct stats type
 - ipa: rkisp1: algorithms: awb: Check for correct stats type
 - ipa: rpi: Add tuning files for OV7251
 - ipa: libipa: Fix ExposureModeHelper function name in documentation
 - ipa: rkisp1: Add constructor to the ipa context
 - ipa: rkisp1: Add debug metadata support to the rkisp1
 - ipa: libipa: Add data accessor to Histogram
 - ipa: libipa: Add colour helpers
 - ipa: ipu3: Use centralised libipa helpers
 - ipa: rkisp1: Use centralised libipa helpers
 - ipa: rpi: Use centralised libipa helpers
 - ipa: rpi: awb: Disable CT search bias for Grey World AWB
 - libipa: FCQueue: Make sure FrameContext#0 is initialized
 - libcamera: libipa: camera_sensor: Provide helper and properties for Sony IMX462
 - ipa: rpi: cam_helper: Add Sony IMX327
 - ipa: raspberrypi: Add tuning file for IMX462 sensor
 - ipa: raspberrypi: Add tuning file for IMX327 sensor
 - libcamera: libipa: camera_sensor_helper: add IMX290 black level
 - ipa: libipa: vector: Add mutable x(), y() and z() accessors
 - ipa: libipa: vector: Add r(), g() and b() accessors
 - ipa: libipa: vector: Add scalar constructor
 - ipa: libipa: vector: Rename the dot product operator*() to dot()
 - ipa: libipa: vector: Generalize arithmetic operators
 - ipa: libipa: vector: Add missing binary arithemtic operators
 - ipa: libipa: vector: Add compound assignment operators
 - ipa: libipa: vector: Add element-wise min() and max() functions
 - ipa: libipa: vector: Add sum() function
 - ipa: ipu3: awb: Replace Awb::RGB class with ipa::RGB
 - ipa: libipa: colour: Use the RGB class to model RGB values
 - ipa: libipa: colour: Use Vector and Matrix for linear algebra
 - ipa: rkisp1: awb: Use RGB class to store colour gains
 - ipa: rkisp1: awb: Use Vector and Matrix for linear algebra
 - ipa: rkisp1: awb: Expand comment
 - libcamera: libipa: camera_sensor: Add GalaxyCore gc05a2 sensor properties
 - libcamera: libipa: camera_sensor: Add GalaxyCore gc08a3 sensor properties
 - ipa: rpi: Rename Matrix to Matrix3x3
 - ipa: rpi: ccm: Replace local matrix implementation with the libcamera one
 - libipa: Use Matrix class from libcamera
 - libipa: Drop Matrix class
 - libipa: agc_mean_luminance: Rename yaml key from exposure-time to exposureTime
 - ipa: software_isp: Add constructor to the IPA context
 - ipa: ipu3: Add constructor to the IPA context
 - libcamera: libipa: camera_sensor_helper: Use `variant` instead of `union`
 - ipa: rpi: Fix wrong frame integration difference value for OV9281
 - ipa: rpi: cam_helper: imx708: Correct the frame integration diff value
 - libipa: Centralise Fixed / Floating point convertors
 - ipa: mali-c55: Add Mali-C55 ISP IPA module
 - ipa: mali-c55: Add Agc algorithm
 - ipa: mali-c55: Add BLC Algorithm
 - ipa: mali-c55: Add AWB Algorithm
 - ipa: mali-c55: Add Lens Shading Correction algorithm
 - ipa: mali-c55: Add IMX415 tuning data file
 - ipa: rkisp1: awb: Load white balance gains from tuning file
 - ipa: rkisp1: awb: Implement ColourTemperature control
 - ipa: rpi: awb: Make it possible to set the colour temperature directly
 - ipa: libipa: Add Lux helper
 - ipa: rkisp1: Add Lux algorithm module
 - controls: rpi: Add a vendor rpi::ScalerCrops control

documentation:
 - Documentation: guides: Fix FileSink source link

test:
 - test: py: Fix log level restore in SimpleTestMethods()
 - test: py: Replace environment array with environment object
 - test: py: LD_PRELOAD the C++ standard library when using ASan
 - test: libipa: Add Vector class test
 - test: span: Use intended variable

tuning:
 - utils: tuning: libtuning: Fix tuning for non RGGB RAWs
 - libtuning: Use logging framework in ctt_awb.awb()
 - libtuning: Remove the Cam object from ctt_awb.awb()
 - libtuning: Fix access to color member in ctt_awb.awb()
 - libtuning: Add initial AWB module
 - utils: tuning: rkisp1: Replace static AWB with new AWB module

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

v0.3.2+rpt20241119

Toggle v0.3.2+rpt20241119's commit message
ipa: rpi: awb: Disable CT search bias for Grey World AWB

If grey world AWB is setup in the tuning file, the CT curve will either
be missing or invalid. Disable biasing the statistics for the search in
such cases.

Fixes: ea8fd63 ("ipa: rpi: awb: Add a bias to the AWB search")
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

v0.3.2+rpt20241112

Toggle v0.3.2+rpt20241112's commit message
RASPBERRYPI ONLY: Use meson from pip when generating orig tarball

v0.3.2+rpt20240927

Toggle v0.3.2+rpt20240927's commit message
ipa: rpi: Add support for the Sony IMX500 camera sensor

Add a Sony IMX500 camera helper to the IPA. This also includes support
for the on-chip CNN hardware accelerator and parsing of the neural
network data stream returned in the metadata buffer.

Add tuning files for both VC4 and PiSP platforms.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>