tag:github.com,2008:https://github.com/libcamera-org/libcamera/releases Release notes from libcamera 2025-11-27T11:55:39Z tag:github.com,2008:Repository/265350737/v0.6.0 2025-11-27T11:55:39Z libcamera 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>&lt;set&gt;</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> kbingham tag:github.com,2008:Repository/265350737/v0.5.2 2025-08-07T13:48:55Z libcamera 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 &lt;barnabas.pocze@ideasonboard.com&gt; 23 Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt; 17 Stefan Klug &lt;stefan.klug@ideasonboard.com&gt; 12 David Plowman &lt;david.plowman@raspberrypi.com&gt; 10 Naushir Patuck &lt;naush@raspberrypi.com&gt; 9 Nick Hollinghurst &lt;nick.hollinghurst@raspberrypi.com&gt; 7 Umang Jain &lt;uajain@igalia.com&gt; 5 Antoine Bouyer &lt;antoine.bouyer@nxp.com&gt; 5 Benjamin Mugnier &lt;benjamin.mugnier@foss.st.com&gt; 3 Jaslo Ziska &lt;jaslo@ziska.de&gt; 2 Daniel Scally &lt;dan.scally@ideasonboard.com&gt; 2 Kieran Bingham &lt;kieran.bingham@ideasonboard.com&gt; 1 Christian Rauch &lt;Rauch.Christian@gmx.de&gt; 1 Han-Lin Chen &lt;hanlinchen@chromium.org&gt; 1 Harvey Yang &lt;chenghaoyang@chromium.org&gt; 1 Hou Qi &lt;qi.hou@nxp.com&gt; 1 Milan Zamazal &lt;mzamazal@redhat.com&gt; 1 Nícolas F. R. A. Prado &lt;nfraprado@collabora.com&gt; 1 Paul Elder &lt;paul.elder@ideasonboard.com&gt;"><pre class="notranslate"><code>27 Barnabás Pőcze &lt;barnabas.pocze@ideasonboard.com&gt; 23 Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt; 17 Stefan Klug &lt;stefan.klug@ideasonboard.com&gt; 12 David Plowman &lt;david.plowman@raspberrypi.com&gt; 10 Naushir Patuck &lt;naush@raspberrypi.com&gt; 9 Nick Hollinghurst &lt;nick.hollinghurst@raspberrypi.com&gt; 7 Umang Jain &lt;uajain@igalia.com&gt; 5 Antoine Bouyer &lt;antoine.bouyer@nxp.com&gt; 5 Benjamin Mugnier &lt;benjamin.mugnier@foss.st.com&gt; 3 Jaslo Ziska &lt;jaslo@ziska.de&gt; 2 Daniel Scally &lt;dan.scally@ideasonboard.com&gt; 2 Kieran Bingham &lt;kieran.bingham@ideasonboard.com&gt; 1 Christian Rauch &lt;Rauch.Christian@gmx.de&gt; 1 Han-Lin Chen &lt;hanlinchen@chromium.org&gt; 1 Harvey Yang &lt;chenghaoyang@chromium.org&gt; 1 Hou Qi &lt;qi.hou@nxp.com&gt; 1 Milan Zamazal &lt;mzamazal@redhat.com&gt; 1 Nícolas F. R. A. Prado &lt;nfraprado@collabora.com&gt; 1 Paul Elder &lt;paul.elder@ideasonboard.com&gt; </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 -&gt; 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> kbingham tag:github.com,2008:Repository/265350737/v0.5.1 2025-06-01T22:58:03Z libcamera 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 &lt;barnabas.pocze@ideasonboard.com&gt; 15 Stefan Klug &lt;stefan.klug@ideasonboard.com&gt; 5 David Plowman &lt;david.plowman@raspberrypi.com&gt; 5 Kieran Bingham &lt;kieran.bingham@ideasonboard.com&gt; 5 Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt; 4 Milan Zamazal &lt;mzamazal@redhat.com&gt; 4 Quentin Schulz &lt;quentin.schulz@cherry.de&gt; 3 Daniel Scally &lt;dan.scally@ideasonboard.com&gt; 3 Paul Elder &lt;paul.elder@ideasonboard.com&gt; 2 Hou Qi &lt;qi.hou@nxp.com&gt; 2 Julien Vuillaumier &lt;julien.vuillaumier@nxp.com&gt; 2 Naushir Patuck &lt;naush@raspberrypi.com&gt; 2 Niklas Söderlund &lt;niklas.soderlund@ragnatech.se&gt; 2 Pavel Machek &lt;pavel@ucw.cz&gt; 1 Benjamin Mugnier &lt;benjamin.mugnier@foss.st.com&gt; 1 Nícolas F. R. A. Prado &lt;nfraprado@collabora.com&gt; 1 Sven Püschel &lt;s.pueschel@pengutronix.de&gt;"><pre class="notranslate"><code>36 Barnabás Pőcze &lt;barnabas.pocze@ideasonboard.com&gt; 15 Stefan Klug &lt;stefan.klug@ideasonboard.com&gt; 5 David Plowman &lt;david.plowman@raspberrypi.com&gt; 5 Kieran Bingham &lt;kieran.bingham@ideasonboard.com&gt; 5 Laurent Pinchart &lt;laurent.pinchart@ideasonboard.com&gt; 4 Milan Zamazal &lt;mzamazal@redhat.com&gt; 4 Quentin Schulz &lt;quentin.schulz@cherry.de&gt; 3 Daniel Scally &lt;dan.scally@ideasonboard.com&gt; 3 Paul Elder &lt;paul.elder@ideasonboard.com&gt; 2 Hou Qi &lt;qi.hou@nxp.com&gt; 2 Julien Vuillaumier &lt;julien.vuillaumier@nxp.com&gt; 2 Naushir Patuck &lt;naush@raspberrypi.com&gt; 2 Niklas Söderlund &lt;niklas.soderlund@ragnatech.se&gt; 2 Pavel Machek &lt;pavel@ucw.cz&gt; 1 Benjamin Mugnier &lt;benjamin.mugnier@foss.st.com&gt; 1 Nícolas F. R. A. Prado &lt;nfraprado@collabora.com&gt; 1 Sven Püschel &lt;s.pueschel@pengutronix.de&gt; </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([]) &gt; 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>&amp;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> kbingham tag:github.com,2008:Repository/265350737/v0.5.0 2025-04-03T13:38:41Z libcamera 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 &amp; 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&lt;&gt;</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 &lt;stdint.h&gt; 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&lt;&gt;</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> kbingham tag:github.com,2008:Repository/265350737/v0.4.0 2024-12-23T20:19:03Z libcamera 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&lt;&lt;(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 &amp; 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> kbingham tag:github.com,2008:Repository/265350737/v0.3.2 2024-09-24T13:31:12Z libcamera 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 &lt;stdint.h&gt; include to base/file.h</li> <li>libcamera: Add missing &lt;stdint.h&gt; 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_-&gt;acquire() and pipe_-&gt;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&lt;&gt;</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> kbingham tag:github.com,2008:Repository/265350737/v0.3.1 2024-07-25T13:24:10Z libcamera 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> kbingham tag:github.com,2008:Repository/265350737/v0.3.0 2024-05-19T15:54:34Z libcamera 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&amp; source )<br> has been replaced with the new symbol:</li> <li>ControlList::merge ( struct ControlList const&amp; 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 &lt;&gt; 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&lt;&lt;()</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> kbingham tag:github.com,2008:Repository/265350737/v0.2.0 2024-01-09T17:25:26Z libcamera 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-&gt;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 &gt;= 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 &lt; 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> kbingham tag:github.com,2008:Repository/265350737/v0.1.0 2023-07-16T11:46:40Z libcamera 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&amp; 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&amp; 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-&gt;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 &amp;</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