tag:github.com,2008:https://github.com/libcamera-org/libcamera/releasesRelease notes from libcamera2025-11-27T11:55:39Ztag:github.com,2008:Repository/265350737/v0.6.02025-11-27T11:55:39Zlibcamera v0.6.0<p>The abi-compliance checker reports there are both ABI and API changes in this<br>
release:</p>
<p>Binary compatibility: 99.3%<br>
Source compatibility: 98.6%<br>
Total binary compatibility problems: 4, warnings: 1<br>
Total source compatibility problems: 18, warnings: 5</p>
<p>These have been planned to batch together a lot of recent development to<br>
improve the public facing API, which has extended the previous merge window on<br>
this occasion.</p>
<p>A full and detailed ABI report for those interested can always be generated<br>
between any two versions with the internal tooling:</p>
<p>"./utils/abi-compat.sh v0.5.2 v0.6.0"</p>
<p>Integration Overview:</p>
<p>With 211 commits and a longer merge window, this is quite a substantial<br>
release.</p>
<p>Key highlights include a new global configuration file system which will<br>
replace or extend the current use of environment variables to configure runtime<br>
behaviours.</p>
<p>The core V4L2 classes can now support the V4L2 Request API - which in turn has<br>
brought in huge developments for the i.MX8MP Dewarper support allowing full<br>
resize, scale, rotate and crop capabilities on top of also performing lens<br>
dewarping.</p>
<p>The SoftISP continues to develop, and specifically the IPU7 has been added as a<br>
supported configuration to the pipeline.</p>
<p>New tuning files have been added for Raspberry Pi platforms, improving support<br>
for the Sony IMX335, IMX415, IMX462, and ST VD55G1 image sensors, and Decompand<br>
support has been added for the Raspberry Pi 5.</p>
<p>At the core, we now require Meson 1.0.1, and various improvements have been<br>
made for thrad handling, improving synchronisation and event dispatch, as well<br>
as fixing the serialisation operations for isolated IPA modules.</p>
<p>In the applications components, there are fixes to cam adding more output<br>
formats and qcam now behaves more consistently when no camera is selected. The<br>
python bindings have received fixes for paths from meson, and the<br>
FrameBuffer::planes wrapper.</p>
<p>On the Documentation side, there's a new theme refresh and clearer separation<br>
between the internal and public API, and fixes to the contributing guidelines.</p>
<p>The following commits in this release relate to either a bug fix or an<br>
improvement to an existing commit.</p>
<ul>
<li>libcamera: base: semaphore: Do not unlock prematurely
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=225" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=225</a></li>
</ul>
</li>
<li>apps: cam: Do not overwrite name when adding camera model
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/aab49f903e858a2ea9765514bcc26bbd18edd13c/hovercard" href="https://github.com/libcamera-org/libcamera/commit/aab49f903e858a2ea9765514bcc26bbd18edd13c"><tt>aab49f9</tt></a> ("cam: Do not assume Location is available")</li>
</ul>
</li>
<li>Documentation: Fix documentation generation when subproject
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/0382d215db78477d106f32d8941b13fe2462e235/hovercard" href="https://github.com/libcamera-org/libcamera/commit/0382d215db78477d106f32d8941b13fe2462e235"><tt>0382d21</tt></a> ("Documentation: Use Sphinx doxylink to generate links to doxygen")</li>
</ul>
</li>
<li>apps: qcam: Do nothing if no camera is selected
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=177" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=177</a></li>
</ul>
</li>
<li>utils: codegen: gen-formats.py: Fix big endian formats
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/7c496f1c54dd5846925183471b30fec227624a65/hovercard" href="https://github.com/libcamera-org/libcamera/commit/7c496f1c54dd5846925183471b30fec227624a65"><tt>7c496f1</tt></a> ("utils: gen-formats: Support big-endian DRM formats")</li>
</ul>
</li>
<li>pycamera: Fix FrameBuffer::planes wrapper
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/b8d332cdcc130c27232f61369e7bab2d954e7ac6/hovercard" href="https://github.com/libcamera-org/libcamera/commit/b8d332cdcc130c27232f61369e7bab2d954e7ac6"><tt>b8d332c</tt></a> ("libcamera: framebuffer: Replace vector with span in constructor")</li>
</ul>
</li>
<li>libipa: agc_mean_luminance: Fix constraint logging
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/42e18c96bcb70a00d2fefce2ff01bc58dbdd7389/hovercard" href="https://github.com/libcamera-org/libcamera/commit/42e18c96bcb70a00d2fefce2ff01bc58dbdd7389"><tt>42e18c9</tt></a> ("libipa: agc_mean_luminance: Add debug logging")</li>
</ul>
</li>
<li>libcamera: software_isp: Pass correct y-coordinate to stats
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=280" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=280</a></li>
</ul>
</li>
<li>libcamera: controls: Expose string controls as <code>std::string_view</code>
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=256" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=256</a></li>
</ul>
</li>
<li>pipeline: simple: Consider output sizes when choosing pipe config
<ul>
<li>Closes: <a href="https://gitlab.freedesktop.org/camera/libcamera/-/issues/236" rel="nofollow">https://gitlab.freedesktop.org/camera/libcamera/-/issues/236</a></li>
</ul>
</li>
<li>ipa: rpi: vd56g3: Fix frameIntegrationDiff value
<ul>
<li>Reported-by: Jacopo Mondi <a href="mailto:jacopo.mondi@ideasonboard.com">jacopo.mondi@ideasonboard.com</a></li>
</ul>
</li>
<li>libcamera: rkisp1: Mark VBLANK as priority
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d"><tt>f72c76e</tt></a> ("rkisp1: Honor the FrameDurationLimits control")</li>
</ul>
</li>
<li>libcamera: base: thread: Use <code>pthread_self()</code> when setting name
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/559128b1f1b3cfd82f46b8a1248cbb4de0463db1/hovercard" href="https://github.com/libcamera-org/libcamera/commit/559128b1f1b3cfd82f46b8a1248cbb4de0463db1"><tt>559128b</tt></a> ("Thread: Add name parameter")</li>
</ul>
</li>
<li>pipeline: imx8-isi: Delay ISI routes config to acquire() time
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/92df79112fb22a9e08cdb5f354652a5a7ade7a6e/hovercard" href="https://github.com/libcamera-org/libcamera/commit/92df79112fb22a9e08cdb5f354652a5a7ade7a6e"><tt>92df791</tt></a> ("pipeline: imx8-isi: Add multicamera support")</li>
</ul>
</li>
<li>pipeline: simple: Reduce warning of unknown pixel formats
<ul>
<li>Closes: <a href="https://gitlab.freedesktop.org/camera/libcamera/-/issues/291" rel="nofollow">https://gitlab.freedesktop.org/camera/libcamera/-/issues/291</a></li>
</ul>
</li>
<li>libcamera: pipeline_handler: Fix requestComplete on waiting requests on stop
<ul>
<li>Closes: <a href="https://gitlab.freedesktop.org/camera/libcamera/-/issues/281" rel="nofollow">https://gitlab.freedesktop.org/camera/libcamera/-/issues/281</a></li>
</ul>
</li>
<li>libcamera: software_isp: Assign colour spaces in configurations
<ul>
<li>Closes: <a href="https://gitlab.freedesktop.org/camera/libcamera/-/issues/294" rel="nofollow">https://gitlab.freedesktop.org/camera/libcamera/-/issues/294</a></li>
</ul>
</li>
<li>libipa: exposure_mode_helper: Set quantizationGain in absence of a sensor helper
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/f077c58e087ef90644621f4039bd7922ced0bc57/hovercard" href="https://github.com/libcamera-org/libcamera/commit/f077c58e087ef90644621f4039bd7922ced0bc57"><tt>f077c58</tt></a> ("libipa: exposure_mode_helper: Take exposure/gain quantization into account")</li>
</ul>
</li>
<li>ipa: libipa: agc_mean_luminance: Fix yTarget handling in constraints
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/24247a12c7d354087ff8a02b5dc2cc9c916f2e00/hovercard" href="https://github.com/libcamera-org/libcamera/commit/24247a12c7d354087ff8a02b5dc2cc9c916f2e00"><tt>24247a1</tt></a> ("ipa: libipa: Add AgcMeanLuminance base class")</li>
</ul>
</li>
<li>libcamera: control_serializer: Add array info to serialized ControlValue
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=285" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=285</a></li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by category:</p>
<p>core:</p>
<ul>
<li>libcamera: converter_v4l2_m2m: Add missing <code><set></code> include</li>
<li>treewide: Remove top-level <code>const</code> from return types</li>
<li>libcamera: camera_sensor: getControls(): Use span</li>
<li>libcamera: camera_sensor: getFormat(): Use span</li>
<li>libcamera: ipa_proxy: Log configuration file path</li>
<li>libcamera: base: thread: eventDispatcher(): Not thread safe</li>
<li>libcamera: base: semaphore: Do not unlock prematurely</li>
<li>meson: Bump minimum version to v1.0.1</li>
<li>meson: Use dependency('dl')</li>
<li>libcamera: v4l2_videodevice: Avoid repeated calls to FrameBuffer::planes()</li>
<li>meson: Check for Python modules manually</li>
<li>libcamera: sensor: imx462: Add sensor delays to CameraSensorProperties</li>
<li>libcamera: clock_recovery: Use nanoseconds in addSample()</li>
<li>utils: Add unary negation operation to Duration</li>
<li>utils: codegen: ipc: Put default values in declaration</li>
<li>utils: codegen: ipc: Generate templated constructor</li>
<li>utils: codegen: gen-formats.py: Use jinja</li>
<li>utils: codegen: gen-formats.py: Fix big endian formats</li>
<li>libcamera: framebuffer: Replace vector with span in constructor</li>
<li>libcamera: request: addBuffer(): Do not destroy fence on failure</li>
<li>libcamera: camera_sensor_properties: Add vd55g1 camera sensor</li>
<li>include: linux: Partially update linux headers from v6.16-rc1-310-gd968e50b5c26</li>
<li>config: Introduce global runtime configuration</li>
<li>libcamera: camera_manager: Construct GlobalConfiguration instance</li>
<li>config: Add configuration retrieval helpers</li>
<li>camera_manager: Look up pipelines match list in configuration file</li>
<li>config: Check configuration file version</li>
<li>meson: Add option to disable libunwind integration</li>
<li>libcamera: base: thread: Make <code>removeMessages()</code> public</li>
<li>utils: codegen: ipc: Split proxy types</li>
<li>libcamera: controls: Expose string controls as <code>std::string_view</code></li>
<li>subprojects: libpisp: Update to v1.3.0</li>
<li>libcamera: request: Clarify ReuseBuffers flag usage with fences</li>
<li>libcamera: base: utils: Simplify <code>enumerate()</code></li>
<li>config: Fix doxygen 1.15.0 errors</li>
<li>libcamera: base: {unique,shared}_fd: Warn if closing fails</li>
<li>libcamera: base: utils: Simplify hex adaptor</li>
<li>libcamera: base: thread: Use <code>std::unique_ptr</code> instead of raw pointer</li>
<li>Thread: Add name parameter</li>
<li>libcamera: base: thread: Use <code>pthread_self()</code> when setting name</li>
<li>utils: checkstyle.py: Accept <code>Closes</code> commit trailer</li>
<li>libcamera: pipeline_handler: Add accessor for useCount_</li>
<li>subprojects: libyuv: Bump to version 1922</li>
<li>treewide: Use <code>argparse.FileType</code> in more places</li>
<li>libcamera: pipeline_handler: Fix requestComplete on waiting requests on stop</li>
<li>libcamera: base: thread: Use <code>acquire</code> memo. when reading event dispatcher</li>
<li>libcamera: request: Store fence <code>EventNotifier</code> directly</li>
<li>libcamera: ipa_data_serializer: Add specialization for enums</li>
<li>libcamera: simple: Detect Bayer pattern change during configure()</li>
<li>libcamera: converter: Utilise shared MediaDevice pointers</li>
<li>libcamera: Add support for V4L2 requests</li>
<li>libcamera: converter: Add V4L2 request support</li>
<li>libcamera: converter_v4l2_m2m: Add suport for V4L2 requests</li>
<li>libcamera: converter_v4l2_m2m: Always set stride</li>
<li>include: linux: Update headers for Dw100 dewarper engine</li>
<li>libcamera: converter_v4l2_m2m: Add helper to apply controls</li>
<li>libcamera: converter_v4l2_m2m: Add debug logging for formats</li>
<li>libcamera: converter: Add dw100 vertex map class</li>
<li>libcamera: converter: Add dw100 converter module</li>
<li>libcamera: internal: camera_sensor: Add accessor for mountingOrientation_</li>
<li>libcamera: Add transpose() function to size</li>
<li>libcamera: dw100_vertexmap: Implement parametric dewarping</li>
<li>libcamera: Add and implement LensDewarpEnable control</li>
<li>libcamera: control_serializer: Add array info to serialized ControlValue</li>
<li>Revert "controls: Add boolean constructors for ControlInfo"</li>
</ul>
<p>pipeline:</p>
<ul>
<li>pipeline: simple: Improve debug log in validate()</li>
<li>libcamera: pipeline: Avoid unnecessary indirection in frame info map</li>
<li>pipeline: ipu3: Drop unneeded forward declarations</li>
<li>pipeline: rkisp1: Replace error handling gotos with utils::exit_scope</li>
<li>pipeline: rpi: Use structured bindings in range-based for loop</li>
<li>pipeline: imx8-isi: Fix crossbar's sink pad computation</li>
<li>pipeline: simple: Enable simple pipelinehandler with SoftISP on Intel IPU7</li>
<li>pipelines: Use lambda functions to factor out buffer mapping code</li>
<li>pipeline: rkisp1: Add error log when parameter queuing fails</li>
<li>pipeline: rkisp1: Query kernel for available params blocks</li>
<li>rkisp1: agc: Agc add yTarget to frame context</li>
<li>pipeline: simple: Allow enabling software ISP via config file</li>
<li>libcamera: software_isp: Make input buffer copying configurable</li>
<li>libcamera: software_isp: Make measurement configurable</li>
<li>libcamera: pipeline: virtual: Move image generation to separate thread</li>
<li>libcamera: software_isp: Add valid flag to struct SwIspStats</li>
<li>libcamera: software_isp: Run sw-statistics once every 4th frame</li>
<li>libcamera: software_isp: Fix width adjustment in SwStatsCpu::setWindow</li>
<li>libcamera: software_isp: Clarify SwStatsCpu::setWindow use</li>
<li>libcamera: software_isp: Pass correct y-coordinate to stats</li>
<li>pipeline: simple: Initialize maxQueuedRequestsDevice to 4</li>
<li>pipeline: simple: Increase internal buffers for software ISP to 4</li>
<li>pipeline: simple: Allow buffer counts from 1 to 32</li>
<li>libcamera: software_isp: Clear pending async work</li>
<li>pipeline: simple: Avoid overusage of auto variables</li>
<li>libcamera: software_isp: Apply CCM swap also on green</li>
<li>pipeline: simple: Consider output sizes when choosing pipe config</li>
<li>libcamera: rkisp1: Mark VBLANK as priority</li>
<li>pipeline: imx8-isi: Delay ISI routes config to acquire() time</li>
<li>libcamera: software_isp: Fix gamma table when CCM is used</li>
<li>pipeline: simple: Reduce warning of unknown pixel formats</li>
<li>libcamera: pipeline: uvcvideo: Reject sensor configuration</li>
<li>libcamera: software_isp: Assign colour spaces in configurations</li>
<li>pipeline: virtual: Provide and validate colorspace</li>
<li>libcamera: pipeline: Utilise shared MediaDevice pointers</li>
<li>libcamera: rkisp1: Properly cancel buffers in dewarp case</li>
<li>libcamera: rkisp1: Move useDewarper_ flag into RkISP1CameraData</li>
<li>libcamera: rkisp1: Scale down in dewarper instead of resizer</li>
<li>libcamera: rkisp1: Allow upscaling when the dewarper is present</li>
<li>pipeline: rkisp1: Fix number of buffers imported into the dewarper</li>
<li>libcamera: rkisp1: Use the dw100 converter module instead of the generic v4l2 converter</li>
<li>pipeline: rksip1: Move isRaw up in scope</li>
<li>pipeline: rkisp1: Drop rawFormat variable</li>
<li>pipeline: rkisp1: Enable the dewarper based on the tuning file</li>
<li>libcamera: rkisp1: Handle requested orientation using dewarper</li>
<li>pipeline: rkisp1: Load dewarp parameters from tuning file</li>
</ul>
<p>apps:</p>
<ul>
<li>apps: common: options: Avoid copying in range based for loop</li>
<li>apps: cam: Do not overwrite name when adding camera model</li>
<li>apps: cam: drm: Drop unneeded local variable</li>
<li>py: libcamera: Improve python binding installation</li>
<li>py: libcamera: Get dependency from meson python module unconditionally</li>
<li>py: libcamera: Always use install path from meson python module</li>
<li>apps: qcam: Do nothing if no camera is selected</li>
<li>apps: cam: Support PPM output for other RGB formats</li>
<li>pycamera: Fix FrameBuffer::planes wrapper</li>
<li>apps: cam: Use signalfd</li>
<li>gstreamer: Update the TODO list</li>
<li>android: camera_hal_manager: Remove <code>cameraLocation()</code></li>
<li>gstreamer: Associate libcamera::Stream with GstPad</li>
<li>gstreamer: Improve logging for buffer pool activation</li>
<li>gstreamer: Track RequestWrap's GstBuffer using GstPad</li>
<li>py: gen-py-formats.py: Open input file in binary mode</li>
<li>apps: cam: sdl_texture: Support NV21</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: Fix documentation generation when subproject</li>
<li>Documentation: Use python3 directly to check for doxylink version</li>
<li>Documentation: Use standard ordering for Doxyfile variables</li>
<li>Documentation: Add doxygen-awesome-css</li>
<li>Documentation: Enable doxygen-awesome-css</li>
<li>Documentation: Use the sphinx book theme</li>
<li>Documentation: Add api-html/ and internal-api-html/ to docs sources</li>
<li>Documentation: Reorganize toctree</li>
<li>Documentation: Improve Sphinx and Doxygen integration</li>
<li>Documentation: Drop unnecessary documentation-contents.rst</li>
<li>Documentation: mainpage: Make it easier to distinguish public and internal API</li>
<li>Documentation: Rename api to public-api and drop -html suffix</li>
<li>Documentation: Add global configuration file documentation</li>
<li>Documentation: Fix grammar and typo in meson.build comment</li>
<li>Documentation: contributing: Provide a reference to Matrix</li>
<li>Documentation: contributing: Update issue tracker</li>
<li>Documentation: contributing: Update Source references</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: rpi: Add Arducam B0568 IMX335 tuning files</li>
<li>ipa: rpi: Add Arducam B0569 IMX415 tuning files</li>
<li>ipa: rpi:: denoise: Implement TDN back-off for CDN deviation</li>
<li>ipa: rpi: pisp: data: Improve noise and detail tuning</li>
<li>ipa: rpi: pisp: data: Update all non-official camera tuning files</li>
<li>ipa: rpi: vc4: Minor tuning changes</li>
<li>ipa: rpi: sdn: Remove legacy denoise warning</li>
<li>ipa: rpi: imx462: Add official RPi tuning for IMX462</li>
<li>ipa: rpi: ccm: Implement "manual" CCM mode</li>
<li>ipa: rpi: Add vd55g1 support for rpi</li>
<li>ipa: rpi: Add vd55g1 tuning files for rpi</li>
<li>libcamera: libipa: Add vd55g1 support for libipa</li>
<li>libcamera: libipa: camera_sensor: Add Himax HM1246 sensor properties</li>
<li>ipa: rkisp1: Add basic compression algorithm</li>
<li>libipa: camera_sensor_helper: Add quantizeGain() function</li>
<li>libipa: exposure_mode_helper: Take exposure/gain quantization into account</li>
<li>libipa: exposure_mode_helper: Remove double calculation of lastStageGain</li>
<li>libipa: exposure_mode_helper: Remove unnecessary clamp calls</li>
<li>libipa: agc_mean_luminance: Fix constraint logging</li>
<li>libipa: agc_mean_luminance: Configure the exposure mode helpers</li>
<li>libipa: exposure_mode_helper: Calculate quantization gain in splitExposure()</li>
<li>ipa: rkisp1: agc: Add correction for exposure quantization</li>
<li>ipa: rkisp1: Switch histogram to RGB combined mode</li>
<li>libipa: agc_mean_luminance: Introduce effectiveYTarget() accessor</li>
<li>libipa: agc_mean_luminance: Add support for additional constraints</li>
<li>ipa: rkisp1: Add WDR algorithm</li>
<li>ipa: Look up IPA configurables in configuration file</li>
<li>ipa: rpi: agc: Allow exposure mode to be updated in auto mode</li>
<li>ipa: software_isp: Fix context_.configuration.agc.againMin init</li>
<li>ipa: software_isp: AGC: Do not lower gain below 1.0</li>
<li>ipa: software_isp: AGC: Raise exposure or gain not both at the same time</li>
<li>ipa: software_isp: AGC: Only use integers for exposure calculations</li>
<li>ipa: simple: blc: Use 16 as starting blacklevel when there is no sensor-info</li>
<li>ipa: simple: awb: Avoid incorrect arithmetic in AWB</li>
<li>ipa: simple: awb: Use correct type in std::accumulate</li>
<li>ipa: simple: blc: Prevent division by zero in BLC</li>
<li>ipa: simple: agc: Prevent division by zero in AGC</li>
<li>ipa: rpi: pisp: Add decompand support using PiSP hardware block</li>
<li>ipa: rpi: Add FE globals as a parameter to applyDecompand()</li>
<li>ipa: rpi: pisp: Add a DecompandAlgorithm class</li>
<li>ipa: rpi: pisp: Allow an initial decompand curve to be set on the FE</li>
<li>ipa: meson.build: Remove duplicated variable</li>
<li>ipa: rpi: Fix the set function for floating statistics regions</li>
<li>ipa: rpi: lux: Handle camera mode sensitivity correctly</li>
<li>ipa: rpi: pisp: Use a floating region to get whole image Y statistics</li>
<li>ipa: rpi: vc4: Use a floating statistics region for a full image Y sum</li>
<li>ipa: rpi: lux: Use floating statistics region to obtain the current Y value</li>
<li>libipa: camera_sensor_helper: Add imx708</li>
<li>ipa: rpi: vd56g3: Fix frameIntegrationDiff value</li>
<li>ipa: libipa: agc_mean_luminance: Avoid unnecessary copies</li>
<li>ipa: rkisp1: dpf: Enable strength after enable Dpf</li>
<li>libipa: module: Allow algorithms to be disabled via the tuning file</li>
<li>libipa: exposure_mode_helper: Set quantizationGain in absence of a sensor helper</li>
<li>ipa: libipa: pwl: Allow to parse a plain yaml value as single point PWL</li>
<li>ipa: rkisp1: lux: Properly handle frame context and active state</li>
<li>ipa: libipa: agc_mean_luminance: Change luminance target to piecewise linear function</li>
<li>ipa: libipa: agc_mean_luminance: Fix yTarget handling in constraints</li>
<li>ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls</li>
</ul>
<p>tuning:</p>
<ul>
<li>utils: raspberrypi: ctt: Update noise/sharpness tuning</li>
<li>utils: raspberrypi: ctt: Update vc4 tuning defaults</li>
<li>tuning: rksip1: Add a static Compress entry</li>
<li>tuning: rksip1: Add a static WideDynamicRange entry</li>
</ul>
<p>test:</p>
<ul>
<li>test: camera: Use Request::ReuseBuffers flag</li>
<li>test: utils: Add endlines</li>
<li>test: utils: Validate hex sign extension</li>
<li>lc-compliance: Ensure stream's colorspace is set after validate()</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.5.22025-08-07T13:48:55Zlibcamera v0.5.2<p>The abi-compliance checker reports 100% compatibility in this release.<br>
As such the SONAME is maintained at 0.5.</p>
<p>Binary compatibility: 100%<br>
Source compatibility: 100%<br>
Total binary compatibility problems: 0, warnings: 0<br>
Total source compatibility problems: 0, warnings: 0</p>
<p>This release brings 129 commits with some substantial development on gstreamer<br>
for this release which is nice to see.</p>
<p>In core we can see development that cleans up ProcessManager in a drive to<br>
reduce singleton patterns throughout libcamera. There's a new ClockRecovery<br>
class from Raspberry Pi which supports the new Wallclock timestamps<br>
metadata and provides the capablity for synchronising cameras across<br>
devices which will very exciting to see in the future.</p>
<p>Pipelines are now able to limit the number of requests queued into the pipeline<br>
handler which helps prevent issues when applications desire to use a larger<br>
request queue. This is particularly beneficial to pipewire based applications<br>
it seems with longer processing queues.</p>
<p>It's now possible to check if controls exist with new macros defined for<br>
every control to help codebases compile against multiple versions:</p>
<ul>
<li>LIBCAMERA_HAS_$VENDOR_VENDOR_$MODE_$NAME</li>
</ul>
<p>And for developers we now have a b4-config file to support easily using the<br>
tool to send patche to the mailinglist!</p>
<p>On the apps side, there's lots of development on Gstreamer, including fixing<br>
bayer formats for 10/12/14/16 bit depths. Both cam and gstreamer now report the<br>
camera properties in full with text representations of all the enum/properties.</p>
<p>With the IPA components, Raspberry Pi includes development and updates to<br>
Autofocus and makes the maximum digital gain limits configurable. RKISP1 now<br>
has ExposureValue control implemented using exposure compensation in the<br>
agc_mean_luminance implementation. The ST vd56g3 camera sensor support is added<br>
for both RPi and libipa platforms.</p>
<p>For Pipeline Handlers notable updates include the imx8-isi being fixed for<br>
newer generation chips from NXP adding multi-camera support, and Wallclock<br>
timestamp support added to Rapsberry Pi.</p>
<p>Finally, on the documentation side - a notable change is the update to use<br>
spinhx-doxylink. This should prevent stale links being used in the<br>
documentation pages but adds an extra tool to the dependencies for building the<br>
documentation.</p>
<p>Contributors:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="27 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
23 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
17 Stefan Klug <stefan.klug@ideasonboard.com>
12 David Plowman <david.plowman@raspberrypi.com>
10 Naushir Patuck <naush@raspberrypi.com>
9 Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
7 Umang Jain <uajain@igalia.com>
5 Antoine Bouyer <antoine.bouyer@nxp.com>
5 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
3 Jaslo Ziska <jaslo@ziska.de>
2 Daniel Scally <dan.scally@ideasonboard.com>
2 Kieran Bingham <kieran.bingham@ideasonboard.com>
1 Christian Rauch <Rauch.Christian@gmx.de>
1 Han-Lin Chen <hanlinchen@chromium.org>
1 Harvey Yang <chenghaoyang@chromium.org>
1 Hou Qi <qi.hou@nxp.com>
1 Milan Zamazal <mzamazal@redhat.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Paul Elder <paul.elder@ideasonboard.com>"><pre class="notranslate"><code>27 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
23 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
17 Stefan Klug <stefan.klug@ideasonboard.com>
12 David Plowman <david.plowman@raspberrypi.com>
10 Naushir Patuck <naush@raspberrypi.com>
9 Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
7 Umang Jain <uajain@igalia.com>
5 Antoine Bouyer <antoine.bouyer@nxp.com>
5 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
3 Jaslo Ziska <jaslo@ziska.de>
2 Daniel Scally <dan.scally@ideasonboard.com>
2 Kieran Bingham <kieran.bingham@ideasonboard.com>
1 Christian Rauch <Rauch.Christian@gmx.de>
1 Han-Lin Chen <hanlinchen@chromium.org>
1 Harvey Yang <chenghaoyang@chromium.org>
1 Hou Qi <qi.hou@nxp.com>
1 Milan Zamazal <mzamazal@redhat.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Paul Elder <paul.elder@ideasonboard.com>
</code></pre></div>
<p>143 files changed, 6004 insertions(+), 1620 deletions(-)</p>
<p>Integration overview:</p>
<p>The following commits in this release relate to either a bug fix or an<br>
improvement to an existing commit.</p>
<ul>
<li>pipeline: imx8-isi: Cosmetic changes
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/680cde6005096677688ed976bdc758763774036c/hovercard" href="https://github.com/libcamera-org/libcamera/commit/680cde6005096677688ed976bdc758763774036c"><tt>680cde6</tt></a> ("libcamera: imx8-isi: Split Bayer/YUV config generation")</li>
</ul>
</li>
<li>pipeline: imx8-isi: Fix match returned value in error case
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/0ec982d210861cc6aaebb5d6e8f1a755a16c9792/hovercard" href="https://github.com/libcamera-org/libcamera/commit/0ec982d210861cc6aaebb5d6e8f1a755a16c9792"><tt>0ec982d</tt></a> ("libcamera: pipeline: Add IMX8 ISI pipeline")</li>
</ul>
</li>
<li>gstreamer: Replace NULL with nullptr
<ul>
<li>Reported-by: Nicolas Dufresne <a href="mailto:nicolas.dufresne@collabora.com">nicolas.dufresne@collabora.com</a></li>
</ul>
</li>
<li>libcamera: base: Fix log level parsing when multiple categories are listed
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/24c2caa1c1b39d0bb17dfaca0aedf9b8e91b5e26/hovercard" href="https://github.com/libcamera-org/libcamera/commit/24c2caa1c1b39d0bb17dfaca0aedf9b8e91b5e26"><tt>24c2caa</tt></a> ("libcamera: base: log: Use <code>std::string_view</code> to avoid some copies")</li>
</ul>
</li>
<li>libcamera: pipeline: uvcvideo: Silently ignore <code>AeEnable</code>
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ffcecda4d5b9b5d17e3a99e07033321186f25a63/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ffcecda4d5b9b5d17e3a99e07033321186f25a63"><tt>ffcecda</tt></a> ("libcamera: pipeline: uvcvideo: Report new AeEnable control as available")</li>
</ul>
</li>
<li>ipa: rpi: Defer initialising AF LensPosition ControlInfo and value
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=258" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=258</a></li>
</ul>
</li>
<li>subprojects: libpisp: Update to 1.2.1
<ul>
<li>Bug: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2942747157" data-permission-text="Title is private" data-url="https://github.com/raspberrypi/libpisp/issues/43" data-hovercard-type="pull_request" data-hovercard-url="/raspberrypi/libpisp/pull/43/hovercard" href="https://github.com/raspberrypi/libpisp/pull/43">raspberrypi/libpisp#43</a></li>
</ul>
</li>
<li>ipa: rpi: Fix bug in AfState reporting
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ea5f451c5660621cf1787e25c73983cec244d782/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ea5f451c5660621cf1787e25c73983cec244d782"><tt>ea5f451</tt></a> ("ipa: rpi: controller: AutoFocus bidirectional scanning")</li>
</ul>
</li>
<li>libcamera: base: bound_method: Move return value
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=273#c1" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=273#c1</a></li>
</ul>
</li>
<li>libcamera: camera: Fix up the AeEnable control during Camera::start()
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/7abd4139051c9a53d5a9f17b7ac64d438b6172ad/hovercard" href="https://github.com/libcamera-org/libcamera/commit/7abd4139051c9a53d5a9f17b7ac64d438b6172ad"><tt>7abd413</tt></a> ("libcamera: camera: Pre-process AeEnable control")</li>
</ul>
</li>
<li>libcamera: Put buffer back to V4L2BufferCache when VIDIOC_QBUF fails
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/cadae67e45785dc5dc005adb63c2dec841f44b1d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/cadae67e45785dc5dc005adb63c2dec841f44b1d"><tt>cadae67</tt></a> ("libcamera: v4l2_videodevice: Add FrameBuffer interface")</li>
</ul>
</li>
<li>utils: codegen: ipc: Check <code>ipc_</code> instead of <code>isolate_</code>
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=276" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=276</a></li>
</ul>
</li>
<li>libcamera: camera: Do not call <code>generateConfiguration()</code> synchronously
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=273" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=273</a></li>
</ul>
</li>
<li>meson: Update subprojects .gitignore
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/a29c53f6a646ed9644a94b2face62d078d8290be/hovercard" href="https://github.com/libcamera-org/libcamera/commit/a29c53f6a646ed9644a94b2face62d078d8290be"><tt>a29c53f</tt></a> ("meson: Use libyaml wrap file from wrapdb")</li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by category:</p>
<p>core:</p>
<ul>
<li>libcamera: base: log: Take <code>LogCategory</code> by reference</li>
<li>libcamera: base: Fix log level parsing when multiple categories are listed</li>
<li>libcamera: process: Use <code>pid_</code> member to decide if running</li>
<li>libcamera: process: start(): Use span instead of vector</li>
<li>libcamera: process: closeAllFdsExcept(): Take vector by value</li>
<li>libcamera: process: Move <code>closeAllFdsExcept()</code></li>
<li>libcamera: process: Use <code>close_range()</code> when available</li>
<li>libcamera: process: Remove <code>ProcessManager</code> singleton</li>
<li>libcamera: process: Disable copy/move</li>
<li>libcamera: process: Misc. cleanup around <code>execv()</code></li>
<li>libcamera: process: Return error if already running</li>
<li>libcamera: process: Ensure that file descriptors are nonnegative</li>
<li>libcamera: framebuffer: Add FrameMetadata::Status::FrameStartup</li>
<li>libcamera: Add ClockRecovery class to generate wallclock timestamps</li>
<li>libcamera: controls: Revert incorrect SPDX removal</li>
<li>libcamera: controls: Remove hyphenation in control description text</li>
<li>libcamera: controls: Use nanoseconds units for FrameWallClock</li>
<li>libcamera: delayed_controls: Inherit from Object class</li>
<li>libcamera: pipeline_handler: Move waitingRequests_ into camera class</li>
<li>libcamera: pipeline_handler: Allow to limit the number of queued requests</li>
<li>libcamera: base: bound_method: Move return value</li>
<li>libcamera: controls: Generate macro for each control</li>
<li>libcamera: camera: Fix up the AeEnable control during Camera::start()</li>
<li>libcamera: Put buffer back to V4L2BufferCache when VIDIOC_QBUF fails</li>
<li>libcamera: camera_manager: Log info message to report camera creation</li>
<li>libcamera: v4l2_videodevice: Add color space to format string representation</li>
<li>libcamera: Drop remaining file names from header comment blocks</li>
<li>libcamera: control_serializer: Accept empty <code>ControlList</code></li>
<li>libcamera: camera: Do not call <code>generateConfiguration()</code> synchronously</li>
<li>libcamera: utils: Add scope_exit class</li>
<li>libcamera: v4l2_videodevice: Use scope_exit</li>
<li>libcamera: camera_sensor_properties: Add vd56g3 camera sensor</li>
<li>libcamera: base: bound_method: Forward arguments when possible</li>
<li>meson: Use libyaml wrap file from wrapdb</li>
<li>meson: Update subprojects .gitignore</li>
<li>pipeline: v4l2_subdevice: Add color space to format string representation</li>
<li>utils: gen-debug-controls: Remove line number from control description</li>
<li>utils: gen-debug-controls: Fix handling of controls that appear multiple times</li>
<li>utils: gen-debug-controls: Improve log output</li>
<li>utils: codegen: ipc: Check <code>ipc_</code> instead of <code>isolate_</code></li>
<li>controls: Add FrameWallClock control</li>
<li>controls: Add camera synchronisation controls for Raspberry Pi</li>
<li>camera_sensor: Expand on computeTransform() documentation</li>
<li>subprojects: libpisp: Update to 1.2.1</li>
<li>V4L2VideoDevice: Call FrameBuffer::Private::cancel() in streamOff()</li>
<li>camera: Fix spell error</li>
<li>b4: Add .b4-config</li>
<li>package: Drop Gentoo ebuild</li>
</ul>
<p>apps:</p>
<ul>
<li>android: camera_device: Do not pass <code>nullptr</code> to <code>Request::addBuffer()</code></li>
<li>apps: common: image: Fix assertion</li>
<li>apps: cam: Print enum string for camera properties</li>
<li>apps: lc-compliance: Replace manual include guard with pragma once</li>
<li>qcam: Silence false positive warnings with Qt 6.9.0 and newer</li>
<li>gstreamer: Document improvements when updating minimum GStreamer version</li>
<li>gstreamer: Factor out video pool creation</li>
<li>gstreamer: Reduce indentation in gst_libcamera_create_video_pool()</li>
<li>gstreamer: Rename variable in gst_libcamera_create_video_pool()</li>
<li>gstreamer: Fix leak of GstQuery and GstBufferPool in error path</li>
<li>gstreamer: Drop incorrect unref on caps</li>
<li>gstreamer: Replace NULL with nullptr</li>
<li>gstreamer: Fix libcamerasrc responding latency before setting caps</li>
<li>gstreamer: Use std::exchange() instead of g_steal_pointer()</li>
<li>gstreamer: Make format_map[] const</li>
<li>gstreamer: Fix reconfiguration condition check</li>
<li>gstreamer: Log and check adjusted camera configuration</li>
<li>gstreamer: Enable bayer formats with 10/12/14/16 bits</li>
<li>gstreamer: Split value_set_rectangle() GValue helper</li>
<li>gstreamer: Move existing GValue helpers to gstreamer-utils</li>
<li>gstreamer: Report camera properties as device properties</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: rpi: Replace dropFrameCount in the IPA -> PH interface</li>
<li>ipa: rpi: Rename dropFrameCount_ to invalidCount_</li>
<li>ipa: rpi: Initialize enum controls with a list of values</li>
<li>ipa: rpi: Defer initialising AF LensPosition ControlInfo and value</li>
<li>ipa: rpi: controller: Improve findPeak() function in AF algorithm</li>
<li>ipa: rpi: controller: AutoFocus weighting tweak</li>
<li>ipa: rpi: controller: Autofocus CAF/PDAF stability tweak</li>
<li>ipa: rpi: controller: AutoFocus tweak earlyTerminationByPhase()</li>
<li>ipa: rpi: controller: Autofocus to use AWB statistics; re-trigger</li>
<li>ipa: rpi: controller: AutoFocus bidirectional scanning</li>
<li>ipa: rpi: Update IMX708 camera tuning files for AutoFocus changes</li>
<li>ipa: rpi: Fix bug in AfState reporting</li>
<li>ipa: rpi: agc: Change handling of colour gains less than 1</li>
<li>ipa: rpi: agc: Make the maximum digital gain configurable</li>
<li>ipa: rpi: agc: Rename "analogue gain" to "gain" where appropriate</li>
<li>ipa: rpi: Advance the delay context counter even when IPAs don't run</li>
<li>ipa: rpi: agc: Calculate digital gain in process()</li>
<li>ipa: rpi: Update digital gain handling in IPA base and derived classes</li>
<li>ipa: rpi: agc: Remove digital gain from AgcPrepareStatus</li>
<li>ipa: rpi: Fix static initialisation order bug in the Controller</li>
<li>ipa: rpi: Add vd56g3 support for rpi</li>
<li>ipa: rpi: Add vd56g3 tuning files for rpi</li>
<li>ipa: rkisp1: Move Sharpness control creation to Filter algorithm</li>
<li>ipa: rkisp1: agc: Implement ExposureValue control</li>
<li>libipa: pwl: Improve documentation</li>
<li>libipa: pwl: Fix single point Pwl</li>
<li>libipa: agc_mean_luminance: Add debug logging</li>
<li>libipa: agc_mean_luminance: Add exposure compensation support</li>
<li>libcamera: libipa: Add vd56g3 support for libipa</li>
</ul>
<p>pipeline:</p>
<ul>
<li>pipeline: ipa: rpi: Split RPiCameraData::dropFrameCount_</li>
<li>pipeline: rpi: Remove disable_startup_frame_drops config option</li>
<li>pipeline: rpi: Remove ispOutputCount_ and ispOutputTotal_</li>
<li>pipeline: rpi: Add wallclock timestamp support</li>
<li>pipeline: rpi: Fix for enumerating the media graphs</li>
<li>libcamera: pipeline: rpi: Do not set timestamps to 0 if unavailable</li>
<li>libcamera: pipeline: rpi: Do not clear request metadata anymore</li>
<li>pipeline: imx8-isi: Cosmetic changes</li>
<li>pipeline: imx8-isi: Fix match returned value in error case</li>
<li>pipeline: imx8-isi: Dynamically compute crossbar subdevice's first source.</li>
<li>pipeline: imx8-isi: Add constexpr for maximum pipeline and resize if needed</li>
<li>pipeline: imx8-isi: Add multicamera support</li>
<li>libcamera: pipeline: uvcvideo: Silently ignore <code>AeEnable</code></li>
<li>libcamera: pipeline: uvcvideo: Handle controls during startup</li>
<li>pipeline: rkisp1: Limit the maximum number of buffers queued in</li>
<li>pipeline: rkisp1: Properly handle the bufferCount set in the stream configuration</li>
<li>libcamera: pipeline: rkisp1: Don't rely on bufferCount</li>
<li>libcamera: software_isp: Remove type casts in statistics computation</li>
<li>pipeline: simple: Fix matching with empty media graphs</li>
<li>libcamera: mali-c55: Set bytesused appropriately</li>
<li>libcamera: mali-c55: Correct expected entity function</li>
</ul>
<p>test:</p>
<ul>
<li>libcamera: test: Add a failing test for the log level parser</li>
<li>test: libtest: CameraTest: Set env var before CameraManager</li>
<li>test: ipa: Add basic Pwl test</li>
<li>test: ipa: Add failing test for single point Pwl</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: Make <code>doxygen-internal</code> depend on public inputs</li>
<li>Documentation: application: Update mediactl URL</li>
<li>Documentation: Remove unneeded options from Sphinx configuration</li>
<li>Documentation: Drop documentation author names</li>
<li>Documentation: Use Sphinx doxylink to generate links to doxygen</li>
<li>Documentation: Replace links to Doxygen documentation with doxylink</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.5.12025-06-01T22:58:03Zlibcamera v0.5.1<p>The abi-compliance checker reports 100% compatibility in this release.<br>
As such the SONAME is maintained at 0.5.</p>
<p>Binary compatibility: 100%<br>
Source compatibility: 100%<br>
Total binary compatibility problems: 0, warnings: 0<br>
Total source compatibility problems: 0, warnings: 0</p>
<p>This release brings 93 commits with a large proportion of fixes and<br>
cleanup againt earlier releases. Improvements have been made to the<br>
Raspberry Pi Camera Tuning Tools, and the geometry, matrix and vector<br>
class helpers have been expanded for greater reuse throughout the<br>
project.</p>
<p>Notably for packagers - IPA modules now have their own subdirectory<br>
which should prevent undesirable surrupticious error messages that would<br>
occur if packagers choose to install the V4L2 adaptation layer in the<br>
same folder as the IPA modules.</p>
<p>The RKISP1 can now adapt to more complex input pipelines, including<br>
FPGAs and multiplexors, which has been beneficial for users on the<br>
i.MX8MP, and the IPA algorithms for i.MX8MP and RKISP1 continue to get<br>
improvements.</p>
<p>The software ISP has a new Saturation control (available when the CCM is<br>
enabled).</p>
<p>The Documentation and pipeline handler writers guide has been<br>
re-reviewed and cleaned up.</p>
<p>On the application and test side, lc-compliance now includes<br>
multi-stream tests, and cam has extended support for display formats and<br>
now prevents issues on non-display GPUs when rendering direct to DRM.</p>
<p>Contributors:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="36 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
15 Stefan Klug <stefan.klug@ideasonboard.com>
5 David Plowman <david.plowman@raspberrypi.com>
5 Kieran Bingham <kieran.bingham@ideasonboard.com>
5 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4 Milan Zamazal <mzamazal@redhat.com>
4 Quentin Schulz <quentin.schulz@cherry.de>
3 Daniel Scally <dan.scally@ideasonboard.com>
3 Paul Elder <paul.elder@ideasonboard.com>
2 Hou Qi <qi.hou@nxp.com>
2 Julien Vuillaumier <julien.vuillaumier@nxp.com>
2 Naushir Patuck <naush@raspberrypi.com>
2 Niklas Söderlund <niklas.soderlund@ragnatech.se>
2 Pavel Machek <pavel@ucw.cz>
1 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Sven Püschel <s.pueschel@pengutronix.de>"><pre class="notranslate"><code>36 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
15 Stefan Klug <stefan.klug@ideasonboard.com>
5 David Plowman <david.plowman@raspberrypi.com>
5 Kieran Bingham <kieran.bingham@ideasonboard.com>
5 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4 Milan Zamazal <mzamazal@redhat.com>
4 Quentin Schulz <quentin.schulz@cherry.de>
3 Daniel Scally <dan.scally@ideasonboard.com>
3 Paul Elder <paul.elder@ideasonboard.com>
2 Hou Qi <qi.hou@nxp.com>
2 Julien Vuillaumier <julien.vuillaumier@nxp.com>
2 Naushir Patuck <naush@raspberrypi.com>
2 Niklas Söderlund <niklas.soderlund@ragnatech.se>
2 Pavel Machek <pavel@ucw.cz>
1 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Sven Püschel <s.pueschel@pengutronix.de>
</code></pre></div>
<p>108 files changed, 3359 insertions(+), 528 deletions(-)</p>
<p>Integration overview:</p>
<p>The following commits in this release relate to either a bug fix or an<br>
improvement to an existing commit.</p>
<ul>
<li>meson: Do not automatically build documentation if sphinx-build-3 is found
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/aba567338b25c8cefe9e9e257d34ad3a61776276/hovercard" href="https://github.com/libcamera-org/libcamera/commit/aba567338b25c8cefe9e9e257d34ad3a61776276"><tt>aba5673</tt></a> ("Documentation: Move all dependencies into features")</li>
</ul>
</li>
<li>Revert "libcamera: rkisp1: Eliminate hard-coded resizer limits"
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08/hovercard" href="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08"><tt>7615454</tt></a> ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")</li>
</ul>
</li>
<li>pipeline: rkisp1: Fix vblank delay
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d"><tt>f72c76e</tt></a> ("rkisp1: Honor the FrameDurationLimits control")</li>
</ul>
</li>
<li>utils: raspberrypi: ctt: Fix NaNs in lens shading tables
<ul>
<li>Bug: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2985016047" data-permission-text="Title is private" data-url="https://github.com/raspberrypi/libcamera/issues/254" data-hovercard-type="issue" data-hovercard-url="/raspberrypi/libcamera/issues/254/hovercard" href="https://github.com/raspberrypi/libcamera/issues/254">raspberrypi/libcamera#254</a></li>
</ul>
</li>
<li>utils: raspberrypi: ctt: Fix NaNs in chromatic aberration tables
<ul>
<li>Bug: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2985016047" data-permission-text="Title is private" data-url="https://github.com/raspberrypi/libcamera/issues/254" data-hovercard-type="issue" data-hovercard-url="/raspberrypi/libcamera/issues/254/hovercard" href="https://github.com/raspberrypi/libcamera/issues/254">raspberrypi/libcamera#254</a></li>
</ul>
</li>
<li>utils: raspberrypi: ctt: Fix integer division error calculating LSC cell size
<ul>
<li>Bug: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="3041768849" data-permission-text="Title is private" data-url="https://github.com/raspberrypi/libcamera/issues/260" data-hovercard-type="issue" data-hovercard-url="/raspberrypi/libcamera/issues/260/hovercard" href="https://github.com/raspberrypi/libcamera/issues/260">raspberrypi/libcamera#260</a></li>
</ul>
</li>
<li>apps: qcam: Push the viewfinder role to vector
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ee2b011b65c69fa2126c0b118a52871d87776b0c/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ee2b011b65c69fa2126c0b118a52871d87776b0c"><tt>ee2b011</tt></a> ("apps: cam: Try raw role if default viewfinder role fails")</li>
</ul>
</li>
<li>ipa: Move IPA installations to a subdir
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=268" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=268</a></li>
</ul>
</li>
<li>ipa: rkisp1: algorithms: awb: Fix wrong colour temperature reporting
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/b60bd37b1a49f3083a850860791cf7bce19714aa/hovercard" href="https://github.com/libcamera-org/libcamera/commit/b60bd37b1a49f3083a850860791cf7bce19714aa"><tt>b60bd37</tt></a> ("ipa: rkisp1: Move calculation of RGB means into own function")</li>
</ul>
</li>
<li>ipa: rkisp1: ccm/lsc: Fix CCM/LSC based on manual color temperature
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/02308809548d084d0501e7d8bfc09cce70ee05ad/hovercard" href="https://github.com/libcamera-org/libcamera/commit/02308809548d084d0501e7d8bfc09cce70ee05ad"><tt>0230880</tt></a> ("ipa: rkisp1: awb: Implement ColourTemperature control")</li>
</ul>
</li>
<li>libcamera: controls: Fix <code>ControlInfoMap::count(unsigned int)</code>
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/76b9923e55fd615d0edf065085a4c14475304868/hovercard" href="https://github.com/libcamera-org/libcamera/commit/76b9923e55fd615d0edf065085a4c14475304868"><tt>76b9923</tt></a> ("libcamera: controls: Avoid exception in ControlInfoMap count() and find()")</li>
</ul>
</li>
<li>apps: cam: capture_script: Disallow arrays of strings
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/b35f04b3c19487de903b67340fcfb801557295d3/hovercard" href="https://github.com/libcamera-org/libcamera/commit/b35f04b3c19487de903b67340fcfb801557295d3"><tt>b35f04b</tt></a> ("cam: capture_script: Support parsing array controls")</li>
</ul>
</li>
<li>libcamera: matrix: Fix compilation error in inverse() function
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/6287ceff5aba1e8207aafdae9f967c70d9aad19f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/6287ceff5aba1e8207aafdae9f967c70d9aad19f"><tt>6287cef</tt></a> ("libcamera: matrix: Add inverse() function")</li>
</ul>
</li>
<li>ipa: rpi: controller: rpi: Fix colour gain typo in AGC
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/29892f1c56c6657a9d650aff203912212c295bd0/hovercard" href="https://github.com/libcamera-org/libcamera/commit/29892f1c56c6657a9d650aff203912212c295bd0"><tt>29892f1</tt></a> ("ipa: libipa: colour: Use the RGB class to model RGB values")</li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by category:</p>
<p>core:</p>
<ul>
<li>meson: Make the default value of "documentation" feature explicit</li>
<li>meson: Do not automatically build documentation if sphinx-build-3 is found</li>
<li>libcamera: request: Avoid double map lookup</li>
<li>utils: rkisp1: gen-csc-table: Support printing CCM in decimal</li>
<li>libcamera: ipa_module: Avoid unnecessary copy when getting signature</li>
<li>libcamera: controls: Disallow arrays of arrays</li>
<li>libcamera: media_device: Add helper to return matching entities</li>
<li>libcamera: internal: Add MediaPipeline helper</li>
<li>libcamera: stream: Add color space to configuration string representation</li>
<li>README.rst: remove unnecessary dependency for qcam</li>
<li>libcamera: v4l2_videodevice: Log buffer count on allocation error</li>
<li>libcamera: matrix: Replace SFINAE with static_asserts</li>
<li>libcamera: matrix: Make most functions constexpr</li>
<li>libcamera: matrix: Add a Span based constructor</li>
<li>libcamera: vector: Add a Span based constructor</li>
<li>libcamera: matrix: Add inverse() function</li>
<li>libcamera: matrix: Extend multiplication operator to heterogenous types</li>
<li>libcamera: vector: Extend matrix multiplication operator to heterogenous types</li>
<li>libcamera: controls: Fix <code>ControlInfoMap::count(unsigned int)</code></li>
<li>utils: codegen: Make users depend on <code>controls.py</code> in meson</li>
<li>libcamera: matrix: Fix compilation error in inverse() function</li>
<li>libcamera: sensor: Fix the gain delay for IMX283</li>
<li>treewide: Do not use <code>*NameValueMap</code> for known values</li>
<li>utils: codegen: ipc: Use <code>any()</code> instead of <code>len([]) > 0</code></li>
<li>utils: codegen: ipc: Remove <code>namespace</code> argument</li>
<li>utils: codegen: ipc: Add <code>deserializer()</code> function</li>
<li>utils: codegen: ipc: Log error code when remote call fails</li>
<li>utils: codegen: ipc: Simplify <code>return</code> statements</li>
<li>libcamera: ipa_data_serializer: Remove some vector <code>reserve()</code> calls</li>
<li>libcamera: mali-c55: Remove tpgCodes_</li>
<li>libcamera: mali-c55: Remove tpgSizes_ member from MaliC55CameraData</li>
<li>libcamera: process: Use _exit in child process</li>
<li>libcamera: process: Pass stderr and reserve stdin and stdout fds</li>
<li>guides: pipeline-handler: Update name of pipeline handler stop function</li>
<li>libcamera: mali-c55: Fix error paths in ::init()</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: software_isp: Add a clarification comment to AWB</li>
<li>libcamera: pipeline: uvcvideo: Expose <code>Gamma</code> control</li>
<li>libcamera: software_isp: Fix CCM multiplication</li>
<li>libcamera: pipeline: virtual: Fix typo in log message</li>
<li>libcamera: pipeline: imx8-isi: Remove unused variable</li>
<li>pipeline: rkisp1: Fix vblank delay</li>
<li>libcamera: pipeline: rkisp1: Convert to use MediaPipeline</li>
<li>libcamera: pipeline: uvcvideo: Report new AeEnable control as available</li>
<li>ipu3: cio2: Remove unused function definition</li>
<li>libcamera: software_isp: Add saturation control</li>
<li>Revert "libcamera: rkisp1: Eliminate hard-coded resizer limits"</li>
</ul>
<p>apps:</p>
<ul>
<li>apps: lc-compliance: Support multiple streams in helpers</li>
<li>apps: lc-compliance: Add multi-stream tests</li>
<li>apps: cam: capture_script: Simplify bool array parsing</li>
<li>gstreamer: Fixate colorimetry field during caps negotiation</li>
<li>apps: cam: Try raw role if default viewfinder role fails</li>
<li>apps: qcam: Push the viewfinder role to vector</li>
<li>py: Set <code>PYTHONPATH</code> in devenv</li>
<li>apps: cam: sdl_texture: Take list of buffers in span</li>
<li>apps: cam: sdl_texture: Drop <code>&rect_</code> from <code>SDL_Update{NV,}Texture()</code> call</li>
<li>apps: cam: sdl_texture: Add <code>SDLTexture1Plane</code></li>
<li>apps: cam: sdl_sink: Support more single-plane formats</li>
<li>gstreamer: Add GstVideoMeta support</li>
<li>apps: cam: capture_script: Disallow arrays of strings</li>
<li>apps: cam: Skip non-display GPUs</li>
</ul>
<p>ipa:</p>
<ul>
<li>utils: ipc: Do not duplicate signals in proxy object</li>
<li>utils: ipc: Do not define variables in signal handler up front</li>
<li>ipa: rpi: common: Avoid warnings when AeEnable control is used</li>
<li>ipa: rpi: awb: Remove "fast" parameter</li>
<li>ipa: Move IPA installations to a subdir</li>
<li>ipa: rkisp1: awb: Declare ControlInfo in AWB</li>
<li>ipa: rkisp1: awb: Ignore empty AWB statistics</li>
<li>ipa: rkisp1: Refactor automatic/manual structure in IPAActiveState</li>
<li>ipa: rkisp1: algorithms: awb: Fix wrong colour temperature reporting</li>
<li>ipa: rkisp1: ccm/lsc: Fix CCM/LSC based on manual color temperature</li>
<li>ipa: rkisp1: Implement manual ColourCorrectionMatrix control</li>
<li>libipa: awb: Make result of gainsFromColourTemp optional</li>
<li>ipa: rkisp1: Damp color temperature regulation</li>
<li>ipa: rkisp1: awb: Take the CCM into account for the AWB gains calculation</li>
<li>ipa: rkisp1: awb: Avoid division by zero</li>
<li>ipa: rpi: controller: rpi: Fix colour gain typo in AGC</li>
<li>ipa: rpi: Add tuning for IMX283</li>
<li>ipa: rpi: Prevent segfault if AGC algorithm is absent</li>
</ul>
<p>tuning:</p>
<ul>
<li>utils: raspberrypi: ctt: Fix NaNs in lens shading tables</li>
<li>utils: raspberrypi: ctt: Fix NaNs in chromatic aberration tables</li>
<li>utils: raspberrypi: ctt: Fix integer division error calculating LSC cell size</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: guides: pipeline-handler: Fix camera creation</li>
<li>Documentation: guides: pipeline-handler: Fix property list file name</li>
<li>Documentation: guides: pipeline-handler: Fix configuration creation</li>
<li>Documentation: guides: pipeline-handler: Fix <code>Camera::create()</code> link</li>
<li>Documentation: guides: pipeline-handler: Simplify format collection</li>
<li>Documentation: guides: pipeline-handler: Query pixel formats once</li>
<li>Documentation: guides: application-developer: Remove unnecessary argument</li>
<li>Documentation: Fix <code>INCLUDE_PATH</code> doxygen configuration option</li>
<li>doc: Mention right meson version</li>
<li>doc: document libtiff dependency for cam</li>
</ul>
<p>test:</p>
<ul>
<li>test: Add minimal test for Matrix</li>
<li>lc-compliance: Move camera setup to CameraHolder class</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.5.02025-04-03T13:38:41Zlibcamera v0.5.0<p>The abi-compliance-checker reports there are both ABI and API changes in this<br>
release:</p>
<p>Binary compatibility: 99%<br>
Source compatibility: 99.5%<br>
Total binary compatibility problems: 5, warnings: 1<br>
Total source compatibility problems: 6, warnings: 1</p>
<p>Substantially less than the previous release, and ultimately quite minor but<br>
unfortunately there nonetheless and so the SONAME is updated to 0.5<br>
accordingly. I do not anticipate anything there that cannot be solved for<br>
applications without just a recompile. I had hoped to get a longer run for 0.4<br>
series...</p>
<p>A full and detailed ABI report for those interested can always be generated<br>
between any two versions with the internal tooling:</p>
<p>"./utils/abi-compat.sh v0.4.0 v0.5.0"</p>
<p>Integration overview:</p>
<p>This release brings in 201 commits with a huge list of fixes and code clean up<br>
which I'm very happy to see, including interesting fixes to the AGC and AWB<br>
handling in libipa.</p>
<p>In regards to new features, libcamera-0.5 has aptly now got the core Raspberry<br>
Pi 5 support merged!. There are still patches that are currently maintained by<br>
Raspberry Pi for additional features, and while the transition to upstream<br>
API's continue, but I think we're all happy to see this support getting in<br>
directly, and Raspberry Pi continue to lead the way in upstream camera<br>
development. I look forward to the kernel API's for streams being fully<br>
utilised by the PiSP platform for upstream camera metadata handling. This<br>
upcoming work is also supported by the CameraSensor factory and CameraSensorRaw<br>
support that is now also merged in this release.</p>
<p>Further more in the platform support, the software_isp continues to be<br>
developed and is now able to measure colour temperature, which will bring in<br>
improvements for AWB, and a CCM can be applied while peforming debayering (at a<br>
CPU cost) which will allow us to finally apply color tuning for sensors on<br>
devices that need to fall back to the software ISP.</p>
<p>New sensor support seems fairly short in this release, with the IMX415 being<br>
the prominent addition.</p>
<p>In libipa, and algorithm developments, along with many fixes and improvements<br>
there is a substantial new feature that the Baysian AWB algorithm from<br>
Raspberry Pi can now also be used on all libipa supported IPA modules, and has<br>
shown good impovements for the RkISP1 supported devices.</p>
<p>There is minimal changes to the application support side, but it is notable<br>
that now the Y444 format has been mapped to be usable by the gstreamer src<br>
element. lc-compliance has seen some progress which I hope will bring this to<br>
being a more central part of the test infrastructure.</p>
<p>The following commits in this release relate to either a bug fix or an<br>
improvement to an existing commit.</p>
<ul>
<li>DmaBufAllocator: Make DmaSyncer non-copyable
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/39482d59fe7160740ea5dd61f3ed965a88d848ce/hovercard" href="https://github.com/libcamera-org/libcamera/commit/39482d59fe7160740ea5dd61f3ed965a88d848ce"><tt>39482d5</tt></a> ("DmaBufAllocator: Add Dma Buffer synchronization function & helper class")</li>
</ul>
</li>
<li>utils: codegen: controls.py: Fix missing direction error message
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/39fe4ad96803f4dd97f034c3e4c05c55757bce11/hovercard" href="https://github.com/libcamera-org/libcamera/commit/39fe4ad96803f4dd97f034c3e4c05c55757bce11"><tt>39fe4ad</tt></a> ("utils: codegen: controls.py: Parse direction information")</li>
</ul>
</li>
<li>Thread: Fix setThreadAffinity race condition in start
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/4d9db06d669044c0c461a2aed79c85c7fe32a502/hovercard" href="https://github.com/libcamera-org/libcamera/commit/4d9db06d669044c0c461a2aed79c85c7fe32a502"><tt>4d9db06</tt></a> ("libcamera: add method to set thread affinity")</li>
</ul>
</li>
<li>meson: Don't override pipeline list when <code>auto</code> is selected
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=247" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=247</a></li>
</ul>
</li>
<li>DmaBufAllocator: Avoid syncing with an invalid file descriptor
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/545046a41e1767fa601c4e82608053f1912146af/hovercard" href="https://github.com/libcamera-org/libcamera/commit/545046a41e1767fa601c4e82608053f1912146af"><tt>545046a</tt></a> ("DmaBufAllocator: Make DmaSyncer non-copyable")</li>
</ul>
</li>
<li>controls: Introduce AEGC-related controls
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=42" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=42</a></li>
</ul>
</li>
<li>Documentation: guides: application-developer: Fix variable shadowing
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=252" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=252</a></li>
</ul>
</li>
<li>libcamera: pipeline: virtual: Fill buffer's metadata
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=245" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=245</a></li>
</ul>
</li>
<li>ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ee918b370a08b362de75ee590cfc46fe8e38a0f0/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ee918b370a08b362de75ee590cfc46fe8e38a0f0"><tt>ee918b3</tt></a> ("ipa: rkisp1: agc: Initialize enum controls with a list of values")</li>
</ul>
</li>
<li>ipa: rpi: Apply default ControlInfo values for sensor controls
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=253" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=253</a></li>
</ul>
</li>
<li>ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/bea2db5e6190e008dec880f2cc02172115126007/hovercard" href="https://github.com/libcamera-org/libcamera/commit/bea2db5e6190e008dec880f2cc02172115126007"><tt>bea2db5</tt></a> ("ipa: rpi: Apply default ControlInfo values for sensor controls")</li>
</ul>
</li>
<li>ipa: rkisp1: algorithms: agc: Fix whitespace
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/0e0e32b1890c97343ade0f91cb643a1c4da9064f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/0e0e32b1890c97343ade0f91cb643a1c4da9064f"><tt>0e0e32b</tt></a> ("ipa: rkisp1: algorithms: agc: Check for correct stats type")</li>
</ul>
</li>
<li>libcamera: pipeline: Fix LIBCAMERA__TUNING_FILE handling
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/f5da05ed03eea8bf8911edb554c80f402a410c0f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/f5da05ed03eea8bf8911edb554c80f402a410c0f"><tt>f5da05e</tt></a> ("libcamera: pipeline: Move tuning file override handling to IPAProxy")</li>
</ul>
</li>
<li>ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/29892f1c56c6657a9d650aff203912212c295bd0/hovercard" href="https://github.com/libcamera-org/libcamera/commit/29892f1c56c6657a9d650aff203912212c295bd0"><tt>29892f1</tt></a> ("ipa: libipa: colour: Use the RGB class to model RGB values")</li>
</ul>
</li>
<li>libipa: awb: Fix non-virtual destructor warning in AwbStats
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/6f663990a0f73f6b1e058470bc3129a21b252f17/hovercard" href="https://github.com/libcamera-org/libcamera/commit/6f663990a0f73f6b1e058470bc3129a21b252f17"><tt>6f66399</tt></a> ("libipa: Add AWB algorithm base class")</li>
</ul>
</li>
<li>ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/f72c76eb6e06a41d2aaff8c8c4002dea21a7774d"><tt>f72c76e</tt></a> ("rkisp1: Honor the FrameDurationLimits control")</li>
</ul>
</li>
<li>ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/34c9ab62827b3efe90e5e565127e55a9f8acb3b3/hovercard" href="https://github.com/libcamera-org/libcamera/commit/34c9ab62827b3efe90e5e565127e55a9f8acb3b3"><tt>34c9ab6</tt></a> ("ipa: libipa: Add ExposureModeHelper")</li>
</ul>
</li>
<li>libcamera: software_isp: Emit ispStatsReady only if IPA is running
<ul>
<li>Reported-by: Stanislaw Gruszka <a href="mailto:stanislaw.gruszka@linux.intel.com">stanislaw.gruszka@linux.intel.com</a></li>
</ul>
</li>
<li>libcamera: base: log: Fix uninitialized variable warning
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/8fa119e0b50f2b3bf1ce142c5dc642242e56dcd5/hovercard" href="https://github.com/libcamera-org/libcamera/commit/8fa119e0b50f2b3bf1ce142c5dc642242e56dcd5"><tt>8fa119e</tt></a> ("libcamera: base: log: Use <code>std::from_chars()</code>")</li>
</ul>
</li>
<li>libcamera: media_object: Fix unnecessary copy
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/9490c664b57a6cf47fa6af2687f7180d78d24c6d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/9490c664b57a6cf47fa6af2687f7180d78d24c6d"><tt>9490c66</tt></a> ("libcamera: Add members to MediaEntity to support ancillary entities")</li>
</ul>
</li>
<li>ipa: rkisp1: agc: Fix metering modes
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/4c5152843a2af408b5048516c314d32ac4ff6654/hovercard" href="https://github.com/libcamera-org/libcamera/commit/4c5152843a2af408b5048516c314d32ac4ff6654"><tt>4c51528</tt></a> ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")</li>
</ul>
</li>
<li>libcamera: software_isp: Reset stored exposure in black level
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=259" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=259</a></li>
</ul>
</li>
<li>libcamera: pipeline: uvcvideo: Fix <code>ExposureTimeMode</code> control setup
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/bad8d591f8acfa50146a0801f92a7a3b99a5c8ca/hovercard" href="https://github.com/libcamera-org/libcamera/commit/bad8d591f8acfa50146a0801f92a7a3b99a5c8ca"><tt>bad8d59</tt></a> ("libcamera: uvcvideo: Register ExposureTimeMode control")</li>
</ul>
</li>
<li>libcamera: pipeline: uvcvideo: Fix <code>ExposureTimeMode</code> control setting
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/bad8d591f8acfa50146a0801f92a7a3b99a5c8ca/hovercard" href="https://github.com/libcamera-org/libcamera/commit/bad8d591f8acfa50146a0801f92a7a3b99a5c8ca"><tt>bad8d59</tt></a> ("libcamera: uvcvideo: Register ExposureTimeMode control")</li>
</ul>
</li>
<li>ipa: simple: Initialize ccmEnabled to false
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ac3068655643a8b2e9a5d002ad6fab104832e1c0/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ac3068655643a8b2e9a5d002ad6fab104832e1c0"><tt>ac30686</tt></a> ("libcamera: software_isp: Track whether CCM is enabled")</li>
</ul>
</li>
<li>gstreamer: Use <code>Control<></code> objects when setting controls
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=261" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=261</a></li>
</ul>
</li>
<li>gstreamer: Restore <code>AeEnable</code> control
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/187f2d537be5a4ad2c73649653cf925b74de61fe/hovercard" href="https://github.com/libcamera-org/libcamera/commit/187f2d537be5a4ad2c73649653cf925b74de61fe"><tt>187f2d5</tt></a> ("gstreamer: Generate the new AEGC controls")</li>
</ul>
</li>
<li>pipeline: rpi: Fix potential empty optional read
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/6c71ee1f15305120ea0f339eb2ff61a25a518411/hovercard" href="https://github.com/libcamera-org/libcamera/commit/6c71ee1f15305120ea0f339eb2ff61a25a518411"><tt>6c71ee1</tt></a> ("pipeline: raspberrypi: Introduce PipelineHandlerBase class")</li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by category:</p>
<p>core:</p>
<ul>
<li>libcamera: virtual: Avoid some copies</li>
<li>libcamera: virtual: Query number of planes correctly</li>
<li>libcamera: virtual: Speed up test pattern animation</li>
<li>libcamera: camera_sensor_properties: Add delays for imx415</li>
<li>include: linux: Update headers for line-based embedded data support</li>
<li>include: linux: videodev2: Add generic line based pixel formats</li>
<li>libcamera: v4l2_subdevice: Add new metadata formats</li>
<li>libcamera: v4l2_videodevice: Update to the new kernel metadata API</li>
<li>libcamera: Add CameraSensor implementation for raw V4L2 sensors</li>
<li>libcamera: camera_sensor: Add support for embedded data</li>
<li>libcamera: base: Remove custom __nodiscard attribute</li>
<li>libcamera: Add missing <stdint.h> include to dma_buf_allocator.h</li>
<li>libcamera: include: Include missing stdint.h header</li>
<li>utils: codegen: controls.py: Fix missing direction error message</li>
<li>meson: Convert <code>v4l2</code> into a feature option</li>
<li>meson: Don't override pipeline list when <code>auto</code> is selected</li>
<li>libcamera: pipeline_handler: Enable silent configuration file lookup</li>
<li>libcamera: virtual: Install configuration file</li>
<li>libcamera: v4l2_subdevice: Work around false positive warning</li>
<li>libcamera: uvcvideo: Register ExposureTimeMode control</li>
<li>libcamera: camera: Pre-process AeEnable control</li>
<li>libcamera: base: object,thread: Disable copy/move</li>
<li>libcamera: matrix: Add read-only accessor to internal data</li>
<li>libcamera: log: Match whole category in LIBCAMERA_LOG_LEVELS</li>
<li>libcamera: Copy Vector class files from libipa</li>
<li>libcamera: Adapt Vector class to new location</li>
<li>libcamera: request: addBuffer(): Do fence check earlier</li>
<li>libcamera: Drop spurious colon after doxygen \todo directive</li>
<li>meson: Enable the -Wnon-virtual-dtor compiler option</li>
<li>libcamera: formatting: Avoid spaces in for loops without expression</li>
<li>libcamera: base: log: Remove move constructor</li>
<li>libcamera: base: log: Use <code>std::from_chars()</code></li>
<li>libcamera: base: log: Remove <code>LogMessage::init()</code></li>
<li>libcamera: base: log: Make <code>LogCategory::severity_</code> atomic</li>
<li>libcamera: base: log: Use <code>std::string_view</code> to avoid some copies</li>
<li>libcamera: base: log: Pass dynamic prefix through</li>
<li>libcamera: base: log: Protect log categories with lock</li>
<li>libcamera: base: log: Avoid manual <code>LogCategory</code> deletion</li>
<li>libcamera: meson: Fix libyuv detection</li>
<li>libcamera: base: thread: Support dispatching for a specific receiver</li>
<li>libcamera: base: log: Fix uninitialized variable warning</li>
<li>libcamera: base: signal: Drop pre-C++17 support</li>
<li>meson: Add libpisp.wrap</li>
<li>libcamera: media_object: Fix unnecessary copy</li>
<li>libcamera: ipa_manager: Store <code>IPAModule</code>s in <code>std::unique_ptr</code></li>
<li>libcamera: base: mutex: Remove unnecessary constructors</li>
<li>libcamera: media_device: Ignore <code>lockf()</code> return value</li>
<li>libcamera: v4l2_videodevice: <code>lastUsedCounter_</code> need not be atomic</li>
<li>libcamera: camera: Ensure correct id maps are always set</li>
<li>libcamera: base: span: Explicitly default copy assignment</li>
<li>libcamera: controls: Check size of enum</li>
<li>libcamera: camera_manager: Do not emit signals while holding lock</li>
<li>libcamera: camera_manager: Simplify camera lookup</li>
<li>libcamera: camera_manager: Take camera id in <code>std::string_view</code></li>
<li>libcamera: base: object: Forward arguments when invoking</li>
<li>libcamera: base: bound_method: Simplify <code>invokePack()</code></li>
<li>libcamera: v4l2_device: add frame start event helpers</li>
<li>DmaBufAllocator: Make DmaSyncer non-copyable</li>
<li>Thread: Fix setThreadAffinity race condition in start</li>
<li>DmaBufAllocator: Avoid syncing with an invalid file descriptor</li>
<li>controls: Introduce AEGC-related controls</li>
<li>controls: Remove AeLocked</li>
<li>controls: Redefine AeEnable</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: rpi: Add cam_helper for imx415</li>
<li>ipa: rpi: Add vc4 tuning files for imx415</li>
<li>ipa: rpi: Use r-value references in the set()/setLocked() functions</li>
<li>ipa: rpi: Add erase()/eraseLocked() to RPiController::Metadata</li>
<li>ipa: rpi: Add a HW property to determine if the data buffer is strided</li>
<li>ipa: rpi: Provide the camera helper with the hardware configuration</li>
<li>ipa: raspberry: Port to the new AEGC controls</li>
<li>ipa: rkisp1: Port to the new AEGC controls</li>
<li>ipa: rkisp1: agc: Report new AeEnable control as available</li>
<li>ipa: raspberry: Report new AeEnable control as available</li>
<li>ipa: libipa: lux: Fix indentation</li>
<li>ipa: rkisp1: agc: Initialize enum controls with a list of values</li>
<li>ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)</li>
<li>ipa: rpi: Apply default ControlInfo values for sensor controls</li>
<li>ipa: Use Vector class from libcamera</li>
<li>libipa: Drop Vector class</li>
<li>ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo</li>
<li>ipa: rkisp1: algorithms: agc: Fix whitespace</li>
<li>libipa: interpolator: Add accessor to internal data</li>
<li>libipa: pwl: Add clear() function</li>
<li>libipa: Add AWB algorithm base class</li>
<li>libipa: awb: Add helper functions for AWB mode support</li>
<li>libipa: Add grey world AWB algorithm</li>
<li>ipa: rkisp1: Move calculation of RGB means into own function</li>
<li>ipa: rkisp1: Use grey world algorithm from libipa</li>
<li>libipa: Add bayesian AWB algorithm</li>
<li>ipa: rkisp1: Add support for bayes AWB algorithm from libipa</li>
<li>ipa: rkisp1: awb: Apply gains based on default colour temperature on start</li>
<li>libipa: lux: Normalize referenceY to 1</li>
<li>libipa: awb_bayes: Add logging of value limits</li>
<li>libipa: awb_bayes: Remove overly verbose log messages</li>
<li>libipa: awb_bayes: Change the probabilities from log space to linear space</li>
<li>libipa: awb: Sort class member documentation according to header order</li>
<li>libipa: awb: Capitalize AWB</li>
<li>libipa: awb: Follow function names with '()' in doxygen documentation</li>
<li>libipa: awb: Standardize spelling on 'grey' world</li>
<li>libipa: awb: Replace reference to pipeline handle with IPA module</li>
<li>libipa: awb: Pass lux value to calculateAwb() as unsigned int</li>
<li>ipa: rkisp1: awb: Fix wrong indentation in comment</li>
<li>libipa: awb: Rename AwbStats::getRGBMeans() to rgbMeans()</li>
<li>libipa: awb: Tidy up includes</li>
<li>libipa: awb_grey: Minor comment fixes</li>
<li>ipa: rkisp1: awb: Don't calculate RGB means if stats are missing</li>
<li>ipa: rkisp1: awb: Capitalize AWB</li>
<li>ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode</li>
<li>libipa: awb: Fix non-virtual destructor warning in AwbStats</li>
<li>ipa: rkisp1: Initialise AGC from FrameDurationLimits controls</li>
<li>ipa: rkisp1: Alias lineDuration</li>
<li>ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit</li>
<li>ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC</li>
<li>utils: ipc: Only dispatch messages for proxy when stopping thread</li>
<li>ipa: rpi: Add support for Raspberry Pi 5</li>
<li>ipa: simple: lut: Fix include path</li>
<li>ipa: rkisp1: agc: Fix metering modes</li>
<li>ipa: rkisp1: agc: Set measurement window to full frame</li>
<li>ipa: rkisp1: Add debug log for the sensor controls being set</li>
<li>ipa: libipa: agc_mean_luminance: Error out when effectiveExposureValue is zero</li>
<li>ipa: rksip1: Remove setControls(0) to reduce startup oscillations</li>
<li>ipa: simple: softisp: Extend to pass metadata</li>
<li>ipa: simple: Report the ColourGains in metadata</li>
<li>ipa: simple: Report black levels in metadata</li>
<li>ipa: simple: Report contrast in metadata</li>
<li>ipa: simple: Report exposure in metadata</li>
<li>ipa: simple: Initialize ccmEnabled to false</li>
<li>libipa: histogram: Fix quantile() calculation for fractional results</li>
<li>libipa: histogram: Fix interQuantileMean() for small ranges</li>
</ul>
<p>apps:</p>
<ul>
<li>gstreamer: allocator: gst_libcamera_allocator_new(): Recognize errors</li>
<li>gstreamer: allocator: gst_libcamera_allocator_new(): Fix memory leak</li>
<li>gstreamer: Generate the new AEGC controls</li>
<li>apps: ppm_writer: Add a missing include</li>
<li>apps: ppm_writer: Return EIO on I/O errors</li>
<li>gstreamer: Fix scaler-crop property get</li>
<li>apps: common: event_loop: Take callbacks by rvalue ref</li>
<li>apps: common: event_loop: Disable copy/move</li>
<li>apps: common: event_loop: Use <code>std::deque</code> instead of <code>std::list</code></li>
<li>apps: common: event_loop: Use single event source for deferred calls</li>
<li>apps: common: event_loop: Remove unused type alias</li>
<li>apps: lc-compliance: Initialize <code>CameraManager</code> pointer in <code>Environment</code></li>
<li>apps: lc-compliance: Put tests into anonymous namespace</li>
<li>apps: lc-compliance: Optimize <code>std::shared_ptr</code> usage</li>
<li>apps: lc-compliance: Remove redundant getter call</li>
<li>apps: lc-compliance: Don't allocate <code>FrameBufferAllocator</code> dynamically</li>
<li>apps: lc-compliance: Use <code>std::vector</code> for argument array</li>
<li>apps: lc-compliance: Use array instead of <code>std::vector</code></li>
<li>apps: lc-compliance: Add message to <code>GTEST_SKIP()</code></li>
<li>apps: lc-compliance: Merge <code>CaptureBalanced</code> and <code>CaptureUnbalanced</code></li>
<li>gstreamer: Add Y444 format support to the YUV list</li>
<li>apps: cam: Fix include order</li>
<li>apps: qcam: Simplify <code>PixelFormat</code> search</li>
<li>apps: cam: Highlight default enumerator</li>
<li>gstreamer: Use <code>Control<></code> objects when setting controls</li>
<li>gstreamer: Restore <code>AeEnable</code> control</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: pipeline: virtual: Demote config file error message to debug</li>
<li>libcamera: pipeline: Move tuning file override handling to IPAProxy</li>
<li>libcamera: software_isp: Move a non-loop condition out of the loop</li>
<li>libcamera: software_isp: Handle signals in the proper thread</li>
<li>libcamera: pipeline: virtual: Simplify error return</li>
<li>libcamera: pipeline: virtual: Fill buffer's metadata</li>
<li>libcamera: pipeline: virtual: Set <code>FrameError</code> on error</li>
<li>libcamera: pipeline: Fix LIBCAMERA__TUNING_FILE handling</li>
<li>rkisp1: Honor the FrameDurationLimits control</li>
<li>libcamera: software_isp: Emit ispStatsReady only if IPA is running</li>
<li>libcamera: software_isp: Handle queued output buffers on stop</li>
<li>libcamera: software_isp: Handle queued input buffers on stop</li>
<li>libcamera: software_isp: Dispatch messages on stop</li>
<li>pipeline: rpi: Add new stream flags for PiSP</li>
<li>pipeline: rpi: Add support for Raspberry Pi 5</li>
<li>libcamera: software_isp: Determine color temperature</li>
<li>libcamera: software_isp: Use RGB type to represent gains</li>
<li>libcamera: software_isp: Store color temperature to metadata</li>
<li>libcamera: software_isp: lut: Remove maybe_unused on a used argument</li>
<li>libcamera: software_isp: Use common code to store debayered pixels</li>
<li>libcamera: software_isp: Use a macro to assign debayering methods</li>
<li>libcamera: software_isp: Add CCM algorithm</li>
<li>libcamera: software_isp: Add an example CCM to uncalibrated.yaml</li>
<li>libcamera: software_isp: Track whether CCM is enabled</li>
<li>libcamera: software_isp: Apply CCM in debayering</li>
<li>pipeline: rpi: pisp: Fix uninitialized variable warning</li>
<li>libcamera: software_isp: Track frames and requests</li>
<li>libcamera: software_isp: Reset stored exposure in black level</li>
<li>libcamera: pipeline: uvcvideo: Fix <code>ExposureTimeMode</code> control setup</li>
<li>libcamera: pipeline: uvcvideo: Fix <code>ExposureTimeMode</code> control setting</li>
<li>pipeline: rpi: Fix potential empty optional read</li>
<li>pipeline: simple: Connect/disconnect frameStart signal at start/stop time</li>
<li>pipeline: simple: Enable frame start events</li>
<li>pipeline: simple: Create DelayedControls instance once only</li>
<li>pipeline: simple: Reset delayedCtrls at start</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: design: ae: Document the design for AE controls</li>
<li>Documentation: guides: application-developer: Fix variable shadowing</li>
<li>Revert "README.rst: Report py dependencies"</li>
</ul>
<p>test:</p>
<ul>
<li>test: ipa_data_serialization: Use DebugMetadataEnable</li>
<li>test: threads: Use <code>pthread_testcancel()</code></li>
<li>test: ipa: libipa: Add histogram tests</li>
<li>test: ipa: libipa: histogram: Add tests for quantile() returning a fraction</li>
<li>test: ipa: libipa: histogram: Add tests for small inter quantile mean ranges</li>
</ul>
<p>tuning:</p>
<ul>
<li>libtuning: module: awb: Add bayes AWB support</li>
<li>libtuning: Add module for lux calibration</li>
<li>utils: tuning: rkisp1: Add lux module</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.4.02024-12-23T20:19:03Zlibcamera v0.4.0<p>The abi-compliance-checker reports that there is both ABI and API breakage in<br>
this release.</p>
<p>Binary compatibility: 91.2%<br>
Source compatibility: 98.9%<br>
Total binary compatibility problems: 69, warnings: 0<br>
Total source compatibility problems: 9, warnings: 0</p>
<p>This is not too surprising as this was the reason for the extra delay holding<br>
up this release, and as such this release bumps the SONAME to 0.4 accordingly.</p>
<p>The majority of the ABI breakages are around the public API for Control<br>
handling and definitions, which have caused underlying identifiers to be<br>
changed, and the reuqired storage for controls has increased.</p>
<p>I hope that grouping the expected ABI and API breakages and delaying this<br>
release will allow a longer stability on the 0.4 series but as we are<br>
developing rapidly this can not be guaranteed, though we aim to minimise<br>
disruption to distributions and applications whereever possible.</p>
<p>This release brings in 253 commits, with substantial development on image<br>
control and tuning features for IPA and Pipeline handlers supporting libipa, as<br>
well as integrating libipa support for IPA handling on the ARM Mali-C55 ISP.</p>
<p>A new 'Virtual Pipeline Handler' has been introduced to support more testing in<br>
CI and virtual environments.</p>
<p>Gstreamer has had some interesting development to rework expressing the full<br>
control set from libcamera using auto generation from the full control<br>
descriptors.</p>
<p>A key and notable change in this release too is that the softISP is now moving<br>
towards utilising the libipa implementaitons which will enable future tuning<br>
and image control capabilities, and should also support future development on a<br>
GPU-ISP implementation for GPU-accelerated handling. I do believe this work may<br>
have introduced an oscillation regression in the AEGC which will need to be<br>
investigated and fixed in the near future, but I don't want to hold up<br>
progressing the ABI updates at this stage.</p>
<p>The i.MX8MP can now make full use of the DW100 Dewarp Engine for full rotation<br>
and digital zoom capabilities.</p>
<p>Raspberry Pi systems now have improved support for the OV7251, IMX462, and<br>
IMX327 Sensors, and libipa platforms can now make use of the GalaxyCore gc05a2<br>
and gc08a3 Image sensors.</p>
<p>The following commits in this release relate to either a bug fix or an<br>
improvement to an existing commit.</p>
<ul>
<li>ipa: rpi: Use std::abs()
<ul>
<li>Reported-by: Maarten Lankhorst <a href="mailto:dev@lankhorst.se">dev@lankhorst.se</a></li>
</ul>
</li>
<li>libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08/hovercard" href="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08"><tt>7615454</tt></a> ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")</li>
</ul>
</li>
<li>libcamera: rkisp1: Rectify SensorConfiguration check
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/047d647452c44b610c58dc4425b95d7933cabdc8/hovercard" href="https://github.com/libcamera-org/libcamera/commit/047d647452c44b610c58dc4425b95d7933cabdc8"><tt>047d647</tt></a> ("libcamera: rkisp1: Integrate SensorConfiguration support")</li>
</ul>
</li>
<li>libcamera: controls: Add missing size to control_type
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/200d535ca85f23e6c562335c5d9badb5be4db28f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/200d535ca85f23e6c562335c5d9badb5be4db28f"><tt>200d535</tt></a> ("libcamera: controls: Add ControlTypePoint")</li>
</ul>
</li>
<li>pycamera: Add missing code for ControlTypePoint
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/200d535ca85f23e6c562335c5d9badb5be4db28f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/200d535ca85f23e6c562335c5d9badb5be4db28f"><tt>200d535</tt></a> ("libcamera: controls: Add ControlTypePoint")</li>
</ul>
</li>
<li>libcamera: software_isp: Clear IPA context on configure and stop
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/04d171e6b2997ee2f10c13495cb82521f689d76b/hovercard" href="https://github.com/libcamera-org/libcamera/commit/04d171e6b2997ee2f10c13495cb82521f689d76b"><tt>04d171e</tt></a> ("libcamera: software_isp: Call Algorithm::queueRequest")</li>
</ul>
</li>
<li>utils: checkstyle.py: Centralize dependency handling for checkers
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/8ffaf376bb53f6c4433e1fda4078f66dc5e69af5/hovercard" href="https://github.com/libcamera-org/libcamera/commit/8ffaf376bb53f6c4433e1fda4078f66dc5e69af5"><tt>8ffaf37</tt></a> ("utils: checkstyle: Add a python formatter")</li>
</ul>
</li>
<li>test: py: Fix log level restore in SimpleTestMethods()
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/06cb7130c4fadac3bde6e695b0a6842656c9a5d4/hovercard" href="https://github.com/libcamera-org/libcamera/commit/06cb7130c4fadac3bde6e695b0a6842656c9a5d4"><tt>06cb713</tt></a> ("py: Add unittests.py")</li>
</ul>
</li>
<li>v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/5456e02d3f5bafca1ac76e75eb5a1b5c56c042b5/hovercard" href="https://github.com/libcamera-org/libcamera/commit/5456e02d3f5bafca1ac76e75eb5a1b5c56c042b5"><tt>5456e02</tt></a> ("v4l2: Support setting frame rate in the V4L2 Adaptation layer")</li>
</ul>
</li>
<li>gstreamer: Remove auto-focus-mode property from device provider
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/5a142438b025b448eedfa67678fe8e169c66f566/hovercard" href="https://github.com/libcamera-org/libcamera/commit/5a142438b025b448eedfa67678fe8e169c66f566"><tt>5a14243</tt></a> ("gstreamer: Add enable_auto_focus option to the GStreamer plugin")</li>
</ul>
</li>
<li>libcamera: software_isp: Clean up pending requests on stop
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=234" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=234</a></li>
</ul>
</li>
<li>ipa: rpi: awb: Disable CT search bias for Grey World AWB
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ea8fd63d936f19bfc773199b9fe81e8d5d1f709b/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ea8fd63d936f19bfc773199b9fe81e8d5d1f709b"><tt>ea8fd63</tt></a> ("ipa: rpi: awb: Add a bias to the AWB search")</li>
</ul>
</li>
<li>meson: Don't unnecessarily fallback to libyuv wrap
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/eeaa7de21b8c7a8c9b2b7bc6a178d12e9b87c336/hovercard" href="https://github.com/libcamera-org/libcamera/commit/eeaa7de21b8c7a8c9b2b7bc6a178d12e9b87c336"><tt>eeaa7de</tt></a> ("libcamera: pipeline: Add test pattern for VirtualPipelineHandler")</li>
</ul>
</li>
<li>libcamera: Don't copy <code>StreamConfiguration</code> when iterating
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/4217c9f1aa863cf629bb2420be352b0c39988a5b/hovercard" href="https://github.com/libcamera-org/libcamera/commit/4217c9f1aa863cf629bb2420be352b0c39988a5b"><tt>4217c9f</tt></a> ("libcamera: camera: Zero streams before validate()")</li>
</ul>
</li>
<li>libcamera: software_isp: Actually apply black level from tuning data
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/41e3d61c745153779ed5a38634d7266bffd60d61/hovercard" href="https://github.com/libcamera-org/libcamera/commit/41e3d61c745153779ed5a38634d7266bffd60d61"><tt>41e3d61</tt></a> ("libcamera: software_isp: Clear IPA context on configure and stop")</li>
</ul>
</li>
<li>gstreamer: keep same transfer with that in negotiated caps
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=150" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=150</a></li>
</ul>
</li>
<li>pipeline: rkisp1: Fix scope of dewarper stop() exit action
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/12b553d691d4b0e23838655663363136c82848f6/hovercard" href="https://github.com/libcamera-org/libcamera/commit/12b553d691d4b0e23838655663363136c82848f6"><tt>12b553d</tt></a> ("libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter")</li>
</ul>
</li>
<li>pipeline: rkisp1: Limit sensor size to max resolution
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08/hovercard" href="https://github.com/libcamera-org/libcamera/commit/761545407c7666063f4c98d92a17af2a2c790b08"><tt>7615454</tt></a> ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")</li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by category:</p>
<p>core:</p>
<ul>
<li>utils: abi-compat: Disable python build</li>
<li>utils: abi-compat: sort meson options</li>
<li>libcamera: controls: Add enum names and values map to ControlId</li>
<li>libcamera: controls: Add array information to ControlId</li>
<li>libcamera: v4l2_videodevice: Add getSelection() function</li>
<li>libcamera: controls: Handle enum values without a cast</li>
<li>libcamera: Replace usage of lroundf() with std::lround()</li>
<li>libcamera: Replace last users of math.h</li>
<li>libcamera: geometry: Clarify Rectangle's top-left corner</li>
<li>libcamera: geometry: Add two-point Rectangle constructor</li>
<li>libcamera: controls: Add ControlTypePoint</li>
<li>libcamera: control_ids_draft: Add face detection controls</li>
<li>libcamera: android: Add face detection control support</li>
<li>libcamera: yaml_parser: Take string keys in <code>std::string_view</code></li>
<li>libcamera: camera: Fix CameraConfiguration spelling error</li>
<li>libcamera: MappedFrameBuffer: Fix typo in comment formatting</li>
<li>libcamera: controls: Add missing size to control_type</li>
<li>libcamera: tracepoints: Fix copyright year for reproducible builds</li>
<li>libcamera: controls: Add vendor information to ControlId</li>
<li>libcamera: converter: Add interface for feature flags</li>
<li>libcamera: converter: Add interface to support cropping capability</li>
<li>libcamera: formats: Change bytesPerGroup of RGB565 and RGB565_BE from 3 to 2</li>
<li>utils: checkstyle.py: Factor out common code to new CheckerBase class</li>
<li>utils: checkstyle.py: Turn check() into a class method for all checkers</li>
<li>utils: checkstyle.py: Print issues using <strong>str</strong></li>
<li>utils: checkstyle.py: Centralize dependency handling for checkers</li>
<li>libcamera: camera_sensor: Introduce CameraSensorFactory</li>
<li>libcamera: camera_sensor: Create abstract base class</li>
<li>libcamera: camera_sensor: Sort factories by priority</li>
<li>libcamera: pipeline_handler: Provide cancelRequest</li>
<li>libcamera: simple: Track requests in conversionQueue_</li>
<li>libcamera: Rationalize IPA and handlers names</li>
<li>libcamera: Add debug control space</li>
<li>libcamera: Add a DebugMetadata helper</li>
<li>utils: Add script to generate control_ids_debug.yaml</li>
<li>libcamera: yaml_parser: Use std::from_chars()</li>
<li>libcamera: add DmaBufAllocator::exportBuffers()</li>
<li>libcamera: Remove PipelineHandler Fatal check of non-empty MediaDevices</li>
<li>libcamera: virtual: Add VirtualPipelineHandler</li>
<li>libcamera: virtual: Add ImageFrameGenerator</li>
<li>libcamera: virtual: Read config and register cameras based on the config</li>
<li>meson: Don't unnecessarily fallback to libyuv wrap</li>
<li>libcamera: Rename "shutter speed" to "exposure time"</li>
<li>libcamera: camera_sensor_properties: Add sensor control delays</li>
<li>libcamera: pipelines: Draw control delays from CameraSensor properties</li>
<li>libcamera: Don't copy <code>StreamConfiguration</code> when iterating</li>
<li>treewide: Avoid some copies in range-based for loops</li>
<li>libcamera: v4l2_videodevice: Clarify V4L2M2MDevice</li>
<li>libcamera: Extend u32 control type</li>
<li>libcamera: Extend u16 control type</li>
<li>libcamera: add method to set thread affinity</li>
<li>libcamera: Copy Matrix class from libipa to libcamera</li>
<li>libcamera: internal: Move Matrix class into libcamera namespace</li>
<li>libcamera: internal: matrix: Replace vector with array in constructor</li>
<li>libcamera: internal: Add Matrix class to build</li>
<li>libcamera: mali-c55: Limit max size to sensor resolution</li>
<li>libcamera: mali-c55: Limit ISP input size</li>
<li>libcamera: mali-c55: Init camera properties</li>
<li>libcamera: mali-c55: Simplify bufferReady()</li>
<li>libcamera: mali-c55: Remove MaliC55CameraData::mbusCodes()</li>
<li>libcamera: mali-c55: Add stride and size to rawConfig</li>
<li>libcamera: v4l2-subdevice: Add Mali C55 media bus formats</li>
<li>libcamera: bayer_format: Add 20-bit bayer formats</li>
<li>libcamera: mali-c55: Propagate CSI-2 format to ISP</li>
<li>libcamera: mali-c55: Correct input/output format representation</li>
<li>libcamera: mali-c55: Enable links between resizer and video node</li>
<li>libcamera: mali-c55: Enable usage of scaler</li>
<li>libcamera: mali-c55: implement support for ScalerCrop</li>
<li>libcamera: yaml_parser: Output more details when parsing fails</li>
<li>libcamera: yaml_parser: Include stdlib.h instead of cstdlib</li>
<li>libcamera: utils: StringSplitter: Inline some trivial methods</li>
<li>libcamera: utils: StringSplitter: Add <code>operator==</code></li>
<li>libcamera: stream: Add operator<<(StreamConfiguration)</li>
<li>libcamera: yaml_parser: Improve efficiency of string empty check</li>
<li>libcamera: geometry: Add Rectangle::transformedBetween()</li>
<li>libcamera: converter_v4l2_m2m: Add missing override specifier</li>
<li>libcamera: converter_v4l2_m2m: Refactor get crop bounds code</li>
<li>libcamera: converter: Add function to query crop bounds</li>
<li>libcamera: converter: Add function to check if a stream was configured</li>
<li>libcamera: converter: Add functions to adjust config</li>
<li>libcamera: camera: Add a const version of the pipe() function</li>
<li>libcamera: camera_sensor: Add parameter to limit returned sensor size</li>
<li>libcamera: camera_sensor_properties: Add ov7251 and ov9281</li>
<li>libcamera: rpi: Draw sensor delays from CameraSensorProperties</li>
<li>include: linux: Add mali-c55-config.h</li>
<li>include: linux: Add Mali-C55 Stats and Params V4L2 format</li>
<li>libcamera: mali-c55: Acquire and plumb in 3a params and stats</li>
<li>libcamera: controls: Populate direction field in control definitions</li>
<li>utils: codegen: controls.py: Parse direction information</li>
<li>libcamera: controls: Add support for querying direction information</li>
<li>libcamera: controls: Update the ColourTemperature control to be writable</li>
<li>utils: gen-debug-controls: Output direction flag</li>
<li>hooks: pre-push: Verify that co-authors have a SoB line</li>
<li>gitignore: Add venv directory to gitignore</li>
<li>CameraManager: Ensure we cleanup on failure</li>
<li>Add .editorconfig file</li>
<li>DmaBufAllocator: Add Dma Buffer synchronization function & helper class</li>
</ul>
<p>apps:</p>
<ul>
<li>apps: cam: Print control enum values more nicely</li>
<li>py: Add bindings for ControlId enum name</li>
<li>apps: cam: Print control array sizes</li>
<li>apps: Replace HAVE_DNG with HAVE_TIFF</li>
<li>apps: cam: Print an error when outputting DNG and DNG support is missing</li>
<li>pycamera: Add missing code for ControlTypePoint</li>
<li>apps: cam: Print control vendor information when listing controls</li>
<li>py: Add bindings for ControlId vendor information</li>
<li>qcam: Automatically select the camera if only one is available</li>
<li>gstreamer: Implement caps negotiation for video/x-bayer</li>
<li>v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support</li>
<li>gstreamer: Remove auto-focus-mode property from device provider</li>
<li>gstreamer: Remove auto-focus-mode property from libcamerasrc</li>
<li>gstreamer: Generate controls from control_ids_*.yaml files</li>
<li>py: Add bindings for ControlId array information</li>
<li>qcam: Use pointer when choosing camera</li>
<li>gstreamer: keep same transfer with that in negotiated caps</li>
<li>apps: cam: Print control direction information</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: software_isp: Remove superfluous includes</li>
<li>libcamera: software_isp: Move BlackLevel to libcamera::ipa::soft</li>
<li>libcamera: software_isp: Define skeletons for IPA refactoring</li>
<li>libcamera: software_isp: Let IPASoftSimple inherit Module</li>
<li>libcamera: software_isp: Make stats frame and buffer aware</li>
<li>libcamera: software_isp: Remove final dots in debayer.cpp docstrings</li>
<li>libcamera: software_isp: Track and pass frame ids</li>
<li>libcamera: software_isp: Create algorithms</li>
<li>libcamera: software_isp: Call Algorithm::configure</li>
<li>libcamera: software_isp: Call Algorithm::queueRequest</li>
<li>libcamera: software_isp: Call Algorithm::prepare</li>
<li>libcamera: software_isp: Call Algorithm::process</li>
<li>libcamera: software_isp: Move black level to an algorithm module</li>
<li>libcamera: software_isp: Move color handling to an algorithm module</li>
<li>libcamera: software_isp: Use floating point for color parameters</li>
<li>libcamera: software_isp: Use DelayedControls</li>
<li>libcamera: software_isp: Move exposure+gain to an algorithm module</li>
<li>libcamera: software_isp: Update black level only on exposure changes</li>
<li>pipeline: simple: Increase buffer count to four</li>
<li>libcamera: rkisp1: Eliminate hard-coded resizer limits</li>
<li>pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline</li>
<li>libcamera: software_isp: Improve wording in a comment</li>
<li>libcamera: rkisp1: Integrate SensorConfiguration support</li>
<li>libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path</li>
<li>libcamera: rkisp1: Use const reference for sensor configuration</li>
<li>libcamera: rkisp1: Rectify SensorConfiguration check</li>
<li>libcamera: rkisp1: Maintain alphabetical order of forward declarations</li>
<li>libcamera: software_isp: Clear IPA context on configure and stop</li>
<li>libcamera: software_isp: Get black level from the camera helper</li>
<li>libcamera: software_isp: Black level from tuning file</li>
<li>libcamera: pipeline: rkisp1: Fix typo in todo task</li>
<li>libcamera: rkisp1: Prepare for additional camera controls</li>
<li>libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter</li>
<li>pipeline: rpi: Remove CameraData::scalerCrop_</li>
<li>pipeline: rpi: Pass crop rectangle as a parameter to platformSetIspCrop()</li>
<li>pipeline: rpi: Introduce CameraData::CropParams</li>
<li>pipeline: rpi: Track which ISP output is configured for a stream</li>
<li>pipeline: rpi: Pass ISP output index into platformSetIspCrop()</li>
<li>pipeline: rpi: Handler controls::rpi::ScalerCrops</li>
<li>libcamera: rkisp1: Create main buffer pool out of if(!isRaw)</li>
<li>libcamera: software_isp: Clean up pending requests on stop</li>
<li>libcamera: pipeline: Add test pattern for VirtualPipelineHandler</li>
<li>libcamera: software_isp: Refactor SoftwareIsp to use DmaBufAllocator::exportBuffers</li>
<li>libcamera: software_isp: Initialize exposure+gain before agc calculations</li>
<li>libcamera: software_isp: Remove unused IPAActiveState fields</li>
<li>libcamera: software_isp: Actually apply black level from tuning data</li>
<li>rkisp1: Use Matrix class from libcamera</li>
<li>libcamera: software_isp: Add support for contrast control</li>
<li>libcamera: software_isp: Add contrast control</li>
<li>pipeline: rkisp1: Fix scope of dewarper stop() exit action</li>
<li>pipeline: rkisp1: Keep aspect ratio on imx8mp</li>
<li>pipeline: rkisp1: Split inputCrop and outputCrop</li>
<li>pipeline: rkisp1: Reorder sensorInfo collection code</li>
<li>pipeline: rkisp1: Query dewarper crop bounds if no stream configured</li>
<li>pipeline: rkisp1: Fix ScalerCrop to be in sensor coordinates</li>
<li>pipeline: rkisp1: Add ScalerMaximumCrop property</li>
<li>pipeline: rkisp1: Refactor path validation</li>
<li>pipeline: rkisp1: Enable the dewarper unconditionally</li>
<li>pipeline: rkisp1: make RkISP1CameraConfiguration a friend of the pipeline handler</li>
<li>pipeline: rkisp1: Fix config validation when dewarper is used</li>
<li>pipeline: rkisp1: Limit sensor size to max resolution</li>
<li>debayer_cpu: Replace syncing DMABUFs with DmaSyncer</li>
<li>include: media-bus-formats: Add Mali-C55 mbus codes</li>
<li>mali-c55: Plumb the IPA module in</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: rpi: Use std::abs()</li>
<li>ipa: rpi: Replace last users of math.h</li>
<li>ipa: rpi: awb: Add a const for the default colour temperature</li>
<li>ipa: rpi: awb: Add a bias to the AWB search</li>
<li>ipa: rkisp1: algorithms: agc: Check for correct stats type</li>
<li>ipa: rkisp1: algorithms: awb: Check for correct stats type</li>
<li>ipa: rpi: Add tuning files for OV7251</li>
<li>ipa: libipa: Fix ExposureModeHelper function name in documentation</li>
<li>ipa: rkisp1: Add constructor to the ipa context</li>
<li>ipa: rkisp1: Add debug metadata support to the rkisp1</li>
<li>ipa: libipa: Add data accessor to Histogram</li>
<li>ipa: libipa: Add colour helpers</li>
<li>ipa: ipu3: Use centralised libipa helpers</li>
<li>ipa: rkisp1: Use centralised libipa helpers</li>
<li>ipa: rpi: Use centralised libipa helpers</li>
<li>ipa: rpi: awb: Disable CT search bias for Grey World AWB</li>
<li>libipa: FCQueue: Make sure FrameContext#0 is initialized</li>
<li>libcamera: libipa: camera_sensor: Provide helper and properties for Sony IMX462</li>
<li>ipa: rpi: cam_helper: Add Sony IMX327</li>
<li>ipa: raspberrypi: Add tuning file for IMX462 sensor</li>
<li>ipa: raspberrypi: Add tuning file for IMX327 sensor</li>
<li>libcamera: libipa: camera_sensor_helper: add IMX290 black level</li>
<li>ipa: libipa: vector: Add mutable x(), y() and z() accessors</li>
<li>ipa: libipa: vector: Add r(), g() and b() accessors</li>
<li>ipa: libipa: vector: Add scalar constructor</li>
<li>ipa: libipa: vector: Rename the dot product operator*() to dot()</li>
<li>ipa: libipa: vector: Generalize arithmetic operators</li>
<li>ipa: libipa: vector: Add missing binary arithemtic operators</li>
<li>ipa: libipa: vector: Add compound assignment operators</li>
<li>ipa: libipa: vector: Add element-wise min() and max() functions</li>
<li>ipa: libipa: vector: Add sum() function</li>
<li>ipa: ipu3: awb: Replace Awb::RGB class with ipa::RGB</li>
<li>ipa: libipa: colour: Use the RGB class to model RGB values</li>
<li>ipa: libipa: colour: Use Vector and Matrix for linear algebra</li>
<li>ipa: rkisp1: awb: Use RGB class to store colour gains</li>
<li>ipa: rkisp1: awb: Use Vector and Matrix for linear algebra</li>
<li>ipa: rkisp1: awb: Expand comment</li>
<li>libcamera: libipa: camera_sensor: Add GalaxyCore gc05a2 sensor properties</li>
<li>libcamera: libipa: camera_sensor: Add GalaxyCore gc08a3 sensor properties</li>
<li>ipa: rpi: Rename Matrix to Matrix3x3</li>
<li>ipa: rpi: ccm: Replace local matrix implementation with the libcamera one</li>
<li>libipa: Use Matrix class from libcamera</li>
<li>libipa: Drop Matrix class</li>
<li>libipa: agc_mean_luminance: Rename yaml key from exposure-time to exposureTime</li>
<li>ipa: software_isp: Add constructor to the IPA context</li>
<li>ipa: ipu3: Add constructor to the IPA context</li>
<li>libcamera: libipa: camera_sensor_helper: Use <code>variant</code> instead of <code>union</code></li>
<li>ipa: rpi: Fix wrong frame integration difference value for OV9281</li>
<li>ipa: rpi: cam_helper: imx708: Correct the frame integration diff value</li>
<li>libipa: Centralise Fixed / Floating point convertors</li>
<li>ipa: mali-c55: Add Mali-C55 ISP IPA module</li>
<li>ipa: mali-c55: Add Agc algorithm</li>
<li>ipa: mali-c55: Add BLC Algorithm</li>
<li>ipa: mali-c55: Add AWB Algorithm</li>
<li>ipa: mali-c55: Add Lens Shading Correction algorithm</li>
<li>ipa: mali-c55: Add IMX415 tuning data file</li>
<li>ipa: rkisp1: awb: Load white balance gains from tuning file</li>
<li>ipa: rkisp1: awb: Implement ColourTemperature control</li>
<li>ipa: rpi: awb: Make it possible to set the colour temperature directly</li>
<li>ipa: libipa: Add Lux helper</li>
<li>ipa: rkisp1: Add Lux algorithm module</li>
<li>controls: rpi: Add a vendor rpi::ScalerCrops control</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: guides: Fix FileSink source link</li>
</ul>
<p>test:</p>
<ul>
<li>test: py: Fix log level restore in SimpleTestMethods()</li>
<li>test: py: Replace environment array with environment object</li>
<li>test: py: LD_PRELOAD the C++ standard library when using ASan</li>
<li>test: libipa: Add Vector class test</li>
<li>test: span: Use intended variable</li>
</ul>
<p>tuning:</p>
<ul>
<li>utils: tuning: libtuning: Fix tuning for non RGGB RAWs</li>
<li>libtuning: Use logging framework in ctt_awb.awb()</li>
<li>libtuning: Remove the Cam object from ctt_awb.awb()</li>
<li>libtuning: Fix access to color member in ctt_awb.awb()</li>
<li>libtuning: Add initial AWB module</li>
<li>utils: tuning: rkisp1: Replace static AWB with new AWB module</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.3.22024-09-24T13:31:12Zlibcamera v0.3.2<p>abi-compliance-checker reports 100% binary and source compatibility,<br>
so this release does not change the SONAME.</p>
<p>Binary compatibility: 100%<br>
Source compatibility: 100%<br>
Total binary compatibility problems: 0, warnings: 0<br>
Total source compatibility problems: 0, warnings: 0</p>
<p>bugs:</p>
<p>The following commits in this release relate to either a bug fix or<br>
improvement to existing commit.</p>
<ul>
<li>meson: Enable simple pipeline handler on all platforms by default
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/06e0d8508e5c155a04aa0a55b5f88296794bfd40/hovercard" href="https://github.com/libcamera-org/libcamera/commit/06e0d8508e5c155a04aa0a55b5f88296794bfd40"><tt>06e0d85</tt></a> ("libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP")</li>
</ul>
</li>
<li>libcamera: udev: Catch udev notification errors
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=230" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=230</a></li>
</ul>
</li>
<li>libcamera: Drop remaining file names from header comment blocks
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/829acb3ab0b178110f449bed238ef117fa96408d/hovercard" href="https://github.com/libcamera-org/libcamera/commit/829acb3ab0b178110f449bed238ef117fa96408d"><tt>829acb3</tt></a> ("libcamera: Drop file name from header comment blocks in templates")</li>
</ul>
</li>
<li>Documentation: Fix link to introduction on mainpage.dox
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/860a3e30319cbdb66700ceab1071dcec594b3313/hovercard" href="https://github.com/libcamera-org/libcamera/commit/860a3e30319cbdb66700ceab1071dcec594b3313"><tt>860a3e3</tt></a> ("Documentation: Rework docs.rst into introduction.rst")</li>
</ul>
</li>
<li>Documentation: Fix links from API references to guides
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/e9388617810675971f7283aeaa16587397856755/hovercard" href="https://github.com/libcamera-org/libcamera/commit/e9388617810675971f7283aeaa16587397856755"><tt>e938861</tt></a> ("Documentation: Improve doxygen main page")</li>
</ul>
</li>
<li>pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=168" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=168</a></li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by<br>
category:</p>
<p>core:</p>
<ul>
<li>libcamera: Avoid variable-length arrays</li>
<li>meson: Enable simple pipeline handler on all platforms by default</li>
<li>libcamera: base: Add MemFd helper class</li>
<li>libcamera: base: memfd: Handle uClibc compatibility with function wrapper</li>
<li>libcamera: shared_mem_object: Prevent memfd from shrinking or growing</li>
<li>libcamera: simple: Log a missing sensor in a better way</li>
<li>libcamera: ipa_proxy: Unify configurationFile argument name</li>
<li>libcamera: ipa_proxy: Report a missing configuration as a warning</li>
<li>libcamera: Remove spaces at end of lines</li>
<li>meson: Drop gcc 8 support</li>
<li>utils: checkstyle.py: Warn when no valid Signed-off-by line is found</li>
<li>libcamera: Drop path prefix from Doxygen file directive</li>
<li>libcamera: Make all internal headers visible to Doxygen</li>
<li>libcamera: Unify Doxygen file directive prefix for formats.h</li>
<li>libcamera: Mark internal parts of public classes with \internal</li>
<li>libcamera: Hide *::Private classes with <strong>DOXYGEN_PUBLIC</strong></li>
<li>libcamera: Split public and internal source arrays</li>
<li>libcamera: Add version.h to public headers</li>
<li>libcamera: Drop libcamera_generated_ipa_headers from sources</li>
<li>libcamera: Move IPA headers to the libcamera_private dependency</li>
<li>libcamera: Consolidate all IPA headers in libcamera_ipa_headers</li>
<li>libcamera: Add missing headers to libcamera_internal_headers</li>
<li>libcamera: Consolidate tracepoint header in libcamera_internal_headers</li>
<li>libcamera: Don't add libcamera_public_headers to libcamera_public_sources</li>
<li>utils: checkstyle.py: Add author property to Commit class</li>
<li>utils: checkstyle.py: Validate SoB trailer against author</li>
<li>utils: checkstyle.py: Fix trailer parsing for commits with changelogs</li>
<li>libcamera: ipa_manager: Remove singleton requirement</li>
<li>libcamera: udev: Catch udev notification errors</li>
<li>libcamera: Add missing <stdint.h> include to base/file.h</li>
<li>libcamera: Add missing <stdint.h> include to internal/yaml_parser.h</li>
<li>libcamera: Fix header grouping</li>
<li>libcamera: formats: Adding Support for Y12P</li>
<li>utils: checkstyle.py: Rework commit message parsing</li>
<li>utils: checkstyle.py: Skip title and trailers checkers for pre-commit</li>
<li>utils: checkstyle.py: Add <strong>repr</strong> method to Commit class</li>
<li>libcamera: simple: Fix a typo in a doc string</li>
<li>libcamera: camera: Hide Camera::create() from the public API</li>
<li>meson: Store controls and properties YAML files in variables</li>
<li>meson: Fix mismatch in controls and properties generated file names</li>
<li>libcamera: Drop remaining file names from header comment blocks</li>
<li>meson: Move all code generation scripts to utils/codegen/</li>
<li>meson: utils: Provide environment for Python scripts</li>
<li>utils: codegen: gen-header.sh: Generate libcamera.h based on meson.build</li>
<li>utils: codegen: gen-controls.py: Convert to jinja2 templates</li>
<li>utils: codegen: gen-controls.py: Move helper classes to separate file</li>
<li>libcamera: controls: Improve formatting of control descriptions in YAML</li>
<li>libcamera: pipeline_handler: Fix unlocking media devices too early</li>
<li>libcamera: pipeline_handler: Call releaseDevice() before unlocking media devices</li>
<li>libcamera: controls: Fix example for ExposureValue</li>
<li>utils: update-kernel-headers: Support relative path to kernel git tree</li>
<li>include: linux: Update headers for rkisp1 extensible parameters</li>
<li>libcamera: camera: Use invokeMethod() for pipe_->acquire() and pipe_->release()</li>
<li>libcamera: uvcvideo: Fix includes</li>
<li>libcamera: v4l2: Remove unused includes</li>
<li>libcamera: v4l2: Fix an include placement</li>
<li>libcamera: v4l2: Fix indirect include</li>
<li>libcamera: libcamera: Remove unused includes</li>
<li>libcamera: libcamera: Add missing includes</li>
<li>libcamera: libcamera: Formatting improvements</li>
<li>libcamera: includes: Add missing includes</li>
<li>libcamera: includes: Remove unused includes</li>
<li>libcamera: includes: Formatting improvements</li>
<li>utils: checkstyle: Add a python formatter</li>
<li>utils: checkstyle: Remove style checker for python pep8</li>
<li>libcamera: utils: Add ScopeExitActions class</li>
<li>libcamera: v4l2_videodevice: Improve readability</li>
<li>libcamera: media_object: Add MediaPad string representations</li>
<li>libcamera: media_object: Add MediaLink string representations</li>
<li>libcamera: media_device: Use MediaLink string helper</li>
<li>libcamera: yaml-parser: Add additional tests</li>
<li>libcamera: yaml-parser: Add failing test for unexpected behavior</li>
<li>libcamera: yaml-parser: Differentiate between empty and empty string</li>
<li>Document additional environmental variables</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: software_isp: Remove file seal TODO item</li>
<li>libcamera: software_isp: Replace malloc() with std::vector<></li>
<li>pipeline: rkisp1: Use the extensible parameters format</li>
<li>pipeline_handler: Add acquireDevice() function to mirror releaseDevice()</li>
<li>pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()</li>
<li>libcamera: ipu3: Remove unused includes</li>
<li>libcamera: ipu3: Replace wrong include</li>
<li>libcamera: ipu3: Formatting improvements</li>
<li>libcamera: rkisp1: Remove unused includes</li>
<li>libcamera: rkisp1: Formatting improvements</li>
<li>pipeline: rkisp1: Use ScopeExitActions to simplify error handling in start</li>
<li>libcamera: pipeline: simple: Fix typos in match routing comment</li>
<li>pipeline: simple: Remove media member variable</li>
<li>libcamera: pipeline: simple: Use MediaLink string helper</li>
<li>libcamera: debayer_cpu: Sync DMABUFs</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: libipa: camera_sensor_helper: Reference blackLevel() in documentation</li>
<li>ipa: libipa: Add missing CameraSensorHelper fn label in docs</li>
<li>ipa: rkisp1: Pass parameters buffer format to IPA module</li>
<li>ipa: rkisp1: Pass parameters buffer size to pipeline handler</li>
<li>ipa: rkisp1: Add ISP parameters abstraction class</li>
<li>ipa: rkisp1: Use the new ISP parameters abstraction</li>
<li>ipa: rkisp1: params: Add companding blocks</li>
<li>ipa: rkisp1: Add compand feature flag to ipa context</li>
<li>ipa: rkisp1: blc: Add support for BLS in compand</li>
<li>libcamera: libipa: Remove unused includes</li>
<li>libcamera: ipa: Remove unused includes</li>
<li>utils: ipc: Include in generated headers where needed</li>
<li>libcamera: ipa: Drop unneded includes from ipa_interface.h</li>
<li>ipa: rpi: agc: Ignore stable region when exposure/gain set manually</li>
<li>ipa: rpi: Adding IMX283 support</li>
<li>libcamera: libipa: camera_sensor: Add IMX283 black level</li>
<li>ipa: libipa: Add generic Interpolator class</li>
<li>ipa: rkisp1: Use generic Interpolator class</li>
<li>ipa: rkisp1: Remove MatrixInterpolator</li>
<li>ipa: rkisp1: Use interpolator in lsc</li>
<li>ipa: rkisp1: Move loader functions into helper class</li>
<li>ipa: libipa: Add lsc polynomial class</li>
<li>ipa: rkisp1: Add sensor info to context</li>
<li>ipa: rkisp1: Add polynomial LSC loader</li>
<li>libcamera: libipa: camera_sensor: Add Sony IMX214 sensor properties</li>
</ul>
<p>apps:</p>
<ul>
<li>gstreamer: Fix width and height range handling</li>
<li>apps: qcam: Disable -Wextra-semi</li>
<li>gstreamer: Fix missing "greater than" symbol in author string</li>
<li>py: cam: Convert to PyQt6</li>
<li>py: gen-py-controls: Use Control class</li>
<li>py: gen-py-controls: Convert to jinja2 templates</li>
<li>v4l2: Support setting frame rate in the V4L2 Adaptation layer</li>
<li>qcam: Decrease minimum width of selector dialog</li>
<li>qcam: Drop Qt version checks</li>
<li>qcam: viewfinder_qt: Draw the letterbox background black</li>
<li>qcam: viewfinder_gl: Fix binding of vertex buffer and shader program</li>
<li>qcam: viewfinder_gl: Drop duplicate glClearColor()</li>
<li>qcam: viewfinder_gl: Render image centered in letterbox</li>
</ul>
<p>documentation:</p>
<ul>
<li>Documentation: Add Thread safety page</li>
<li>Documentation: Split doxygen_input in public and internal inputs</li>
<li>Documentation: Split public/private documentation</li>
<li>Documentation: Improve doxygen main page</li>
<li>Documentation: Add documentation-contents.rst</li>
<li>Documentation: Alphabetise the Documentation toctree</li>
<li>Documentation: Synchronise camera stack details</li>
<li>Documentation: Breakout docs.rst</li>
<li>Documentation: Remove libcamera architecture from introduction.rst</li>
<li>Documentation: Rework docs.rst into introduction.rst</li>
<li>Documentation: Rework index.rst</li>
<li>Documentation: Add internal-api-html placeholder</li>
<li>Documentation: Reformat documentation_contents.rst</li>
<li>Documentation: Rename "API" section to "API Reference"</li>
<li>Documentation: Drop local table of contents from introduction</li>
<li>Documentation: Rename "Documentation" section to "Introduction"</li>
<li>Documentation: Fix link to introduction on mainpage.dox</li>
<li>Documentation: Fix links from API references to guides</li>
</ul>
<p>tuning:</p>
<ul>
<li>utils: tuning: rkisp1: Clean up tuner construction</li>
<li>utils: tuning: Change Tuner.add() to accept a list of modules</li>
</ul>
<p>test:</p>
<ul>
<li>tests: Add a missing iostream include</li>
<li>test: ipa: libipa: Add tets for Interpolator</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.3.12024-07-25T13:24:10Zlibcamera v0.3.1<p>The abi-compliance checker reports 100% binary and source compatibility,<br>
so this release does not change the SONAME.</p>
<p>Binary compatibility: 100%<br>
Source compatibility: 100%<br>
Total binary compatibility problems: 0, warnings: 0<br>
Total source compatibility problems: 0, warnings: 0</p>
<p>The following commits in this release relate to either a bug fix or<br>
improvement to existing commit.</p>
<ul>
<li>ipa: rpi: Make monoSensor() accessor const
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/2031e2f2901403242329d7b59d97fa7c98758206/hovercard" href="https://github.com/libcamera-org/libcamera/commit/2031e2f2901403242329d7b59d97fa7c98758206"><tt>2031e2f</tt></a> ("ipa: rpi: Add accessor function for monoSensor_")</li>
</ul>
</li>
<li>libcamera: dma_buf_allocator: Create memfd with CLOEXEC
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952"><tt>ea4baaa</tt></a> ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")</li>
</ul>
</li>
<li>libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952"><tt>ea4baaa</tt></a> ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")</li>
</ul>
</li>
<li>libcamera: dma_buf_allocator: Work around lack of file seals in uClibc
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ea4baaacc3250eadb929fcef59bb9ddefb012952"><tt>ea4baaa</tt></a> ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")</li>
</ul>
</li>
<li>test: ipa: rkisp1: utils: Fix floating and fixed point conversion test
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/9d152e9c66c1094a482e704d95965078a0fe2cf3/hovercard" href="https://github.com/libcamera-org/libcamera/commit/9d152e9c66c1094a482e704d95965078a0fe2cf3"><tt>9d152e9</tt></a> ("ipa: rkisp1: Add a helper to convert floating-point to fixed-point")</li>
</ul>
</li>
<li>ipa: rkisp1: Fix algorithm controls vanish after configure
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/4c5152843a2af408b5048516c314d32ac4ff6654/hovercard" href="https://github.com/libcamera-org/libcamera/commit/4c5152843a2af408b5048516c314d32ac4ff6654"><tt>4c51528</tt></a> ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")</li>
</ul>
</li>
<li>pipeline: rpi: Don't validate configuration in generateConfiguration()
<ul>
<li>Bug: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2329773939" data-permission-text="Title is private" data-url="https://github.com/raspberrypi/libcamera/issues/138" data-hovercard-type="issue" data-hovercard-url="/raspberrypi/libcamera/issues/138/hovercard" href="https://github.com/raspberrypi/libcamera/issues/138">raspberrypi/libcamera#138</a></li>
</ul>
</li>
<li>ipa: rkisp1: agc: Fix initialization without metering modes
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/35233938ee5d7a560dd4a93c0a1b08eae4935ae4/hovercard" href="https://github.com/libcamera-org/libcamera/commit/35233938ee5d7a560dd4a93c0a1b08eae4935ae4"><tt>3523393</tt></a> ("ipa: rkisp1: agc: Read histogram weights from tuning file")</li>
</ul>
</li>
<li>v4l2: v4l2_compat: Fix redirect from <code>__open(at)64_2()</code>
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/1023107b6405266d480ce9c08cd82a30449a505b/hovercard" href="https://github.com/libcamera-org/libcamera/commit/1023107b6405266d480ce9c08cd82a30449a505b"><tt>1023107</tt></a> ("v4l2: v4l2_compat: Intercept open64, openat64, and mmap64")</li>
</ul>
</li>
<li>ipa: rkisp1: blc: Drop [[maybe_unused]] attribute
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/50c28e1351000b879ff38eca8b36751b4ac7c0c9/hovercard" href="https://github.com/libcamera-org/libcamera/commit/50c28e1351000b879ff38eca8b36751b4ac7c0c9"><tt>50c28e1</tt></a> ("ipa: rkisp1: blc: Query black levels from camera sensor helper")</li>
</ul>
</li>
<li>ipa: rkisp1: ccm: Fix ccm metadata output
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/cbfdfa42cacc0c9b83abb604e19febaf505cf24f/hovercard" href="https://github.com/libcamera-org/libcamera/commit/cbfdfa42cacc0c9b83abb604e19febaf505cf24f"><tt>cbfdfa4</tt></a> ("ipa: rkisp1: algorithms: Add crosstalk algorithm")</li>
</ul>
</li>
<li>gstreamer: pool: Replace GstAtomicQueue with deque and mutex
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=201" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=201</a></li>
</ul>
</li>
<li>gstreamer: allocator: Ensure camera manager stay alive
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=211" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=211</a></li>
</ul>
</li>
</ul>
<p>And the following updates have been made in this release, grouped by<br>
category:</p>
<p>core:</p>
<ul>
<li>treewide: Query list of cameras just once</li>
<li>libcamera: yaml_parser: Avoid double lookup in <code>operator[]</code></li>
<li>utils: checkstyle.py: Refactor IncludeChecker</li>
<li>utils: checkstyle.py: Extend IncludeChecker to cover math.h</li>
<li>utils: checkstyle.py: Add a check for hex values</li>
<li>utils: checkstyle.py: Show location of coding style issue within line</li>
<li>update-kernel-headers: Add linux/udmabuf.h to headers to sync</li>
<li>include: linux: Update kernel headers to version v6.10-rc1</li>
<li>libcamera: v4l2_subdevice: Update to the new kernel routing API</li>
<li>libcamera: Rename DmaHeap class to DmaBufAllocator</li>
<li>libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf</li>
<li>libcamera: dma_buf_allocator: Create memfd with CLOEXEC</li>
<li>libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc</li>
<li>libcamera: dma_buf_allocator: Work around lack of file seals in uClibc</li>
<li>libcamera: Add gamma control id</li>
<li>clang-format: Make Qt includes matching case sensitive</li>
<li>meson: Group libipa and libipa_includes in a dependency object</li>
<li>libcamera: controls: Add missing period at end of Gamma description</li>
<li>libcamera: yaml_parser: Make default value templated in <code>get()</code></li>
<li>libcamera: yaml_parser: Drop std::enable_if_t guards for get() function</li>
<li>libcamera: yaml_parser: Delegate YamlObject::get() to helper structure</li>
<li>libcamera: yaml_parser: Add support for float types</li>
<li>libcamera: base: log: Declare log categories when defining them</li>
<li>meson: Enable warnings to flag missing declarations</li>
<li>libcamera: Fix maybe-uninitialized error</li>
<li>converter: converter_v4l2_m2m: Rectify streams sanity check</li>
<li>converter: converter_v4l2_m2m: Rename private Stream class</li>
<li>libcamera: converter: Replace usage of stream index by Stream pointer</li>
<li>libcamera: base: utils: Implement hex() for 8-bit and 16-bit values</li>
<li>libcamera: v4l2_videodevice: Use bufferType_ in [get|try|set]Format()</li>
<li>utils: gen-version: Use posix compliant date</li>
</ul>
<hr>
<p>ipa:</p>
<ul>
<li>ipa: rpi: Make monoSensor() accessor const</li>
<li>ipa: rkisp1: Add a helper to convert floating-point to fixed-point</li>
<li>ipa: rpi: Disable StatsOutputEnable control by default</li>
<li>ipa: rkisp1: Fix algorithm controls vanish after configure</li>
<li>ipa: rkisp1: Add GammaOutCorrection algorithm</li>
<li>ipa: libipa: Add Vector class</li>
<li>ipa: libipa: Copy pwl from rpi, and clean it up to match libcamera</li>
<li>ipa: rpi: controller: Use libipa's Pwl class</li>
<li>ipa: rkisp1: goc: Fix typographical issues in documentation.</li>
<li>ipa: rkisp1: goc: Drop incorrect [[maybe_unused]]</li>
<li>ipa: rkisp1: goc: Use copydoc</li>
<li>ipa: rkisp1: goc: Mark default gamma table as static constexpr</li>
<li>ipa: rkisp1: goc: Avoid use of auto for short type</li>
<li>libcamera: libipa: camera_sensor: Define AR0521 helper functions inline</li>
<li>ipa: rkisp1: cproc: Use anonymous namespace to limit symbol visibility</li>
<li>ipa: rkisp1: cproc: Merge identical functions</li>
<li>ipa: rkisp1: cproc: Drop incorrect [[maybe_unused]]</li>
<li>ipa: rkisp1: agc: Read histogram weights from tuning file</li>
<li>ipa: rkisp1: agc: Plumb mode-selection and frame duration controls</li>
<li>ipa: libipa: vector: Specialize YamlObject getter</li>
<li>ipa: libipa: vector: Drop readYaml() function</li>
<li>ipa: libipa: pwl: Suffix \param with direction</li>
<li>ipa: libipa: pwl: Make the empty() function inline</li>
<li>ipa: libipa: pwl: Add a size() function</li>
<li>ipa: libipa: pwl: Add a constructor that moves a Point vector</li>
<li>ipa: libipa: pwl: Specialize YamlObject getter</li>
<li>ipa: libipa: Add Matrix class</li>
<li>ipa: libipa: Add MatrixInterpolator class</li>
<li>ipa: rkisp1: algorithms: Add crosstalk algorithm</li>
<li>ipa: libipa: vector: Add matrix-vector multiplication</li>
<li>ipa: rkisp1: agc: Fix initialization without metering modes</li>
<li>ipa: libipa: agc_mean_luminance: Fix enumerator names</li>
<li>ipa: libipa: agc_mean_luminance: Include missing header</li>
<li>ipa: rkisp1: Document all AGC parameters in IPAActiveState</li>
<li>ipa: rkisp1: Document all AGC parameters in IPAFrameContext</li>
<li>ipa: rkisp1: agc: Make size argument to computeHistogramPredivider const</li>
<li>ipa: rkisp1: agc: Don't update histogram parameters unnecessarily</li>
<li>ipa: rkisp1: agc: Simplify predivider calculation</li>
<li>ipa: rkisp1: agc: Use mode from frame context to calculate new EV</li>
<li>ipa: rkisp1: agc: Rename maxShutterSpeed to maxFrameDuration</li>
<li>ipa: rkisp1: agc: Correctly clamp maximum shutter speed</li>
<li>ipa: rkisp1: agc: Move AeEnable control to the AGC algorithm</li>
<li>ipa: rpi: controller: Replace Pwl::readYaml() with YamlObject::get()</li>
<li>ipa: libipa: pwl: Drop readYaml() function</li>
<li>ipa: rkisp1: agc: Rename frame context update variable to updateMetering</li>
<li>ipa: libipa: matrix: Fix incorrect symbol namespace</li>
<li>ipa: ipa_interface: Declare ipaCreate() in libcamera namespace</li>
<li>ipa: rpi: Define local functions in anonymous namespace</li>
<li>ipa: libipa: Add black levels to camera sensor helper</li>
<li>ipa: rkisp1: Move camHelper into IPAContext</li>
<li>ipa: rkisp1: blc: Query black levels from camera sensor helper</li>
<li>ipa: rkisp1: blc: Report sensor black levels in metadata</li>
<li>ipa: rkisp1: data: Update tuning files for imx219 and imx258</li>
<li>ipa: rkisp1: Move ov4689 and ov5640 black levels into sensor helpers</li>
<li>ipa: rkisp1: blc: Drop [[maybe_unused]] attribute</li>
<li>ipa: rkisp1: Install all tuning files</li>
<li>libipa: camera_sensor_helper: Add OV5675 black level</li>
<li>ipa: rkisp1: awb: Clamp gains to machine limits</li>
<li>ipa: rkisp1: awb: Unconditionally fill metadata</li>
<li>ipa: rkisp1: ccm: Fix ccm metadata output</li>
<li>ipa: rkisp1: ccm: Ensure metadata contains valid ccm</li>
<li>libcamera: libipa: camera_sensor: Add onsemi AR0144 sensor properties</li>
<li>ipa rkisp1: Remove temperatureK from FrameContext</li>
</ul>
<hr>
<p>apps:</p>
<ul>
<li>android: camera_capabilities: Fix GCC 14 warning</li>
<li>v4l2: v4l2_compat: Fix redirect from <code>__open(at)64_2()</code></li>
<li>v4l2: v4l2_compat: Move <code>open*()</code> flag check into function</li>
<li>py: libcamera: Move function declarations to common header</li>
<li>v4l2: v4l2_compat: Include missing headers</li>
<li>v4l2: v4l2_compat: Selectively disable -Wmissing-declarations</li>
<li>apps: Define local functions in anonymous namespace</li>
<li>apps: common: dng_writer: Workaround for "Unknown tag 33421" error</li>
<li>apps: common: dng_writer: Support RAW16 formats</li>
<li>apps: common: dng_writer: Rename packing functions</li>
<li>apps: common: dng_writer: Add thumbnail scanline function for Raw</li>
<li>apps: common: dng_writer: Support RAW10 and RAW12 format</li>
<li>apps: common: dng_writer: Fix thumbnail generation on BE machines</li>
<li>apps: common: dng_writer: Fix RAW10 and RAW12 packing on BE machines</li>
<li>qcam: viewfinder_qt: Maintain aspect ratio</li>
<li>apps: qcam: Port to Qt 6</li>
<li>gstreamer: pool: Replace GstAtomicQueue with deque and mutex</li>
<li>gstreamer: allocator: Ensure camera manager stay alive</li>
<li>v4l2: v4l2_compat: Fix ioctl() prototype with musl C library</li>
<li>gst: Add child proxy support to libcamerasrc</li>
<li>gst: Document libcamerasrc multi stream usage</li>
</ul>
<hr>
<p>test:</p>
<ul>
<li>test: ipa: rkisp1-utils: Fix capitalization of hex numbers</li>
<li>test: camera: Increase timeout for vimc capture tests</li>
<li>test: fence: Turn class member variable into local variable</li>
<li>test: fence: Fix race condition</li>
<li>test: fence: Increase timeout for fence test</li>
<li>test: v4l2_videodevice: Increase timeout for vimc capture tests</li>
<li>test: ipa: rkisp1-utils: Fix coding style for template arguments</li>
<li>test: ipa: rkisp1: utils: Fix floating and fixed point conversion test</li>
<li>test: ipc: unixsocket: Define local function in anonymous namespace</li>
<li>test: gstreamer: Include missing sanitizer/asan_interface.h header</li>
<li>test: utils: Extend utils::hex() test to 8-bit and 16-bit values</li>
<li>test: gstreamer: Test memory lifetime</li>
</ul>
<hr>
<p>pipeline:</p>
<ul>
<li>libcamera: software_isp: Use a specific integer type for black level</li>
<li>libcamera: software_isp: Honor black level in AWB</li>
<li>libcamera: software_isp: Move color mappings out of debayering</li>
<li>libcamera: software_isp: Remove DebayerParams::kGain10</li>
<li>libcamera: software_isp: Remove TODO about internal representation</li>
<li>pipeline: vimc: Don't hardcode scaling factor with recent kernels</li>
<li>libcamera: software_isp: Allow using dma-buffers from /dev/udmabuf</li>
<li>libcamera: software_isp: Fix includes ordering in simple.cpp</li>
<li>pipeline: rkisp1: cproc: Fix default value handling</li>
<li>pipeline: rpi: Don't validate configuration in generateConfiguration()</li>
<li>libcamera: debayer_cpu: Add 32bits/aligned output formats</li>
<li>libcamera: software_isp: Drop unnecessary sanity check</li>
<li>libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP</li>
<li>libcamera: pipeline: simple: Enable Soft ISP for TI CSI-RX</li>
</ul>
<hr>
<p>tuning:</p>
<ul>
<li>utils: raspberrypi: ctt: Adapt tuning tool for both VC4 and PiSP</li>
<li>utils: raspberrypi: ctt: Added CAC support to the CTT</li>
<li>utils: raspberrypi: ctt: Changed CTT handling of VC4 and PiSP</li>
<li>utils: raspberrypi: ctt: Update tuning tool for HDR</li>
<li>utils: raspberrypi: ctt: Add option to convert between vc4/pisp targets</li>
<li>utils: raspberrypi: ctt: Add a maximum gain parameter for LSC</li>
<li>utils: libtuning: modules: Add skeletal AGC module</li>
<li>utils: tuning: rkisp1: Add skeletal AGC to the rkisp1 tuning script</li>
<li>utils: libtuning: Correct GBRG Image parsing</li>
<li>libtuning: Backport improvements in MacBeth search reliability</li>
<li>libtuning: Fix reference image</li>
<li>libtuning: Copy files from raspberrypi</li>
<li>libtuning: Copy visualize_macbeth_chart from raspberry pi</li>
<li>utils: tuning: Add requirements file and update readme</li>
<li>libtuning: Fix imports</li>
<li>libtuning: Migrate prints to python logging framework</li>
<li>libtuning: Fix visualize_macbeth_chart()</li>
<li>libtuning: Improve filename parsing</li>
<li>libtuning: Implement a minimal yaml parser</li>
<li>libtuning: Reactivate macbeth locator</li>
<li>libtuning: Be a bit more verbose</li>
<li>libtuning: lsc: rkisp1: Clip lsc values to valid range</li>
<li>libtuning: Use the color member of the Image class</li>
<li>libtuning: Remove need for Cam object from ccm</li>
<li>libtuning: modules: Add initial CCM module</li>
<li>libtuning: Handle cases, where no lsc tuning images are present</li>
<li>libtuning: Only warn if processing returns None</li>
<li>libtuning: Add static module</li>
<li>tuning: rkisp1: Add some static modules</li>
<li>libtuning: lsc: rkisp1: Do not calculate ratios to green</li>
<li>libtuning: lsc: Prevent negative values</li>
<li>libtuning: agc: rkisp1: Increase y-target</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.3.02024-05-19T15:54:34Zlibcamera v0.3.0<p>abi-compliance checker reports 99.7% binary compatibility and 99.9% source<br>
compatibility between v0.2.0 and v0.3.0. The SONAME has been updated<br>
accordingly and applications must be relinked against this version of<br>
libcamera.</p>
<p>Total binary compatibility problems: 2, warnings: 0<br>
Total source compatibility problems: 2, warnings: 0</p>
<p>Specifically, the symbol</p>
<ul>
<li>ControlList::merge(struct ControlList const& source )<br>
has been replaced with the new symbol:</li>
<li>ControlList::merge ( struct ControlList const& source, enum ControlList::MergePolicy policy )</li>
</ul>
<p>The following commits in this release relate to either a bug fix or improvement<br>
to existing commit.</p>
<ul>
<li>utils: ipc: extract-docs: Fix escape characters in regex
<ul>
<li>Reported-by: Nicolas Dufresne <a href="mailto:nicolas@ndufresne.ca">nicolas@ndufresne.ca</a></li>
</ul>
</li>
<li>libcamera: Remove empty formats.c
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/e0a51061bc69568f6b6b8f956b327f850f094430/hovercard" href="https://github.com/libcamera-org/libcamera/commit/e0a51061bc69568f6b6b8f956b327f850f094430"><tt>e0a5106</tt></a> ("libcamera: formats: Add 14-bits Bayer RAW formats")</li>
</ul>
</li>
<li>libcamera: bayer_format: Add Y12 to bayerToFormat
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/ec63095716547edd79a66512ea14dade6267b4cc/hovercard" href="https://github.com/libcamera-org/libcamera/commit/ec63095716547edd79a66512ea14dade6267b4cc"><tt>ec63095</tt></a> ("libcamera: bayer_format: Add unpacked mono 12-bit format to the conversion table")</li>
</ul>
</li>
<li>apps: common: dng_writer: Add a default case for switch-case on a modulo
<ul>
<li>Bug: <a href="https://bugs.libcamera.org/show_bug.cgi?id=207" rel="nofollow">https://bugs.libcamera.org/show_bug.cgi?id=207</a></li>
</ul>
</li>
<li>utils: mojom: Fix build error caused by the mojom tool update
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/d17de86904f03f1d5a4d5d20af518e70c4758969/hovercard" href="https://github.com/libcamera-org/libcamera/commit/d17de86904f03f1d5a4d5d20af518e70c4758969"><tt>d17de86</tt></a> ("utils: ipc: Update mojo")</li>
</ul>
</li>
<li>libcamera: formats: Fix planes bounds check
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/e83727a194b5cf2e40331989bf8f762da74217fd/hovercard" href="https://github.com/libcamera-org/libcamera/commit/e83727a194b5cf2e40331989bf8f762da74217fd"><tt>e83727a</tt></a> ("libcamera: PixelFormatInfo: Add functions stride and frameSize")</li>
</ul>
</li>
<li>utils: ipu3: Fix return value check on file output
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/23ac77dc4a096b92da7668e9ddfce10b22e73506/hovercard" href="https://github.com/libcamera-org/libcamera/commit/23ac77dc4a096b92da7668e9ddfce10b22e73506"><tt>23ac77d</tt></a> ("utils: ipu3: Add IPU3 raw capture unpack utility")</li>
</ul>
</li>
<li>ipa: libipa: histogram: Fix documentation of constructor
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/1dc01bc9e6c32a8fb776f31cb957a251305de7e5/hovercard" href="https://github.com/libcamera-org/libcamera/commit/1dc01bc9e6c32a8fb776f31cb957a251305de7e5"><tt>1dc01bc</tt></a> ("ipa: libipa: histogram: Add transform parameter to constructor")</li>
</ul>
</li>
<li>gstreamer: Fix string memory leak
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/fc9783acc6083a59fae8bca1ce49635e59afa355/hovercard" href="https://github.com/libcamera-org/libcamera/commit/fc9783acc6083a59fae8bca1ce49635e59afa355"><tt>fc9783a</tt></a> ("gstreamer: Provide colorimetry <> ColorSpace mappings")</li>
</ul>
</li>
<li>gstreamer: Use copied camera name
<ul>
<li>Fixes: <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/58feb69f8522892620825b691b4669e7c37e74b2/hovercard" href="https://github.com/libcamera-org/libcamera/commit/58feb69f8522892620825b691b4669e7c37e74b2"><tt>58feb69</tt></a> ("gst: libcamerasrc: Implement selection and acquisition")</li>
</ul>
</li>
</ul>
<p>core:</p>
<ul>
<li>include: linux: Update kernel headers to version v6.7</li>
<li>libcamera: v4l2_subdevice: Enable streams API when supported</li>
<li>libcamera: base: signal: Update Qt documentation link to Qt 6</li>
<li>Documentation: Update Qt documentation links to Qt 6</li>
<li>test: gstreamer: Use env instead of registry edit</li>
<li>libcamera: Remove empty formats.c</li>
<li>libcamera: formats: Add 16-bit mono format</li>
<li>libcamera: formats: Fix sort ordering of R10_CSI2P</li>
<li>libcamera: bayer_format: Add Y12 to bayerToFormat</li>
<li>libcamera: v4l2_subdevice: Explain sort order of formatInfoMap</li>
<li>libcamera: object: Fix thread-bound reference in documentation</li>
<li>libcamera: signal: Replace object.h inclusion with forward declatation</li>
<li>test: object-delete: Test deferred delete just before thread stops</li>
<li>libcamera: thread: Ensure deferred deletion of all objects before stopping</li>
<li>test: event-thread: Destroy Object from correct thread context</li>
<li>test: message: Remove incorrect slow receiver test</li>
<li>test: message: Destroy Object from correct thread context</li>
<li>test: signal-threads: Destroy Object from correct thread context</li>
<li>test: timer-thread: Move timer start from wrong thread to separate test</li>
<li>test: timer-thread: Destroy Object from correct thread context</li>
<li>libcamera: object: Document and ensure Object deletion constraints</li>
<li>libcamera: object: Add and use thread-bound assertion</li>
<li>utils: mojom: Fix build error caused by the mojom tool update</li>
<li>include: linux: Add RKISP1_V_IMX8MP version</li>
<li>libcamera: utils: Add to_underlying() helper function</li>
<li>libcamera: Use utils::to_underlying()</li>
<li>libcamera: formats: Fix typos in PixelFormatInfo documentation</li>
<li>utils: checkstyle.py: Don't presume python3 location</li>
<li>utils: checkstyle.py: Update LogCategoryChecker regexp</li>
<li>utils: rkisp1: gen-csc-table.py: Don't presume python3 location</li>
<li>libcamera: formats: Fix planes bounds check</li>
<li>utils: ipu3: Fix return value check on file output</li>
<li>README.rst: Report py dependencies</li>
<li>meson_options: Autodetect pycamera support</li>
<li>libcamera: controls: Fix typo on thermal</li>
<li>guides: pipeline-handler: Fix controlInfo_ initialization</li>
<li>libcamera: v4l2_subdevice: Add 14-bit Bayer formats</li>
<li>utils: checkstyle.py: Add Co-developed-by to known_trailers</li>
<li>utils: checkstyle.py: Fix known_trailers sort order</li>
<li>libcamera: framebuffer_allocator: Move from argument in constructor</li>
<li>libcamera: framebuffer_allocator: Use default destructor</li>
<li>libcamera: framebuffer_allocator: Remove entry if allocation fails</li>
<li>libcamera: controls: Add policy parameter to ControlList::merge()</li>
<li>libcamera: v4l2_subdevice: Rename V4L2SubdeviceFormatInfo</li>
<li>libcamera: v4l2_subdevice: Add code member to MediaBusFormatInfo</li>
<li>libcamera: v4l2_subdevice: Expose media bus format info as internal API</li>
<li>libcamera: v4l2_subdevice: Extend MediaBusFormatInfo with metadata formats</li>
<li>libcamera: v4l2_subdevice: Drop V4L2SubdeviceFormat::bitsPerPixel()</li>
<li>libcamera: v4l2_subdevice: Rename V4L2SubdeviceFormat::mbus_code to code</li>
<li>libcamera: v4l2_subdevice: Add stream support to get/set functions</li>
<li>libcamera: v4l2_subdevice: Replace Routing::toString() with operator<<()</li>
<li>libcamera: v4l2_subdevice: Add V4L2Subdevice::Route structure</li>
<li>libcamera: camera_sensor: Move related classes to subdirectory</li>
<li>libcamera: camera_sensor: Drop updateControlInfo() function</li>
<li>libcamera: camera_sensor: Reorder functions</li>
<li>libcamera: camera_sensor: Test for read-only HBLANK with READ_ONLY flag</li>
<li>libcamera: camera_sensor: Expose the Bayer order</li>
<li>checkstyle: Work around bug in difflib</li>
<li>utils: tuning: readme: Improve names of dependency packages</li>
<li>libcamera: internal: Move dma_heaps.[h, cpp] to common directories</li>
<li>libcamera: dma_heaps: extend DmaHeap class to support system heap</li>
<li>libcamera: internal: Move SharedMemObject class to a common directory</li>
<li>libcamera: shared_mem_object: Rename SIZE constant to `size'</li>
<li>libcamera: shared_mem_object: Reorganize the code and document the SharedMemObject class</li>
<li>libcamera: software_isp: Add SwStatsCpu class</li>
<li>libcamera: software_isp: Add Debayer base class</li>
<li>libcamera: software_isp: Add DebayerCpu class</li>
<li>libcamera: Introduce SoftwareIsp</li>
<li>libcamera: swstats_cpu: Add support for 8, 10 and 12 bpp unpacked bayer input</li>
<li>libcamera: debayer_cpu: Add support for 8, 10 and 12 bpp unpacked bayer input</li>
<li>libcamera: debayer_cpu: Add BGR888 output support</li>
<li>libcamera: Add "Software ISP benchmarking" documentation</li>
<li>libcamera: software_isp: Apply black level compensation</li>
<li>Documentation: coding-style: Clean up header guard style</li>
<li>utils: checkstyle.py: Use r'' strings for regular expressions</li>
<li>utils: checkstyle.py: Drop period at end of Doxygen one liners</li>
<li>libcamera: device_enumerator: Fix spell error</li>
<li>libcamera: Fix output spelling error</li>
<li>libcamera: utils: Avoid infinite recursion with strtod()</li>
<li>libcamera: shared_mem_object: Fix compilation with uClibc</li>
<li>meson: Deprecate bitwise operations between different enumeration type</li>
<li>Revert "meson: Deprecate bitwise operations between different enumeration type"</li>
<li>test: Don't add current build directory to include path</li>
<li>libcamera: controls: Generate enum value-name maps</li>
<li>libcamera: Drop file name from header comment blocks</li>
<li>libcamera: Drop file name from header comment blocks in templates</li>
<li>libcamera: Drop remaining file name from header comment blocks</li>
<li>test: gstreamer: Simplify single stream test</li>
<li>Documentation: Add option to treat Doxygen warnings as errors</li>
<li>libcamera: camera_manager: Add environment variable to order pipelines match</li>
<li>include: linux: Add RGB48 formats</li>
<li>libcamera: formats: Add RGB48 formats</li>
<li>include: linux: Add PiSP specific image and config buffer formats</li>
<li>libcamera: formats: Add PiSP specific image and config buffer formats</li>
<li>libcamera: v4l2_subdevice: Add missing MEDIA_BUS_FMT_xxxx16_1X16 info</li>
</ul>
<p>pipeline:</p>
<ul>
<li>pipeline: rpi: Always initialize the embedded buffer in tryRunPipeline</li>
<li>pipeline: rpi: vc4: Use an unpacked format if no packed one is available</li>
<li>pipeline: simple: Add support for MediaTek MT8365 platforms</li>
<li>libcamera: pipeline: Add Mali-C55 ISP pipeline</li>
<li>libcamera: pipeline: simple: fix size adjustment in validate()</li>
<li>libcamera: pipeline: simple: Rename converterBuffers_ and related vars</li>
<li>libcamera: pipeline: simple: Enable use of Soft ISP and Soft IPA</li>
<li>ipu3: Use posix basename</li>
<li>pipeline: rpi: Avoid duplicating size range for the same pixel format</li>
<li>libcamera: pipeline: Rename pipelines to a shorter name</li>
<li>libcamera: pipeline: Add a get factory by name helper</li>
</ul>
<p>ipa:</p>
<ul>
<li>libipa: camera_sensor_helper: Mark createInstance() with override</li>
<li>utils: ipc: extract-docs: Fix escape characters in regex</li>
<li>ipa: rkisp1: agc: Wrap variable length C arrays in spans</li>
<li>ipa: rkisp1: Store hardware parameters in IPA context</li>
<li>ipa: rkisp1: Fix histogram weights configuration</li>
<li>ipa: rkisp1: Support the i.MX8MP ISP version</li>
<li>ipa: rpi: cam_helper: Extend embedded data parsing to RAW14 modes</li>
<li>utils: ipc: Fix event functions with no parameters</li>
<li>utils: ipc: Fix async main interface functions with no parameters</li>
<li>libcamera: ipa: Add Soft IPA</li>
<li>libcamera: libipa: camera_sensor: Add Sony IMX283 sensor properties</li>
<li>libcamera: libipa: camera_sensor: Add Sony IMX335 sensor properties</li>
<li>libcamera: libipa: camera_sensor: Add Sony IMX415 sensor properties</li>
<li>ipa: libipa: Allow creation of empty Histogram</li>
<li>ipa: libipa: Add ExposureModeHelper</li>
<li>ipa: libipa: Add AgcMeanLuminance base class</li>
<li>ipa: ipu3: Derive ipu3::algorithms::Agc from AgcMeanLuminance</li>
<li>ipa: ipu3: Remove bespoke AGC functions from IPU3</li>
<li>ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance</li>
<li>ipa: rkisp1: Remove bespoke Agc functions</li>
<li>ipa: libipa: histogram: Add transform parameter to constructor</li>
<li>ipa: rpi: Fix for incorrectly reported max shutter speed</li>
<li>ipa: rkisp1: agc: Fix histogram construction</li>
<li>ipa: libipa: histogram: Fix documentation of constructor</li>
<li>ipa: rpi: Add HDR support</li>
<li>ipa: rpi: Add accessor function for monoSensor_</li>
</ul>
<p>apps:</p>
<ul>
<li>gstreamer: Add meson devenv support</li>
<li>apps: common: dng_writer: Add a default case for switch-case on a modulo</li>
<li>doc: gstreamer: Add missing queues</li>
<li>gstreamer: Map R8/R16 pixel format</li>
<li>gstreamer: Map 10/12/14/16 bayer formats supports</li>
<li>cam: capture_script: Make parseRectangles work for non-array</li>
<li>apps: lc-compliance: Check that requests complete successfully</li>
<li>apps: lc-compliance: Fix typo in comment</li>
<li>apps: lc-compliance: Re-organize source directory</li>
<li>android: camera_device: Save capture settings unconditionally</li>
<li>v4l2: Unset _TIME_BITS in addition to _FILE_OFFSET_BITS</li>
<li>v4l2: meson: Keep defines sorted alphabetically</li>
<li>apps: cam: Add support for PPM output format</li>
<li>android: camera_device: Always clear descriptors_ in stop()</li>
<li>apps: cam: Fix C++20 deprecation warning</li>
<li>apps: qcam: Use standard key sequence for quit action</li>
<li>gstreamer: Fix string memory leak</li>
<li>gstreamer: Use copied camera name</li>
</ul>
<p>Acked-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a><br>
Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.2.02024-01-09T17:25:26Zlibcamera v0.2.0<p>ABI Compliance:</p>
<p>abi-compliance-checker reports 94.6% binary compatibilty and 97.6% source<br>
compatibility between 0.1.0 and 0.2.0. The SONAME has been updated accordingly<br>
and applications must be relinked against this version of libcamera.</p>
<ul>
<li>Binary compatibility: 94.6%</li>
<li>Source compatibility: 97.6%</li>
<li>Total binary compatibility problems: 5, warnings: 2</li>
<li>Total source compatibility problems: 3, warnings: 3</li>
</ul>
<p>The key ABI/API differences here are:</p>
<ul>
<li>
<p>AeFlicker</p>
<p>The control "SceneFlicker" has been removed and replaced by<br>
AeFlickerMode, AeFlickerDetected and AeFlickerPeriod.</p>
</li>
<li>
<p>struct CameraConfiguration</p>
<p>Field transform has been removed from the middle position of this structural type.<br>
Field orientation has been added at the middle position of this structural type.<br>
Field sensorConfig has been added at the middle position of this structural type.<br>
Size of this type has been changed from 40 bytes to 96 bytes.</p>
</li>
</ul>
<p>Bugs:</p>
<p>The following bugs are resolved with this release:</p>
<p><a href="https://bugs.libcamera.org" rel="nofollow">https://bugs.libcamera.org</a>:</p>
<ul>
<li>Bug 91 - libcamerasrc is missing EOS handling</li>
<li>Bug 199 - Install error on Ubuntu for Orange Pi 5</li>
<li>Bug 205 - ipa_proxy_worker.cpp fails to compile if an interface function has<br>
two arguments of SharedFD type</li>
<li>Bug 206 - Fails to build with Python 3.12</li>
</ul>
<p><a href="https://github.com/raspberrypi/libcamera/issues">https://github.com/raspberrypi/libcamera/issues</a>:</p>
<ul>
<li>Assertion '!this->empty()' failed in libcamera::utils::Duration - libcamera-tools 0.0.5-1 #64</li>
</ul>
<p>Integration overview:</p>
<p>core:</p>
<ul>
<li>utils: checkstyle.py: Treat Malformed trailers as a CommitIssue</li>
<li>utils: checkstyle.py: Initialise staged trailers</li>
<li>utils: checkstyle.py: Derive Amendment from Commit</li>
<li>utils: checkstyle.py: Check trailers for Amendment commits</li>
<li>libcamera: controls: Add controls for AEC/AGC flicker avoidance</li>
<li>libcamera: yaml: Increase the YAML parser limit</li>
<li>utils: checkstyle.py: Extract title and trailers with one command</li>
<li>meson: Correctly locate libc++</li>
<li>Documentation: theme: Fix compilation with Sphinx >= 7.0.0</li>
<li>libcamera: Remove duplicated SortIncludes in <code>.clang-format</code></li>
<li>libcamera: stream: Document stride will be 0 for compressed formats</li>
<li>README.rst: Drop recommendation to install meson using pip3</li>
<li>meson: Don't set _FORTIFY_SOURCE for ChromeOS</li>
<li>meson: Simplify check for _FORTIFY_SOURCE</li>
<li>libcamera: formats: Fix typo in YV444 V4L2PixelFormat listing</li>
<li>Documentation: Introduce Camera Sensor Model</li>
<li>libcamera: camera: Introduce SensorConfiguration</li>
<li>libcamera: camera_sensor: Support SensorConfiguration</li>
<li>libcamera: converter: A few fixes to ConverterFactoryBase documentation</li>
<li>libcamera: converter: drop unnecessary #include directive</li>
<li>utils: update-kernel-headers: Support git worktrees</li>
<li>libcamera: camera_sensor: Cache rotationTransform_</li>
<li>libcamera: camera: Introduce Orientation</li>
<li>Documentation: Add figures to document Orientation</li>
<li>libcamera: properties: Make 'Rotation' the mounting rotation</li>
<li>libcamera: transform: Add functions to convert Orientation</li>
<li>libcamera: transform: Invert operator*() operands</li>
<li>libcamera: transform: Add operations with Orientation</li>
<li>test: Add unit test for Transform and Orientation</li>
<li>libcamera: Use CameraConfiguration::orientation</li>
<li>libcamera: camera_sensor: Cache mounting orientation instead of transform</li>
<li>libcamera: transform: Fold transformToOrientation() in its only caller</li>
<li>libcamera: transform: Make the transformFromOrientation() function static</li>
<li>libcamera: controls: Add controls for HDR</li>
<li>libcamera: camera_sensor: Only access V4L_CID_HBLANK if existing</li>
<li>Documentation: Add code of conduct</li>
<li>Documentation: code-of-conduct: Convert to reStructuredText</li>
<li>Documentation: code-of-conduct: Add license information</li>
<li>Documentation: code-of-conduct: Add contact information</li>
<li>Documentation: contributing: Integrate the code of conduct</li>
<li>README.rst: Use code directive for all code examples</li>
<li>Documentation: Fix list indentation</li>
<li>controls: Add vendor control/property support to generation scripts</li>
<li>controls: Update argument handling for controls generation scripts</li>
<li>build: controls: Rework how controls and properties are generated</li>
<li>libcamera: control: Add vendor control id range reservation</li>
<li>libcamera: controls: Use vendor tags for draft controls and properties</li>
<li>documentation: Document vendor specific controls and properties handling</li>
<li>README.rst: Drop indirect dependencies on Qt5 packages</li>
<li>README.rst: Document dependencies for the Python bindings</li>
<li>meson_options: Sort options alphabetically</li>
<li>meson: Tag all installed files</li>
<li>test: log: log_process: Log an error when failing due to incorrect message</li>
<li>test: log: log_process: Fix uninitialized variable on process exit failure</li>
<li>test: log: log_process: Improve debugging on process exit failures</li>
<li>test: log: log_process: Increase process exit timeout</li>
<li>test: ipc: unixsocket: Increase process exit timeout</li>
<li>test: gstreamer: Remove videoconvert element from pipeline</li>
<li>README.rst: Add missing libgtest-dev dependency for lc-compliance</li>
<li>meson: Replace hack with usage of '<a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/basename/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/basename">@basename</a>@'</li>
<li>libcamera: camera: Fix unused variable compiler warning</li>
<li>Documentation: camera-sensor-model: Support Sphinx < 2.0</li>
<li>libcamera: camera_sensor: Add OV64A40 sensor properties</li>
<li>utils: ipc: Fix deserialization of multiple fd parameters</li>
<li>libcamera: device_enumerator: ensure deviceNode is not empty</li>
<li>utils: ipc: mojom_libcamera_generator.py: Fix Python warning</li>
<li>libcamera: framebuffer_allocator: Remove unnecessary <code>clear()</code></li>
<li>hooks: pre-push: Disable interpretation of escape sequences</li>
<li>libcamera: geometry: Correct doxygen reference to classes</li>
<li>utils: update-mojo.sh: Properly remove old sources</li>
<li>utils: update-mojo.sh: Exit immediately on error</li>
<li>utils: update-mojo.sh: Change to the libcamera source directory</li>
<li>utils: update-mojo.sh: Reject a dirty libcamera tree</li>
<li>utils: update-mojo.sh: Commit the mojo update</li>
<li>utils: ipc: generate.py: Add bindings directory to Python path</li>
<li>utils: ipc: generate.py: Disable attributes checker</li>
<li>utils: ipc: Update mojo</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: rpi: pipeline_base: Remove populateSensorFormats()</li>
<li>libcamera: rpi: pipeline_base: Move findBestFormat to CameraData</li>
<li>libcamera: rpi: pipeline_base: Cache sensor format</li>
<li>pipeline: rpi: Don't call toV4L2DeviceFormat() from validate()</li>
<li>pipeline: rpi: Increase buffer import count to 32</li>
<li>pipeline: rpi: Remove additional external dma buf handling logic</li>
<li>pipeline: rpi: Rename RPi::Stream::setExternalBuffer()</li>
<li>pipeline: rpi: Simplify buffer id generation</li>
<li>pipeline: rpi: Reset the frame lengths queue during configure</li>
<li>libcamera: rpi: Handle SensorConfiguration</li>
<li>libcamera: rpi: Allow platformValidate() to adjust format strides</li>
<li>libcamera: rpi: Fix wrong comment indentation</li>
<li>libcamera: rpi: Make isRaw/isYuv/isRgb static functions</li>
<li>libcamera: rpi: Cache rawStreams and outStreams</li>
<li>libcamera: rpi: Add some helpers to PipelineHandlerBase</li>
<li>libcamera: rpi: Simplify validate() and configure() for RAW streams</li>
<li>libcamera: rpi: Change default stream formats</li>
<li>libcamera: rpi: Simplify validate() and configure() for YUV/RGB streams</li>
<li>pipeline: rpi: Add RequiresMmap flag to RPi::Stream</li>
<li>pipeline: rpi: Add Recurrent and Needs32bitConv flags to RPi::Stream</li>
<li>pipeline: rpi: Add SharedMemObject class</li>
<li>pipeline: rpi: Add SW downscale status to RPi::Stream</li>
<li>pipeline: rpi: Move flip handling validation code</li>
<li>pipeline: rpi: Make color space members in RPiCameraConfiguration public</li>
<li>pipeline: rpi: vc4: Allocate more embedded data buffers</li>
<li>pipeline: rpi: Remove unused variable</li>
<li>pipeline: rpi: vc4: Fix drop frame bug when no ISP streams are configured</li>
<li>pipeline: rpi: Add some useful logging messages</li>
<li>libcamera: pipeline: Fix c++20 compile warning</li>
<li>pipeline: rpi: Respect provided stride</li>
</ul>
<p>ipa:</p>
<ul>
<li>ipa: rpi: common: Handle AEC/AGC flicker controls</li>
<li>utils: raspberrypi: ctt: Improved color matrix fitting</li>
<li>ipa: rpi: vc4: data: Updated color matrices for RPi Cameras</li>
<li>utils: raspberrypi: ctt: Code tidying</li>
<li>ipa: rpi: Fix the reporting of Focus FoMs</li>
<li>ipa: rpi: imx290: Hide one frame on startup</li>
<li>ipa: rpi: agc: Fetch AWB status in process method, not prepare</li>
<li>ipa: rpi: agc: Filter exposures before dealing with digital gain</li>
<li>ipa: rpi: agc: Split AgcStatus into AgcStatus and AgcPrepareStatus</li>
<li>ipa: rpi: vc4: Make the StatisticsPtr construction clearer</li>
<li>ipa: rpi: histogram: Add interBinMean()</li>
<li>ipa: rpi: agc: Reorganise code for multi-channel AGC</li>
<li>ipa: rpi: agc: Implementation of multi-channel AGC</li>
<li>ipa: rpi: agc: Add AgcChannelConstraint class</li>
<li>ipa: rpi: agc: Use channel constraints in the AGC algorithm</li>
<li>ipa: rpi: Fix segfault when parsing invalid json file</li>
<li>ipa: rpi: Fix frame count logic when running algorithms</li>
<li>ipa: rpi: Avoid skipping IPAs on the first frame after the drop frames</li>
<li>ipa: rpi: Add IpaBase::platformStart() member function</li>
<li>mojom: pipeline: ipa: rpi: Add fields for PiSP objects</li>
<li>ipa: rpi: Add try_lock() to RPiController::Metadata</li>
<li>ipa: rpi: Add statsInline to the Controller hardware description</li>
<li>ipa: rpi: Add PiSP definitions to the Controller hardware description</li>
<li>ipa: rpi: Prepare ALSC for PiSP support</li>
<li>ipa: rpi: Prepare AWB for PiSP support</li>
<li>ipa: rpi: Add new algorithms for PiSP</li>
<li>build: ipa: Fix bug in building multiple IPA interfaces with the same mojom file</li>
<li>ipa: rpi: agc: Add an AGC stable region</li>
<li>ipa: rpi: contrast: Allow adaptive contrast enhancement to be disabled</li>
<li>ipa: rpi: denoise: Support different denoise configurations</li>
<li>ipa: rpi: agc: Avoid overwriting caller's statistics pointer</li>
<li>ipa: rpi: agc: When AGC channels are changed, start with the 1st channel</li>
<li>ipa: rpi: hdr: Add the ability to alter the LSC table</li>
<li>ipa: rpi: alsc: Do not re-read the alsc.status metadata</li>
<li>ipa: rpi: agc: Allow AGC channels to avoid using "fast desaturation"</li>
<li>ipa: rpi: vc4: Move denoise control handling into the VC4 derived IPA</li>
<li>ipa: rpi: agc: Fetch AWB status in the prepare method</li>
<li>ipa: rpi: agc: Make AGC controls affect all channels</li>
<li>ipa: rpi: alsc: Do not allow zero colour ratio statistics</li>
<li>ipa: rpi: agc: Fix bug where AeLocked was never getting set</li>
<li>ipa: rpi: cac: Minor code improvements and tidying</li>
<li>ipa: rpi: Add hardware line rate constraints</li>
<li>ipa: rpi: Allow the mean of an empty histogram interval</li>
<li>ipa: rpi: black_level: Add an initialValues method</li>
<li>ipa: rpi: awb: Add an initialValues method</li>
<li>utils: raspberrypi: ctt: Improve the Macbeth Chart search reliability</li>
<li>build: controls: Add Raspberry Pi vendor specific controls</li>
<li>ipa: vc4: Implement the StatsOutputEnable vendor control</li>
<li>ipa: rpi: Provide a Camera Helper for the OV64A40</li>
<li>libipa: camera_sensor_helper: Add OV64A40 helper</li>
<li>ipa: rpi: vc4: Add OV64A40 tuning files</li>
<li>ipa: rpi: Implement HDR control</li>
<li>ipa: rpi: vc4: data: Update tuning files for HDR</li>
</ul>
<p>apps:</p>
<ul>
<li>android: camera_device: Fix requestedStream handling</li>
<li>py: Add the SensorConfiguration class</li>
<li>py: gen-py-controls: Remove SceneFlicker workaround</li>
<li>apps: qcam: Add support for RGB565</li>
<li>py: libcamera: Define and use Orientation</li>
<li>apps: cam: Add option to set stream orientation</li>
<li>py: cam: Add option to set stream orientation</li>
<li>gstreamer: Implement element EOS handling</li>
<li>gstreamer: Fix unused variable error</li>
<li>test: gstreamer: Fix indentation in comments</li>
<li>gstreamer: Move negotiation logic to separate function</li>
<li>gstreamer: Add GstLibcameraSrcState::clearRequests method</li>
<li>gstreamer: Implement renegotiation</li>
<li>lc-compliance: Set minimum version for gtest dependency</li>
<li>gstreamer: Support for pre-1.16 GstEvent</li>
<li>apps: lc-compliance: Fix source file ordering in meson.build</li>
</ul>
<p>Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbinghamtag:github.com,2008:Repository/265350737/v0.1.02023-07-16T11:46:40Zlibcamera v0.1.0<p>ABI Compliance:</p>
<p>abi-compliance-checker reports 99% binary compatibility and 81.4% source<br>
compatibilty between version 0.0.5 and 0.1.</p>
<ul>
<li>Binary compatibility: 99%</li>
<li>Source compatibility: 81.4%</li>
<li>Total binary compatibility problems: 4, warnings: 2</li>
<li>Total source compatibility problems: 165, warnings: 7</li>
</ul>
<p>Now that we have funtional ABI validation, the soname has been updated from<br>
libcamera.so.0.0.5 to libcamera.so.0.1.</p>
<p>Future releases will now maintain the same soname until an ABI breakage is<br>
detected to reduce the repackaging and rebuilding of other components that may<br>
use libcamera. The abi-compatibility report can now be generated with the new<br>
utility './utils/abi-compat.sh'.</p>
<p>Key differences here are due to preventing the installation of internal and<br>
private headers in the packaging process, and most of this API compatibility<br>
should not be visible to applications with the exception of:</p>
<ul>
<li>
<p>Camera::generateConfiguration ( StreamRoles const& roles )</p>
<p>The StreamRoles type definition has been removed. This is now handled as a<br>
Span to prevent unnecessary allocations and copies.</p>
</li>
<li>
<p>CameraManager::addCamera ( std::shared_ptr camera, std::vectorconst& devnums )</p>
</li>
<li>
<p>CameraManager::get ( dev_t devnum )</p>
</li>
<li>
<p>CameraManager::removeCamera ( std::shared_ptr camera )</p>
<p>These functions of the CameraManager were for use exclusively by the V4L2<br>
adaptation layer, and not intended for use by applications. This has now been<br>
reworked to use the new SystemDevices and the redundant functions removed.</p>
</li>
</ul>
<p>The ABI/API breakages have been introduced by:</p>
<p><a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/5ca0c9276f284c91bd4779725a150ed2828c9e60/hovercard" href="https://github.com/libcamera-org/libcamera/commit/5ca0c9276f284c91bd4779725a150ed2828c9e60"><tt>5ca0c92</tt></a> ("libcamera: CameraManager: Remove ::get(dev_t)")<br>
<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/26a4b83d1b9443795dbcb21fa6c23117f113216a/hovercard" href="https://github.com/libcamera-org/libcamera/commit/26a4b83d1b9443795dbcb21fa6c23117f113216a"><tt>26a4b83</tt></a> ("libcamera: Remove <code>StreamRoles</code> alias")<br>
<a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/libcamera-org/libcamera/commit/63966ae587d701e8e1adc0815ef92eade0cc0ecb/hovercard" href="https://github.com/libcamera-org/libcamera/commit/63966ae587d701e8e1adc0815ef92eade0cc0ecb"><tt>63966ae</tt></a> ("libcamera: base: Do not install private headers")</p>
<p>Core:</p>
<ul>
<li>libcamera: v4l2_videodevice: Use O_CLOEXEC when exporting DMA buffers</li>
<li>libcamera: ipa_manager: Allow IPA loading in nested subdirs</li>
<li>meson: Fix usage of overwritten pipeline variable</li>
<li>subprojects: Drop leftovers of pybind11</li>
<li>camera_sensor: ipa: core: Add CFA pattern to IPACameraSensorInfo</li>
<li>libcamera: controls: Define a default lens position behaviour</li>
<li>libcamera: internal: request: convert to pragma once</li>
<li>libcamera: camera_manager: Move private implementation to internal</li>
<li>libcamera: camera_manager: Move {add,remove}Camera to internal</li>
<li>libcamera: properties: Provide a Devices camera property</li>
<li>libcamera: pipeline: Register device numbers with camera</li>
<li>libcamera: camera_sensor: Adjust properties::Rotation</li>
<li>libcamera: meson: Allow PH to change libcamera_deps</li>
<li>libcamera: base: Move thread_annotations to private</li>
<li>libcamera: base: Do not install private headers</li>
<li>utils: ABI Compatibility checker</li>
<li>meson: Use x.y soname versioning</li>
<li>libcamera: camera: Take span of StreamRole instead of vector</li>
<li>libcamera: Remove <code>StreamRoles</code> alias</li>
<li>utils: ipu3-capture.sh: Fix the script to work with recent media-ctl versions</li>
<li>Documentation: Add predefined macros from config.h to Doxyfile</li>
<li>utils: checkstyle: Add <strong>repr</strong> method to CommitFile class</li>
<li>utils: checkstyle: Support running checkers selectively</li>
<li>utils: checkstyle: Don't include commit ID in commit title</li>
<li>utils: checkstyle: Add trailers checker</li>
<li>tests: gstreamer: Test cameras' enumeration from GstDeviceProvider</li>
<li>meson: Fix space around colon issues</li>
<li>libcamera: Add option to configure udev support</li>
<li>libcamera: CameraManager: Remove ::get(dev_t)</li>
<li>tests: gstreamer: Fix compiler error with gcc 8.4.0</li>
</ul>
<p>ipa:</p>
<ul>
<li>meson: ipa: Add mapping for pipeline handler to mojom interface file</li>
<li>libcamera: ipa: Remove character restriction on the IPA name</li>
<li>ipa: meson: Allow nested IPA directory structures</li>
<li>ipa: raspberrypi: Introduce IpaBase class</li>
<li>ipa: raspberrypi: agc: Move weights out of AGC</li>
<li>ipa: rkisp1: agc: drop hard-coded analogue gain range</li>
<li>libipa: camera_sensor_helper: Add IMX327 helper</li>
<li>pipeline: rpi: ipa_base: Parse config files after platformRegister()</li>
<li>libcamera: camera_sensor: Add Sony IMX327 sensor properties</li>
<li>ipa: rpi: imx296: Small refinements to the IMX296 mono sensor tuning</li>
<li>ipa: rpi: Handle controls for mono variant sensors</li>
<li>libcamera: controls: Drop reference to IPA in controls documentation</li>
<li>libipa: camera_sensor_helper: Restore alphabetical order</li>
<li>ipa: ipu3: agc: Drop hard-codec analogue gain max</li>
<li>ipa: rkisp1: agc: Restore minimum analogue gain limit</li>
<li>pipeline: ipa: rpi: Return lens controls from ipa->configure()</li>
<li>ipa: rpi: Set lens position to hyperfocal on startup</li>
<li>ipa: rpi: tunings: Add missing short and long exposure profiles</li>
<li>ipa: rpi: agc: Use std::string instead of char arrays</li>
<li>ipa: rpi: agc: Gracefully handle missing agc modes</li>
<li>ipa: rpi: agc: Do not switch to a default if a mode is unavailable</li>
<li>ipa: rpi: imx708: Fix mode switch drop frame count</li>
<li>ipa: rpi: imx296_mono: Disable all colour shading</li>
</ul>
<p>pipeline:</p>
<ul>
<li>libcamera: pipeline: simple: Add support for ST's DCMIPP</li>
<li>pipeline: meson: Allow nested pipeline handler directory structures</li>
<li>pipeline: ipa: raspberrypi: Refactor and move the Raspberry Pi code</li>
<li>pipeline: raspberrypi: rpi_stream: Set invalid buffer to id == 0</li>
<li>pipeline: ipa: raspberrypi: Restructure the IPA mojom interface</li>
<li>pipeline: raspberrypi: Make RPi::Stream::name() return const std::string &</li>
<li>pipeline: raspberrypi: Introduce PipelineHandlerBase class</li>
<li>pipeline: raspberrypi: Add stream flags to RPi::Stream</li>
<li>libcamera: rkisp1: Generate config using main path</li>
<li>libcamera: rkisp1: Crop on ISP before downscaling</li>
<li>libcamera: rkisp1: Assign sizes to roles</li>
<li>libcamera: rkisp1: Fix enumeration of RAW formats</li>
<li>pipeline: rpi: Do not return an error from pipeline config file handling</li>
<li>libcamera: pipeline: simple: Support TI CSI-RX</li>
<li>pipeline: rpi: Account for Bayer packing when validating format</li>
</ul>
<p>apps:</p>
<ul>
<li>apps: qcam: Remove redundant check</li>
<li>v4l2: Move the v4l2 compat layer to libexec/libcamera</li>
<li>android: mm: generic: use GRALLOC_HARDWARE_MODULE_ID</li>
<li>android: mm: Stub libhardware for build tests</li>
<li>py: Fix CameraManager.version property</li>
<li>py: Move ColorSpace and Transform classes to separate files</li>
<li>py: Use exceptions instead of returning error codes</li>
<li>py: unittests.py: Add weakref helpers and use del</li>
<li>py: Move to mainline pybind11 version</li>
<li>py: Fix code formatting</li>
<li>py: unittests.py: Fix type checker warnings</li>
<li>gstreamer: Add enable_auto_focus option to the GStreamer plugin</li>
<li>gstreamer: Drop libcamera_private dependency</li>
<li>apps: Add ipa-verify application</li>
<li>v4l2: v4l2_camera_proxy: Prevent ioctl sign-extensions</li>
<li>v4l2: Use SystemDevices properties to identify cameras</li>
</ul>
<p>Signed-off-by: Kieran Bingham <a href="mailto:kieran.bingham@ideasonboard.com">kieran.bingham@ideasonboard.com</a></p>kbingham