This release brings 142 commits with the largest developments in the core of
libcamera components. Perhaps the most obvious is that we now use C++20 for the
project. The Configuration file handling has had a substantial rework with
updates to the yaml_parser.
The RKISP1 IPA has now added a new Hue control which brought with it a rework
of how we manage fixed point arithmetic with the Quantized class. I hope this
makes it easier to convey types with hardware operations.
The SoftISP has the ability to perform CPU debaying with multiple threads which
helps throughput on platforms such as the Arduino Uno Q.
The Mali-C55 pipeline handler now has full support for the RZG2LCRU and inline
handling which enables camera support on the Renesas RZ/V2H and RZ/V2NP
platforms.
And of interest in the apps components, the gstreamer plugin now has the
ability to select and configure the sensor mode configuration properties.
Finally a new script "libcamera-bug-report" is available to be packaged which
will help users identify issues when reporting bugs.
Contributors:
64 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
28 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
21 Kieran Bingham <kieran.bingham@ideasonboard.com>
8 Hans de Goede <johannes.goede@oss.qualcomm.com>
7 Jacopo Mondi <jacopo.mondi@ideasonboard.com>
3 David Plowman <david.plowman@raspberrypi.com>
3 Milan Zamazal <mzamazal@redhat.com>
3 Naushir Patuck <naush@raspberrypi.com>
2 Stefan Klug <stefan.klug@ideasonboard.com>
1 Daniel Scally <dan.scally@ideasonboard.com>
1 Gianfranco Mariotti <gianfranco.mariotti94@gmail.com>
1 van Veen, Stephan <stephan.vanveen@karlstorz.com>
142 commits, 319 files changed, 5346 insertions(+), 8486 deletions(-)
Integration Overview:
ABI:
The abi-compliance checker reports 100% compatibility in this release,
so the SONAME is maintained at 0.7.
Validating ABI compatibility between v0.7.0 and v0.7.1
Preparing, please wait ...
Comparing ABIs ...
Comparing APIs ...
Creating compatibility report ...
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
bugs:
- libcamera: converter: converter_dw100_vertexmap: Fix dewarp parameter p2 handling
- Fixes: 1784e08be3 ("libcamera: dw100_vertexmap: Implement parametric dewarping")
- py: Disable `-Winvalid-offsetof`
- Link: https://github.com/pybind/pybind11/pull/5824
- libcamera: software_isp: Set initial values of DebayerParams
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/311
- py: Fix include order
- Link: https://github.com/python/cpython/issues/61322
- ipa: simple: Fix `again10` value with sensor helper
- Fixes: 950ca85e8a ("ipa: software_isp: AGC: Do not lower gain below 1.0")
- apps: qcam: Fix clang build
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/315
- apps: qcam: Show `QImageWriter` errors
- Link: https://gitlab.freedesktop.org/camera/libcamera/-/issues/313
- gstreamer: Add `-Wno-volatile` for GCC
- Link: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719
- treewide: Use character literal instead of string in some cases
- Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329
- Documentation: Enable treeview generation for doxygen < 1.13.0
- Fixes: 42d914f20c ("Documentation: Enable doxygen-awesome-css")
- gstreamer: Add sensor-config property
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/300
- utils: update-kernel-headers: Fix destination path
- Fixes: ee8f88fc64 ("include: linux: Add v4l2-isp.h")
- libcamera: egl: Remove `eGLImage::image_`
- Fixes: f520b29fe9 ("libcamera: software_isp: debayer_egl: Add an eGL Debayer class")
- libcamera: pipeline: rkisp1: Fix buffer queue memleaks
- Fixes: c8f63760e5 ("pipeline: rkisp1: Support raw Bayer capture at runtime")
- ipa: rpi: awb_nn: Rename YamlObject to ValueNode
- Fixes: 554c5c7fa1 ("libcamera: Rename YamlObject to ValueNode")
And the following updates have been made in this release, grouped by category:
core:
- libcamera: base: Add missing `private.h` includes
- meson: Add `libdw` option to control libdw dependency
- libcamera: converter: converter_dw100_vertexmap: Fix dewarp parameter p2 handling
- libcamera: controls: Define a new core Hue control
- libcamera: Replace iterators with structured bindings
- libcamera: Replace iterators with range-based for loops
- libcamera: Use `it` variable name for iterators only
- libcamera: Standardize on 'const auto'
- libcamera: rpi: Make the controller min frame duration configurable
- utils: Add missing SPDX headers to scripts
- meson: Ignore `Wredundant-move` with GCC 11 and above
- libcamera: base: log: Ignore deprecations
- treewide: Use character literal instead of string in some cases
- meson: Switch to C++20
- meson: Add options to control drm, sdl2, jpeg dependencies of `cam`
- meson: Add `apps-output-dng` option to control libtiff dependency
- meson: Drop unnecessary egl, gles feature defines
- meson: Add `egl.cpp` to sources alongside `debayer_egl.cpp`
- meson: Simplify condition
- meson: Remove `gles_headless_enabled`
- meson: Use dependency object when checking for headers
- meson: Move egl related dependencies to `software_isp` subdir
- meson: Guard softisp gpu acceleration with feature option: softisp-gpu
- utils: raspberrypi: Remove Raspberry Pi CTT from the source tree
- utils: raspberrypi: Add a README.md to the old RPi CTT directory
- libcamera: Make converter/softISP configure()'s outputCfgs argument really const
- utils: Introduce libcamera-bug-report
- libcamera: properties: Add a pipeline handler name property
- libcamera: camera: Report the pipeline handler name
- subprojects: Add nlohmann_json to .gitignore
- reuse: Convert to REUSE.toml
- reuse: Update file paths in REUSE.toml
- reuse: Drop unnecessary entry from REUSE.toml
- reuse: Add missing files to REUSE.toml
- libcamera: Add missing SPDX headers
- libcamera: rpi: Add missing SPDX headers
- include: linux: Convert drm_fourcc.h to use SPDX
- meson: Print soft ISP boolean options as YES/NO
- meson: Print missing application options in summary
- utils: update-kernel-headers: Fix destination path
- meson: Use <version> header for C++ library version check
- libcamera: egl: Remove `eGLImage::image_`
- utils: checkstyle: Add license commit checker
- libcamera: Drop unneeded usage of this pointer
- libcamera: Replace plain pointers with std::unique<>
- libcamera: pipeline_handler: Add createIPA() function
- libcamera: camera_manager: Move IPAManager creation to start() time
- libcamera: utils: Add overloaded visitor helpers
- libcamera: yaml_parser: Use std::make_unique<>
- libcamera: yaml_parser: Rename Container to ValueContainer
- libcamera: yaml_parser: Rename Getter to Accessor
- libcamera: yaml_parser: Replace getList() with get() specializations
- libcamera: yaml_parser: Add function to set a YamlObject value
- libcamera: yaml_parser: Add functions to add children
- libcamera: yaml_parser: Un-friend YamlParserContext from YamlObject
- libcamera: yaml_parser: Move Size handling to geometry.cpp
- libcamera: yaml_parser: Drop unneeded \fn Doxygen commands
- libcamera: yaml_parser: Split YamlObject from YamlParser
- libcamera: yaml_object: Miscellaneous documentation improvements
- libcamera: Rename YamlObject to ValueNode
- libcamera: value_node: Add constructor with value
- libcamera: value_node: Rework templates to prepare for mutable views
- libcamera: value_node: Add mutable adapters
- libcamera: value_node: Add mutable children accessors
- libcamera: value_node: Support adding nested children in one operation
- libcamera: value_node: Support looking up descendant node by path
- libcamera: value_node: Add functions to erase child nodes
- libcamera: Pass CameraManager around instead of GlobalConfiguration
- libcamera: global_configuration: Reorder functions
- libcamera: global_configuration: Add missing include and comment
- libcamera: global_configuration: Rename yamlConfiguration_
- libcamera: global_configuration: Rename Configuration to Option
- libcamera: global_configuration: Drop Option type
- libcamera: global_configuration: Populate empty configuration
- libcamera: global_configuration: Override options with environment variables
ipa:
- libcamera: ipa: simple: Fix multiplication order in Awb
- ipa: rkisp1: Fix awb algorithm brief
- ipa: simple: Remove duplicate header inclusion
- ipa: libipa: Provide a Quantized data type support
- ipa: libipa: fixedpoint: Fix unsigned usage
- ipa: libipa: Provide fixed point quantized traits
- ipa: rkisp1: cproc: Convert to use Quantized types
- ipa: rkisp1: cproc: Report metadata
- ipa: rkisp1: cproc: Provide a Hue control
- ipa: rkisp1: ccm: Use Q<4, 7> format directly
- ipa: mali-c55: Reduce AWB calculations to float precision
- ipa: mali-c55: Convert AWB to UQ<4, 8> usage
- ipa: mali-c55: agc: Quantise the ISP Digital Gain
- ipa: libipa: fixedpoint: Move float conversion inline
- ipa: rpi: awb_nn: Remove unused constexpr variable
- ipa: simple: Fix `again10` value with sensor helper
- ipa: libipa: quantized: Enable `constexpr` operation
- ipa: rpi: Fix gamma lookup table generation for PiSP platform
- utils: ipc: extract-docs: Work around reuse tool problem
- ipa: rpi: awb_nn: Rename YamlObject to ValueNode
pipeline:
- libcamera: software_isp: debayer: Take `DebayerParams` by ref
- libcamera: software_isp: Remove redundant include of time.h
- libcamera: software_isp: Fix LIBCAMERA_SOFTISP_MODE log print
- libcamera: software_isp: debayer_egl: Remove `frameSize()`
- libcamera: software_isp: Set initial values of DebayerParams
- libcamera: software_isp: Convert TODO list to markdown
- libcamera: software_isp: Move GPU TODO items to TODO.md
- libcamera: software_isp: debayer: Add missing `override`
- libcamera: software_isp: debayer_egl: Remove unnecessary declarations
- libcamera: pipeline: rkisp1: Fix buffer queue memleaks
- libcamera: mali-c55: Add RZG2LCRU class
- libcamera: mali-c55: Split TPG and Inline camera handling
- libcamera: mali-c55: Register memory input camera
- libcamera: mali-c55: Configure camera in memory-to-memory
- libcamera: mali-c55: Do not rely on bufferCount
- libcamera: mali-c55: Implement capture for memory-to-memory
- libcamera: mali-c55: Fix sensor size computation
test:
- test: Remove uses of `O_TMPFILE`
- test: libipa: Add tests for Quantized types
- test: libipa: Provide FixedPoint Quantized tests
- test: libipa: Remove legacy fixed point conversion test
- test: ipa: ipa_interface: Use IPAManager::createIPA()
- test: ipa: ipa_interface: Replace FIFO with pipe
- test: Add ValueNode unit test
- test: yaml-parser: Simplify test
- test: yaml-parser: Standardize on explicitly qualifying std namespace
- test: yaml-parser: Fix typos in error messages
- test: yaml-parser: Replace "object" with "node"
softisp:
- software_isp: benchmark: Add missing _ postfix to measure data member
- software_isp: benchmark: Print what is being benchmarked
- software_isp: swstats_cpu: Prepare for multi-threading support
- software_isp: debayer_cpu: Add DebayerCpuThread class
- software_isp: debayer_cpu: Add multi-threading support
- software_isp: Log input config from configure()
apps:
- android: camera_stream: Include <poll.h> instead of <sys/poll.h>
- py: Disable `-Winvalid-offsetof`
- py: Fix include order
- apps: qcam: Fix clang build
- apps: qcam: Show `QImageWriter` errors
- gstreamer: Add `-Wno-volatile` for GCC
- cam: Add option to report libcamera version
- gstreamer: Add sensor-config property
documentation:
- Documentation/runtime_configuration: Add missing software_isp.mode doc
- Documentation: Enable treeview generation for doxygen < 1.13.0
- Documentation: Update to C++20
- Documentation: Rename runtime configuration title
tuning:
- tuning: Handle macbeth_ref.pgm license through REUSE.toml
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The recently added application options (DNG output support, KMS and SDL2
outputs for cam, and JPEG support for cam) are not printed in the
summary. This makes it more difficult to quickly assess the
configuration when those options are set to the 'auto' value. Add them
to the summary, and move all application configuration options to a
dedicated section of the summary to improve readability.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
In C++20 mode, object slicing in a return statement triggers automatic move
since GCC 11, and using `std::move()` emits `-Wredundant-move` in those
same GCC versions. So disable the warning in those as well.
This is relevant for `valueOrTuple()` in `py_helpers.cpp`, which
returns a `py::tuple` as `py::object`.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This release brings 158 commits with substantial development on the SoftISP
components. This brings in GPU acceleration, allowing us to get higher
throughput for cameras using this pipeline. Further development to improve the
image quality is ongoing now that we can perform more processing in realtime.
The simple pipeline handler now supports exposing the Raw streams directly
allowing us to enable the SoftISP by default without removing access to the
camera formats.
Kernel headers have been updated to v6.18, supporting the new V4L2 ISP kernel
interface which allows us to continue improvements to hardware ISP pipelines as
we add new features.
Logging has been improved to better detect when to enable or disable color
output and can be controlled through the environment variable
LIBCAMERA_LOG_COLOR.
A new control is added for LensShadingCorrectionEnable to allow runtime control
over the LSC components where supported.
The gstreamer pipeline now has raw support added to the libcamerasrc
stream-role property allowing raw streams to be configured and accessed.
An exciting new AWB algorithm using Neural Networks, has been added to the
Raspberry Pi IPA following extensive development and training performed by the
Raspberry Pi Camera Team.
And finally, the Documentation now includes a support matrix which will help
identify the current support and enablement for platforms and sensors.
Contributors:
36 Bryan O'Donoghue <bryan.odonoghue@linaro.org>
26 Milan Zamazal <mzamazal@redhat.com>
23 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
20 Jacopo Mondi <jacopo.mondi@ideasonboard.com>
15 Stefan Klug <stefan.klug@ideasonboard.com>
8 Robert Mader <robert.mader@collabora.com>
5 Hans de Goede <hdegoede@redhat.com>
4 Daniel Scally <dan.scally@ideasonboard.com>
4 Peter Bailey <peter.bailey@raspberrypi.com>
3 Naushir Patuck <naush@raspberrypi.com>
2 Andrei Gansari <andrei.gansari@nxp.com>
2 Hans de Goede <johannes.goede@oss.qualcomm.com>
2 Jai Luthra <jai.luthra@ideasonboard.com>
2 Kieran Bingham <kieran.bingham@ideasonboard.com>
1 Julien Vuillaumier <julien.vuillaumier@nxp.com>
1 Khem Raj <raj.khem@gmail.com>
1 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
1 Michael Olbrich <m.olbrich@pengutronix.de>
1 Paul Elder <paul.elder@ideasonboard.com>
1 Vasiliy Doylov <nekocwd@mainlining.org>
158 commits, 170 files changed, 7410 insertions(+), 2325 deletions(-)
Integration overview:
ABI:
The abi-compliance checker reports 100% compatibility in this release. But it's
a complete lie... so we're moving to v0.7.0 and increasing the SONAME for this
release.
$ ./utils/abi-compat.sh
Validating ABI compatibility between v0.6.0 and v0.7.0
Preparing, please wait ...
Comparing ABIs ...
Comparing APIs ...
Creating compatibility report ...
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 3
Total source compatibility problems: 0, warnings: 0
Report: compat_reports/libcamera/v0.6.0_to_v0.7.0/compat_report.html
The warnings reported are diagnosed as low severity but relate to a change of
the structure size of the public API Request object, which will require a
recompile of any users.
bugs:
- libcamera: simple: Move colour space logging after adjustment
- Fixes: 5a33bc10e9 ("libcamera: software_isp: Assign colour spaces in configurations")
- utils: gen-shader-headers: Fix subproject build
- Fixes: 19371dee41 ("utils: gen-shader-headers: Add a utility to generate headers from shaders")
- ipa: simple: awb: Fix ColourGains reported
- Fixes: a0b97475b1 ("ipa: simple: Report the ColourGains in metadata")
- apps: cam: Do not override Request::controls()
- Fixes: 568865a6c1 ("cam: Use script parser to set controls")
- gstreamer: Be prepared when queueing request
- Fixes: 06bd05bece ("gstreamer: Use dedicated lock for request queues")
- v4l2: v4l2_camera_proxy: Fix for getting default FrameDurationLimits
- Fixes: 4e9be7d11b ("ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls")
- ipa: mali-c55: Retain Camera::controls() after ipa->configure()
- Fixes: fe989ee514 ("ipa: mali-c55: Add Mali-C55 ISP IPA module")
- ipa: ipu3: Retain Camera::controls() after ipa->configure()
- Fixes: 87353f2bba ("ipa: ipu3: Derive ipu3::algorithms::Agc from AgcMeanLuminance")
- libcamera: v4l2_subdevice: Remove unnecessary variable
- Fixes: 5d2aad02e8 ("libcamera: add model() for retrieving model name in V4L2Subdevice")
- libcamera: simple: Fix black level offsets in AWB
- Fixes: 4e13c6f55b ("Honor black level in AWB")
- apps: qcam: Disable -Wsfinae-incomplete
- Link: https://qt-project.atlassian.net/browse/QTBUG-143470
- libcamera: base: utils: Fix namespace of `operator<<` for `Duration`
- Fixes: 5055ca747c ("libcamera: utils: Add helper class for std::chrono::duration")
core:
- libcamera: media_pipeline: Add accessor for MediaPipeline list of entities
- libcamera: controls: Small style fixes
- libcamera: base: Wrap <regex.h>
- libcamera: device_enumerator: Support regex to match entity names
- libcamera: media_device: Get entity by regexp
- libcamera: V4L2Subdevice: Get device by regexp
- utils: gen-shader-headers: Add a utility to generate headers from shaders
- meson: Automatically generate glsl_shaders.h from specified shader programs
- include: linux: drm_fourcc.h: Update to v6.18
- include: linux: intel-ipu3.h: Update to v6.18
- include: linux: media-bus-format.h: Update to v6.18
- include: linux: v4l2-controls.h: Update to v6.18
- include: linux: videodev2.h: Update to v6.18
- include: linux: README: Update to Linux v6.18
- utils: gen-shader-headers: Fix subproject build
- libcamera: device_enumerator_udev: Disable copy/move
- libcamera: device_enumerator_udev: Handle duplicate devices
- include: linux: Add stddef.h
- include: linux: Add v4l2-isp.h
- libcamera: request: Create control list with Camera info map
- libcamera: request: Move metadata_ to Private
- libcamera: request: Make metadata_ a class instance
- libcamera: request: Make controls_ a class instance
- libcamera: camera: Ensure a request's controls are valid
- libcamera: camera_manager: CameraManager::version(): Add `threadsafe` ref
- libcamera: controls: Simplify SFINAE template parameter
- libcamera: base: log: Add `LIBCAMERA_LOG_COLOR` env var
- libcamera: control_serializer: Remove unnecessary allocation
- libcamera: base: event_dispatcher_poll: Dispatch `POLLPRI` first
- meson: Do not force libc++ when using clang
- treewide: Remove `libcamera::LOG(...)` occurrences
- libcamera: base: log: Do not instantiate disabled `LogMessage`s
- libcamera: base: log: Do not check severity before printing
- libcamera: base: log: Remove `LogInvalid` check
- libcamera: base: log: Inline `LOG()` into `ASSERT()`
- libcamera: base: utils: join(): Don't use `const_iterator` directly
- libcamera: v4l2_subdevice: Remove unnecessary variable
- libcamera: v4l2_subdevice: Avoid reconstructing the `std::regex` object
- libcamera: v4l2_subdevice: Avoid unnecessary copy
- libcamera: control_ids: Introduce LensShadingCorrectionEnable
- libcamera: yaml_parser: Fix uninitialized variable warning
- libcamera: base: utils: Simplify `operator<<` for `Duration`
- libcamera: base: utils: Fix namespace of `operator<<` for `Duration`
pipeline:
- pipeline: imx8-isi: Integrating MediaPipeline class
- libcamera: simple: Move colour space logging after adjustment
- libcamera: simple: Exclude raw configurations from output conversions
- libcamera: simple: Handle processed and raw formats separately
- libcamera: simple: Validate raw stream configurations
- libcamera: simple: Don't enforce conversion with an added raw stream
- libcamera: simple: Set the number of software ISP streams to 2
- libcamera: simple: Require metadata only when software ISP is used
- libcamera: simple: Make raw streams working
- pipeline: rpi: Rename Stream::prepareBuffers to Stream::allocateBuffers
- pipeline: rpi: Rework internal buffer allocations
- libcamera: simple: Enable SoftISP for imx7-csi
- libcamera: pipeline: virtual: Don't use span iterator as pointer
- libcamera: simple: Fix black level offsets in AWB
softisp:
- libcamera: shaders: Move GL shader programs to src/libcamera/assets/shader
- libcamera: swstats_cpu: Update statsProcessFn() / processLine0() documentation
- libcamera: swstats_cpu: Drop patternSize_ documentation
- libcamera: swstats_cpu: Move header to libcamera/internal/software_isp
- libcamera: software_isp: Move benchmark code to its own class
- libcamera: swstats_cpu: Add processFrame() method
- libcamera: software_isp: Move useful items from DebayerCpu to Debayer base class
- libcamera: software_isp: Move Bayer params init from DebayerCpu to Debayer
- libcamera: software_isp: Move param select code to Debayer base class
- libcamera: software_isp: Move DMA Sync code to Debayer base class
- libcamera: software_isp: Make output DMA sync contingent
- libcamera: software_isp: Move isStandardBayerOrder to base class
- libcamera: software_isp: debayer: Introduce a start() / stop() methods to the debayer object
- libcamera: software_isp: debayer: Make the debayer_ object of type class Debayer not DebayerCpu
- libcamera: software_isp: lut: Make CCM available in debayer params
- libcamera: software_isp: blacklevel: Make black level available in debayer params
- libcamera: software_isp: lut: Make gamma from lut.cpp available in debayer params
- libcamera: software_isp: lut: Make contrast available in debayer params
- libcamera: software_isp: debayer: Latch contrastExp not contrast to debayer parameters
- libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access
- libcamera: software_isp: egl: Add a eGL base helper class
- libcamera: shaders: Rename bayer_8 to bayer_unpacked
- libcamera: shaders: Use highp not mediump for float precision
- libcamera: shaders: Extend debayer shaders to apply CCM gains
- libcamera: shaders: Extend bayer shaders to support swapping R and B on output
- libcamera: shaders: Add support for black level compensation
- libcamera: shaders: Add support for Gamma
- libcamera: shaders: Add support for contrast
- libcamera: shaders: Fix input sampling when width != stride
- libcamera: software_isp: Add member variables to track selected input/output pixelFormat
- libcamera: software_isp: Add a Size_ member variable to pass to eGL later
- libcamera: software_isp: debayer_egl: Add an eGL Debayer class
- libcamera: software_isp: debayer_cpu: Make getInputConfig and getOutputConfig static
- libcamera: software_isp: GPU support for unpacked 10/12-bit formats
- libcamera: software_isp: debayer_egl: Make DebayerEGL an environment option
- libcamera: software_isp: lut: Skip calculation lookup tables if gpuIspEnabled is true
- libcamera: software_isp: lut: Change default Gamma to 1.0/2.2
- libcamera: software_isp: Switch on default CCM at 65k
- libcamera: software_isp: debayer_egl: Make gpuisp default softisp mode
- libcamera: software_isp: Add a gpuisp todo list
- Revert "libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access"
- egl: Remove unused functions
- egl: Remove bpp variable
- egl: Remove duplicated logging of EGL version
- egl: Print GLES version
- egl: Use the Mesa surfaceless platform instead of GBM
- egl: Add workaround for Mesa <= 22.2
apps:
- gstreamer: Add raw support to libcamerasrc stream-role property
- apps: cam: Do not override Request::controls()
- apps: lc-compliance: Commit camera configuration last
- qcam: viewfinder_gl: Set no-op Bayer shader values
- gstreamer: Be prepared when queueing request
- v4l2: v4l2_camera_proxy: Fix for getting default FrameDurationLimits
- apps: qcam: Disable -Wsfinae-incomplete
ipa:
- ipa: simple: awb: Fix ColourGains reported
- ipa: rpi: remove executable bits from data files
- ipa: mali-c55: Update header file and adjust IPA
- ipa: libipa: Introduce V4L2Params
- ipa: mali-c55: Introduce MaliC55Params
- ipa: simple: fix minimal analog gain init
- ipa: simple: agc: Make sure activeState.agc expo/again are always initialized
- ipa: simple: Add a flag to indicate gpuIspEnabled
- ipa: mali-c55: Retain Camera::controls() after ipa->configure()
- ipa: ipu3: Retain Camera::controls() after ipa->configure()
- ipa: rpi: controller: awb: Separate Bayesian AWB into AwbBayes
- ipa: rpi: controller: awb: Add Neural Network AWB
- ipa: rpi: controller: Ignore algorithms that are not enabled
- ipa: rpi: pisp: vc4: Update tuning files for new AWB
- libcamera: ipa: simple: Remove an unused include from awb.cpp
- libcamera: ipa: simple: Unwrap IPAFrameContext::ccm
- libcamera: ipa: simple: Generalize tracking matrix changes
- libcamera: ipa: simple: Rename "ccm" identifiers not specific to CCM
- libcamera: ipa: simple: Introduce a general correction matrix
- libcamera: ipa: simple: Initialise the general correction matrix
- libcamera: ipa: simple: Separate saturation from CCM
- libcamera: ipa: simple: Move contrast settings to adjust.cpp
- libcamera: ipa: simple: Make gamma adjustable
- libcamera: ipa: simple: Apply gain matrix in awb
- libcamera: ipa: simple: Use float type for adjustment controls
- libcamera: ipa: simple: Use symbolic constants for adjust defaults
- libcamera: ipa: simple: Set contrast metadata unconditionally
- libcamera: ipa: simple: Remove Lut algorithm
- libcamera: ipa: simple: Disable Ccm algorithm by default again
- ipa: rkisp1: lsc: Drop unused member variable
- ipa: rkisp1: lsc: Drop unused function declaration
- ipa: rkisp1: lsc: Replace assert with ASSERT
- ipa: rkisp1: lsc: Rename res to positions
- ipa: rkisp1: lsc: Rename res to ret
- ipa: rkisp1: lsc: Rename res to samples
- ipa: rksip1: lsc: Move function definitions out of class
- ipa: rkisp1: lsc: Move local types into anonymous namespace
- ipa: rkisp1: lsc: Handle quantization locally
- ipa: libipa: interpolator: Drop key quantization
- ipa: rkisp1: lsc: Pass sampling positions into samplePolynomial
- ipa: rkisp1: lsc: Pass crop rectangle as parameter
- ipa: rkisp1: lsc: Resample polynomial lens shading tables at configure time
- ipa: rkisp1: Implement LensShadingCorrectionEnable control
- ipa: rpi: Fix printing of `utils::Duration`
documentation:
- Documentation: Add ISP feature support matrix
- Documentation: Add camera sensor support table
- Documentation: guides: pipeline-handler: Refresh
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Currently the meson scripts force the use of libc++ when using clang
as the compiler. This behaviour cannot be overridden by the user, and
it is suboptimal as it means that a clang build cannot reliably use
system qt, gtest, etc since those might use libstdc++.
To fix that, simply do not force the use of any particular standard
library, and detect the currently used one based on predefined macros.
This is exactly what meson does internally, although the result is
not readily available for meson scripts[0][1]; so the test needs
to be largely replicated.
[0]: 675b47b069
[1]: https://stackoverflow.com/a/31658120
Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/226
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The abi-compliance checker reports there are both ABI and API changes in this
release:
Binary compatibility: 99.3%
Source compatibility: 98.6%
Total binary compatibility problems: 4, warnings: 1
Total source compatibility problems: 18, warnings: 5
These have been planned to batch together a lot of recent development to
improve the public facing API, which has extended the previous merge window on
this occasion.
A full and detailed ABI report for those interested can always be generated
between any two versions with the internal tooling:
"./utils/abi-compat.sh v0.5.2 v0.6.0"
Integration Overview:
With 211 commits and a longer merge window, this is quite a substantial
release.
Key highlights include a new global configuration file system which will
replace or extend the current use of environment variables to configure runtime
behaviours.
The core V4L2 classes can now support the V4L2 Request API - which in turn has
brought in huge developments for the i.MX8MP Dewarper support allowing full
resize, scale, rotate and crop capabilities on top of also performing lens
dewarping.
The SoftISP continues to develop, and specifically the IPU7 has been added as a
supported configuration to the pipeline.
New tuning files have been added for Raspberry Pi platforms, improving support
for the Sony IMX335, IMX415, IMX462, and ST VD55G1 image sensors, and Decompand
support has been added for the Raspberry Pi 5.
At the core, we now require Meson 1.0.1, and various improvements have been
made for thrad handling, improving synchronisation and event dispatch, as well
as fixing the serialisation operations for isolated IPA modules.
In the applications components, there are fixes to cam adding more output
formats and qcam now behaves more consistently when no camera is selected. The
python bindings have received fixes for paths from meson, and the
FrameBuffer::planes wrapper.
On the Documentation side, there's a new theme refresh and clearer separation
between the internal and public API, and fixes to the contributing guidelines.
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
- libcamera: base: semaphore: Do not unlock prematurely
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=225
- apps: cam: Do not overwrite name when adding camera model
- Fixes: aab49f903e ("cam: Do not assume Location is available")
- Documentation: Fix documentation generation when subproject
- Fixes: 0382d215db ("Documentation: Use Sphinx doxylink to generate links to doxygen")
- apps: qcam: Do nothing if no camera is selected
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=177
- utils: codegen: gen-formats.py: Fix big endian formats
- Fixes: 7c496f1c54 ("utils: gen-formats: Support big-endian DRM formats")
- pycamera: Fix FrameBuffer::planes wrapper
- Fixes: b8d332cdcc ("libcamera: framebuffer: Replace vector with span in constructor")
- libipa: agc_mean_luminance: Fix constraint logging
- Fixes: 42e18c96bc ("libipa: agc_mean_luminance: Add debug logging")
- libcamera: software_isp: Pass correct y-coordinate to stats
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=280
- libcamera: controls: Expose string controls as `std::string_view`
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=256
- pipeline: simple: Consider output sizes when choosing pipe config
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/236
- ipa: rpi: vd56g3: Fix frameIntegrationDiff value
- Reported-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
- libcamera: rkisp1: Mark VBLANK as priority
- Fixes: f72c76eb6e ("rkisp1: Honor the FrameDurationLimits control")
- libcamera: base: thread: Use `pthread_self()` when setting name
- Fixes: 559128b1f1 ("Thread: Add name parameter")
- pipeline: imx8-isi: Delay ISI routes config to acquire() time
- Fixes: 92df79112f ("pipeline: imx8-isi: Add multicamera support")
- pipeline: simple: Reduce warning of unknown pixel formats
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/291
- libcamera: pipeline_handler: Fix requestComplete on waiting requests on stop
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/281
- libcamera: software_isp: Assign colour spaces in configurations
- Closes: https://gitlab.freedesktop.org/camera/libcamera/-/issues/294
- libipa: exposure_mode_helper: Set quantizationGain in absence of a sensor helper
- Fixes: f077c58e08 ("libipa: exposure_mode_helper: Take exposure/gain quantization into account")
- ipa: libipa: agc_mean_luminance: Fix yTarget handling in constraints
- Fixes: 24247a12c7 ("ipa: libipa: Add AgcMeanLuminance base class")
- libcamera: control_serializer: Add array info to serialized ControlValue
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=285
And the following updates have been made in this release, grouped by category:
core:
- libcamera: converter_v4l2_m2m: Add missing `<set>` include
- treewide: Remove top-level `const` from return types
- libcamera: camera_sensor: getControls(): Use span
- libcamera: camera_sensor: getFormat(): Use span
- libcamera: ipa_proxy: Log configuration file path
- libcamera: base: thread: eventDispatcher(): Not thread safe
- libcamera: base: semaphore: Do not unlock prematurely
- meson: Bump minimum version to v1.0.1
- meson: Use dependency('dl')
- libcamera: v4l2_videodevice: Avoid repeated calls to FrameBuffer::planes()
- meson: Check for Python modules manually
- libcamera: sensor: imx462: Add sensor delays to CameraSensorProperties
- libcamera: clock_recovery: Use nanoseconds in addSample()
- utils: Add unary negation operation to Duration
- utils: codegen: ipc: Put default values in declaration
- utils: codegen: ipc: Generate templated constructor
- utils: codegen: gen-formats.py: Use jinja
- utils: codegen: gen-formats.py: Fix big endian formats
- libcamera: framebuffer: Replace vector with span in constructor
- libcamera: request: addBuffer(): Do not destroy fence on failure
- libcamera: camera_sensor_properties: Add vd55g1 camera sensor
- include: linux: Partially update linux headers from v6.16-rc1-310-gd968e50b5c26
- config: Introduce global runtime configuration
- libcamera: camera_manager: Construct GlobalConfiguration instance
- config: Add configuration retrieval helpers
- camera_manager: Look up pipelines match list in configuration file
- config: Check configuration file version
- meson: Add option to disable libunwind integration
- libcamera: base: thread: Make `removeMessages()` public
- utils: codegen: ipc: Split proxy types
- libcamera: controls: Expose string controls as `std::string_view`
- subprojects: libpisp: Update to v1.3.0
- libcamera: request: Clarify ReuseBuffers flag usage with fences
- libcamera: base: utils: Simplify `enumerate()`
- config: Fix doxygen 1.15.0 errors
- libcamera: base: {unique,shared}_fd: Warn if closing fails
- libcamera: base: utils: Simplify hex adaptor
- libcamera: base: thread: Use `std::unique_ptr` instead of raw pointer
- Thread: Add name parameter
- libcamera: base: thread: Use `pthread_self()` when setting name
- utils: checkstyle.py: Accept `Closes` commit trailer
- libcamera: pipeline_handler: Add accessor for useCount_
- subprojects: libyuv: Bump to version 1922
- treewide: Use `argparse.FileType` in more places
- libcamera: pipeline_handler: Fix requestComplete on waiting requests on stop
- libcamera: base: thread: Use `acquire` memo. when reading event dispatcher
- libcamera: request: Store fence `EventNotifier` directly
- libcamera: ipa_data_serializer: Add specialization for enums
- libcamera: simple: Detect Bayer pattern change during configure()
- libcamera: converter: Utilise shared MediaDevice pointers
- libcamera: Add support for V4L2 requests
- libcamera: converter: Add V4L2 request support
- libcamera: converter_v4l2_m2m: Add suport for V4L2 requests
- libcamera: converter_v4l2_m2m: Always set stride
- include: linux: Update headers for Dw100 dewarper engine
- libcamera: converter_v4l2_m2m: Add helper to apply controls
- libcamera: converter_v4l2_m2m: Add debug logging for formats
- libcamera: converter: Add dw100 vertex map class
- libcamera: converter: Add dw100 converter module
- libcamera: internal: camera_sensor: Add accessor for mountingOrientation_
- libcamera: Add transpose() function to size
- libcamera: dw100_vertexmap: Implement parametric dewarping
- libcamera: Add and implement LensDewarpEnable control
- libcamera: control_serializer: Add array info to serialized ControlValue
- Revert "controls: Add boolean constructors for ControlInfo"
pipeline:
- pipeline: simple: Improve debug log in validate()
- libcamera: pipeline: Avoid unnecessary indirection in frame info map
- pipeline: ipu3: Drop unneeded forward declarations
- pipeline: rkisp1: Replace error handling gotos with utils::exit_scope
- pipeline: rpi: Use structured bindings in range-based for loop
- pipeline: imx8-isi: Fix crossbar's sink pad computation
- pipeline: simple: Enable simple pipelinehandler with SoftISP on Intel IPU7
- pipelines: Use lambda functions to factor out buffer mapping code
- pipeline: rkisp1: Add error log when parameter queuing fails
- pipeline: rkisp1: Query kernel for available params blocks
- rkisp1: agc: Agc add yTarget to frame context
- pipeline: simple: Allow enabling software ISP via config file
- libcamera: software_isp: Make input buffer copying configurable
- libcamera: software_isp: Make measurement configurable
- libcamera: pipeline: virtual: Move image generation to separate thread
- libcamera: software_isp: Add valid flag to struct SwIspStats
- libcamera: software_isp: Run sw-statistics once every 4th frame
- libcamera: software_isp: Fix width adjustment in SwStatsCpu::setWindow
- libcamera: software_isp: Clarify SwStatsCpu::setWindow use
- libcamera: software_isp: Pass correct y-coordinate to stats
- pipeline: simple: Initialize maxQueuedRequestsDevice to 4
- pipeline: simple: Increase internal buffers for software ISP to 4
- pipeline: simple: Allow buffer counts from 1 to 32
- libcamera: software_isp: Clear pending async work
- pipeline: simple: Avoid overusage of auto variables
- libcamera: software_isp: Apply CCM swap also on green
- pipeline: simple: Consider output sizes when choosing pipe config
- libcamera: rkisp1: Mark VBLANK as priority
- pipeline: imx8-isi: Delay ISI routes config to acquire() time
- libcamera: software_isp: Fix gamma table when CCM is used
- pipeline: simple: Reduce warning of unknown pixel formats
- libcamera: pipeline: uvcvideo: Reject sensor configuration
- libcamera: software_isp: Assign colour spaces in configurations
- pipeline: virtual: Provide and validate colorspace
- libcamera: pipeline: Utilise shared MediaDevice pointers
- libcamera: rkisp1: Properly cancel buffers in dewarp case
- libcamera: rkisp1: Move useDewarper_ flag into RkISP1CameraData
- libcamera: rkisp1: Scale down in dewarper instead of resizer
- libcamera: rkisp1: Allow upscaling when the dewarper is present
- pipeline: rkisp1: Fix number of buffers imported into the dewarper
- libcamera: rkisp1: Use the dw100 converter module instead of the generic v4l2 converter
- pipeline: rksip1: Move isRaw up in scope
- pipeline: rkisp1: Drop rawFormat variable
- pipeline: rkisp1: Enable the dewarper based on the tuning file
- libcamera: rkisp1: Handle requested orientation using dewarper
- pipeline: rkisp1: Load dewarp parameters from tuning file
apps:
- apps: common: options: Avoid copying in range based for loop
- apps: cam: Do not overwrite name when adding camera model
- apps: cam: drm: Drop unneeded local variable
- py: libcamera: Improve python binding installation
- py: libcamera: Get dependency from meson python module unconditionally
- py: libcamera: Always use install path from meson python module
- apps: qcam: Do nothing if no camera is selected
- apps: cam: Support PPM output for other RGB formats
- pycamera: Fix FrameBuffer::planes wrapper
- apps: cam: Use signalfd
- gstreamer: Update the TODO list
- android: camera_hal_manager: Remove `cameraLocation()`
- gstreamer: Associate libcamera::Stream with GstPad
- gstreamer: Improve logging for buffer pool activation
- gstreamer: Track RequestWrap's GstBuffer using GstPad
- py: gen-py-formats.py: Open input file in binary mode
- apps: cam: sdl_texture: Support NV21
documentation:
- Documentation: Fix documentation generation when subproject
- Documentation: Use python3 directly to check for doxylink version
- Documentation: Use standard ordering for Doxyfile variables
- Documentation: Add doxygen-awesome-css
- Documentation: Enable doxygen-awesome-css
- Documentation: Use the sphinx book theme
- Documentation: Add api-html/ and internal-api-html/ to docs sources
- Documentation: Reorganize toctree
- Documentation: Improve Sphinx and Doxygen integration
- Documentation: Drop unnecessary documentation-contents.rst
- Documentation: mainpage: Make it easier to distinguish public and internal API
- Documentation: Rename api to public-api and drop -html suffix
- Documentation: Add global configuration file documentation
- Documentation: Fix grammar and typo in meson.build comment
- Documentation: contributing: Provide a reference to Matrix
- Documentation: contributing: Update issue tracker
- Documentation: contributing: Update Source references
ipa:
- ipa: rpi: Add Arducam B0568 IMX335 tuning files
- ipa: rpi: Add Arducam B0569 IMX415 tuning files
- ipa: rpi:: denoise: Implement TDN back-off for CDN deviation
- ipa: rpi: pisp: data: Improve noise and detail tuning
- ipa: rpi: pisp: data: Update all non-official camera tuning files
- ipa: rpi: vc4: Minor tuning changes
- ipa: rpi: sdn: Remove legacy denoise warning
- ipa: rpi: imx462: Add official RPi tuning for IMX462
- ipa: rpi: ccm: Implement "manual" CCM mode
- ipa: rpi: Add vd55g1 support for rpi
- ipa: rpi: Add vd55g1 tuning files for rpi
- libcamera: libipa: Add vd55g1 support for libipa
- libcamera: libipa: camera_sensor: Add Himax HM1246 sensor properties
- ipa: rkisp1: Add basic compression algorithm
- libipa: camera_sensor_helper: Add quantizeGain() function
- libipa: exposure_mode_helper: Take exposure/gain quantization into account
- libipa: exposure_mode_helper: Remove double calculation of lastStageGain
- libipa: exposure_mode_helper: Remove unnecessary clamp calls
- libipa: agc_mean_luminance: Fix constraint logging
- libipa: agc_mean_luminance: Configure the exposure mode helpers
- libipa: exposure_mode_helper: Calculate quantization gain in splitExposure()
- ipa: rkisp1: agc: Add correction for exposure quantization
- ipa: rkisp1: Switch histogram to RGB combined mode
- libipa: agc_mean_luminance: Introduce effectiveYTarget() accessor
- libipa: agc_mean_luminance: Add support for additional constraints
- ipa: rkisp1: Add WDR algorithm
- ipa: Look up IPA configurables in configuration file
- ipa: rpi: agc: Allow exposure mode to be updated in auto mode
- ipa: software_isp: Fix context_.configuration.agc.againMin init
- ipa: software_isp: AGC: Do not lower gain below 1.0
- ipa: software_isp: AGC: Raise exposure or gain not both at the same time
- ipa: software_isp: AGC: Only use integers for exposure calculations
- ipa: simple: blc: Use 16 as starting blacklevel when there is no sensor-info
- ipa: simple: awb: Avoid incorrect arithmetic in AWB
- ipa: simple: awb: Use correct type in std::accumulate
- ipa: simple: blc: Prevent division by zero in BLC
- ipa: simple: agc: Prevent division by zero in AGC
- ipa: rpi: pisp: Add decompand support using PiSP hardware block
- ipa: rpi: Add FE globals as a parameter to applyDecompand()
- ipa: rpi: pisp: Add a DecompandAlgorithm class
- ipa: rpi: pisp: Allow an initial decompand curve to be set on the FE
- ipa: meson.build: Remove duplicated variable
- ipa: rpi: Fix the set function for floating statistics regions
- ipa: rpi: lux: Handle camera mode sensitivity correctly
- ipa: rpi: pisp: Use a floating region to get whole image Y statistics
- ipa: rpi: vc4: Use a floating statistics region for a full image Y sum
- ipa: rpi: lux: Use floating statistics region to obtain the current Y value
- libipa: camera_sensor_helper: Add imx708
- ipa: rpi: vd56g3: Fix frameIntegrationDiff value
- ipa: libipa: agc_mean_luminance: Avoid unnecessary copies
- ipa: rkisp1: dpf: Enable strength after enable Dpf
- libipa: module: Allow algorithms to be disabled via the tuning file
- libipa: exposure_mode_helper: Set quantizationGain in absence of a sensor helper
- ipa: libipa: pwl: Allow to parse a plain yaml value as single point PWL
- ipa: rkisp1: lux: Properly handle frame context and active state
- ipa: libipa: agc_mean_luminance: Change luminance target to piecewise linear function
- ipa: libipa: agc_mean_luminance: Fix yTarget handling in constraints
- ipa: ipu3, mali-c55, rkisp1, rpi: Fix reporting non-scalar controls
tuning:
- utils: raspberrypi: ctt: Update noise/sharpness tuning
- utils: raspberrypi: ctt: Update vc4 tuning defaults
- tuning: rksip1: Add a static Compress entry
- tuning: rksip1: Add a static WideDynamicRange entry
test:
- test: camera: Use Request::ReuseBuffers flag
- test: utils: Add endlines
- test: utils: Validate hex sign extension
- lc-compliance: Ensure stream's colorspace is set after validate()
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The meson python module's find_installation() method conveniently allows
testing if the interpreter provides a set of modules. We use it to check
for the presence of the modules required at build time. Unfortunately,
the meson python module is not meant to access the system Python
interpreter of the build machine, but the Python environment of the host
machine.
Usage of find_installation() for this purpose is incorrect, it may find
modules in a different interpreter than the one used to run the build
scripts that use those modules. For instance, when cross-compiling
libcamera against a Buildroot environment, and pointing meson in the
cross-file to the build machine Python interpreter from Buildroot, the
find_installation() method will refer to the latter, while our code
generation scripts that use the modules will use the former.
Replace find_installation() with a manual check using python3 directly.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
The minimum version of meson currently required by libcamera, v0.63,
does not properly detect Qt6. As qcam switched from Qt5 to Qt6 a while
ago, building libcamera with meson v0.63 is currently broken.
The issue was fixed in meson v0.64. That was the last meson version
before v1.0.0. For mainly psychological reasons, and to avoid bumping
the meson version too often, go straight to v1.0.1. This will support
the following versions of popular distributions and build environments:
- Debian Bookworm and newer (v1.0.1)
- Ubuntu 24.04LTS and newer (v1.3.2)
- Buildroot 2023.08 (v1.1.1)
- Yocto Scarthgap (v1.3.1)
The previous version of Debian, Ubuntu and Yocto shipped versions of
meson older than v0.63 (v0.56.2 in Debian Bullseye, v0.61.2 in Ubuntu
22.04LTS, and v0.61.3 in Yocto Kirkstone), so the meson version bump
doesn't require a distribution upgrade. For Buildroot, moving to v1.0.1
means users on versions from 2022.08 (when not using qcam) or 2023.02 to
2023.05 will need to upgrade.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
The abi-compliance checker reports 100% compatibility in this release.
As such the SONAME is maintained at 0.5.
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
This release brings 129 commits with some substantial development on gstreamer
for this release which is nice to see.
In core we can see development that cleans up ProcessManager in a drive to
reduce singleton patterns throughout libcamera. There's a new ClockRecovery
class from Raspberry Pi which supports the new Wallclock timestamps
metadata and provides the capablity for synchronising cameras across
devices which will very exciting to see in the future.
Pipelines are now able to limit the number of requests queued into the pipeline
handler which helps prevent issues when applications desire to use a larger
request queue. This is particularly beneficial to pipewire based applications
it seems with longer processing queues.
It's now possible to check if controls exist with new macros defined for
every control to help codebases compile against multiple versions:
- LIBCAMERA_HAS_$VENDOR_VENDOR_$MODE_$NAME
And for developers we now have a b4-config file to support easily using the
tool to send patche to the mailinglist!
On the apps side, there's lots of development on Gstreamer, including fixing
bayer formats for 10/12/14/16 bit depths. Both cam and gstreamer now report the
camera properties in full with text representations of all the enum/properties.
With the IPA components, Raspberry Pi includes development and updates to
Autofocus and makes the maximum digital gain limits configurable. RKISP1 now
has ExposureValue control implemented using exposure compensation in the
agc_mean_luminance implementation. The ST vd56g3 camera sensor support is added
for both RPi and libipa platforms.
For Pipeline Handlers notable updates include the imx8-isi being fixed for
newer generation chips from NXP adding multi-camera support, and Wallclock
timestamp support added to Rapsberry Pi.
Finally, on the documentation side - a notable change is the update to use
spinhx-doxylink. This should prevent stale links being used in the
documentation pages but adds an extra tool to the dependencies for building the
documentation.
Contributors:
27 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
23 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
17 Stefan Klug <stefan.klug@ideasonboard.com>
12 David Plowman <david.plowman@raspberrypi.com>
10 Naushir Patuck <naush@raspberrypi.com>
9 Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
7 Umang Jain <uajain@igalia.com>
5 Antoine Bouyer <antoine.bouyer@nxp.com>
5 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
3 Jaslo Ziska <jaslo@ziska.de>
2 Daniel Scally <dan.scally@ideasonboard.com>
2 Kieran Bingham <kieran.bingham@ideasonboard.com>
1 Christian Rauch <Rauch.Christian@gmx.de>
1 Han-Lin Chen <hanlinchen@chromium.org>
1 Harvey Yang <chenghaoyang@chromium.org>
1 Hou Qi <qi.hou@nxp.com>
1 Milan Zamazal <mzamazal@redhat.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Paul Elder <paul.elder@ideasonboard.com>
143 files changed, 6004 insertions(+), 1620 deletions(-)
Integration overview:
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
- pipeline: imx8-isi: Cosmetic changes
- Fixes: 680cde6005 ("libcamera: imx8-isi: Split Bayer/YUV config generation")
- pipeline: imx8-isi: Fix match returned value in error case
- Fixes: 0ec982d210 ("libcamera: pipeline: Add IMX8 ISI pipeline")
- gstreamer: Replace NULL with nullptr
- Reported-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
- libcamera: base: Fix log level parsing when multiple categories are listed
- Fixes: 24c2caa1c1 ("libcamera: base: log: Use `std::string_view` to avoid some copies")
- libcamera: pipeline: uvcvideo: Silently ignore `AeEnable`
- Fixes: ffcecda4d5 ("libcamera: pipeline: uvcvideo: Report new AeEnable control as available")
- ipa: rpi: Defer initialising AF LensPosition ControlInfo and value
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=258
- subprojects: libpisp: Update to 1.2.1
- Bug: https://github.com/raspberrypi/libpisp/pull/43
- ipa: rpi: Fix bug in AfState reporting
- Fixes: ea5f451c56 ("ipa: rpi: controller: AutoFocus bidirectional scanning")
- libcamera: base: bound_method: Move return value
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=273#c1
- libcamera: camera: Fix up the AeEnable control during Camera::start()
- Fixes: 7abd413905 ("libcamera: camera: Pre-process AeEnable control")
- libcamera: Put buffer back to V4L2BufferCache when VIDIOC_QBUF fails
- Fixes: cadae67e45 ("libcamera: v4l2_videodevice: Add FrameBuffer interface")
- utils: codegen: ipc: Check `ipc_` instead of `isolate_`
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=276
- libcamera: camera: Do not call `generateConfiguration()` synchronously
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=273
- meson: Update subprojects .gitignore
- Fixes: a29c53f6a6 ("meson: Use libyaml wrap file from wrapdb")
And the following updates have been made in this release, grouped by category:
core:
- libcamera: base: log: Take `LogCategory` by reference
- libcamera: base: Fix log level parsing when multiple categories are listed
- libcamera: process: Use `pid_` member to decide if running
- libcamera: process: start(): Use span instead of vector
- libcamera: process: closeAllFdsExcept(): Take vector by value
- libcamera: process: Move `closeAllFdsExcept()`
- libcamera: process: Use `close_range()` when available
- libcamera: process: Remove `ProcessManager` singleton
- libcamera: process: Disable copy/move
- libcamera: process: Misc. cleanup around `execv()`
- libcamera: process: Return error if already running
- libcamera: process: Ensure that file descriptors are nonnegative
- libcamera: framebuffer: Add FrameMetadata::Status::FrameStartup
- libcamera: Add ClockRecovery class to generate wallclock timestamps
- libcamera: controls: Revert incorrect SPDX removal
- libcamera: controls: Remove hyphenation in control description text
- libcamera: controls: Use nanoseconds units for FrameWallClock
- libcamera: delayed_controls: Inherit from Object class
- libcamera: pipeline_handler: Move waitingRequests_ into camera class
- libcamera: pipeline_handler: Allow to limit the number of queued requests
- libcamera: base: bound_method: Move return value
- libcamera: controls: Generate macro for each control
- libcamera: camera: Fix up the AeEnable control during Camera::start()
- libcamera: Put buffer back to V4L2BufferCache when VIDIOC_QBUF fails
- libcamera: camera_manager: Log info message to report camera creation
- libcamera: v4l2_videodevice: Add color space to format string representation
- libcamera: Drop remaining file names from header comment blocks
- libcamera: control_serializer: Accept empty `ControlList`
- libcamera: camera: Do not call `generateConfiguration()` synchronously
- libcamera: utils: Add scope_exit class
- libcamera: v4l2_videodevice: Use scope_exit
- libcamera: camera_sensor_properties: Add vd56g3 camera sensor
- libcamera: base: bound_method: Forward arguments when possible
- meson: Use libyaml wrap file from wrapdb
- meson: Update subprojects .gitignore
- pipeline: v4l2_subdevice: Add color space to format string representation
- utils: gen-debug-controls: Remove line number from control description
- utils: gen-debug-controls: Fix handling of controls that appear multiple times
- utils: gen-debug-controls: Improve log output
- utils: codegen: ipc: Check `ipc_` instead of `isolate_`
- controls: Add FrameWallClock control
- controls: Add camera synchronisation controls for Raspberry Pi
- camera_sensor: Expand on computeTransform() documentation
- subprojects: libpisp: Update to 1.2.1
- V4L2VideoDevice: Call FrameBuffer::Private::cancel() in streamOff()
- camera: Fix spell error
- b4: Add .b4-config
- package: Drop Gentoo ebuild
apps:
- android: camera_device: Do not pass `nullptr` to `Request::addBuffer()`
- apps: common: image: Fix assertion
- apps: cam: Print enum string for camera properties
- apps: lc-compliance: Replace manual include guard with pragma once
- qcam: Silence false positive warnings with Qt 6.9.0 and newer
- gstreamer: Document improvements when updating minimum GStreamer version
- gstreamer: Factor out video pool creation
- gstreamer: Reduce indentation in gst_libcamera_create_video_pool()
- gstreamer: Rename variable in gst_libcamera_create_video_pool()
- gstreamer: Fix leak of GstQuery and GstBufferPool in error path
- gstreamer: Drop incorrect unref on caps
- gstreamer: Replace NULL with nullptr
- gstreamer: Fix libcamerasrc responding latency before setting caps
- gstreamer: Use std::exchange() instead of g_steal_pointer()
- gstreamer: Make format_map[] const
- gstreamer: Fix reconfiguration condition check
- gstreamer: Log and check adjusted camera configuration
- gstreamer: Enable bayer formats with 10/12/14/16 bits
- gstreamer: Split value_set_rectangle() GValue helper
- gstreamer: Move existing GValue helpers to gstreamer-utils
- gstreamer: Report camera properties as device properties
ipa:
- ipa: rpi: Replace dropFrameCount in the IPA -> PH interface
- ipa: rpi: Rename dropFrameCount_ to invalidCount_
- ipa: rpi: Initialize enum controls with a list of values
- ipa: rpi: Defer initialising AF LensPosition ControlInfo and value
- ipa: rpi: controller: Improve findPeak() function in AF algorithm
- ipa: rpi: controller: AutoFocus weighting tweak
- ipa: rpi: controller: Autofocus CAF/PDAF stability tweak
- ipa: rpi: controller: AutoFocus tweak earlyTerminationByPhase()
- ipa: rpi: controller: Autofocus to use AWB statistics; re-trigger
- ipa: rpi: controller: AutoFocus bidirectional scanning
- ipa: rpi: Update IMX708 camera tuning files for AutoFocus changes
- ipa: rpi: Fix bug in AfState reporting
- ipa: rpi: agc: Change handling of colour gains less than 1
- ipa: rpi: agc: Make the maximum digital gain configurable
- ipa: rpi: agc: Rename "analogue gain" to "gain" where appropriate
- ipa: rpi: Advance the delay context counter even when IPAs don't run
- ipa: rpi: agc: Calculate digital gain in process()
- ipa: rpi: Update digital gain handling in IPA base and derived classes
- ipa: rpi: agc: Remove digital gain from AgcPrepareStatus
- ipa: rpi: Fix static initialisation order bug in the Controller
- ipa: rpi: Add vd56g3 support for rpi
- ipa: rpi: Add vd56g3 tuning files for rpi
- ipa: rkisp1: Move Sharpness control creation to Filter algorithm
- ipa: rkisp1: agc: Implement ExposureValue control
- libipa: pwl: Improve documentation
- libipa: pwl: Fix single point Pwl
- libipa: agc_mean_luminance: Add debug logging
- libipa: agc_mean_luminance: Add exposure compensation support
- libcamera: libipa: Add vd56g3 support for libipa
pipeline:
- pipeline: ipa: rpi: Split RPiCameraData::dropFrameCount_
- pipeline: rpi: Remove disable_startup_frame_drops config option
- pipeline: rpi: Remove ispOutputCount_ and ispOutputTotal_
- pipeline: rpi: Add wallclock timestamp support
- pipeline: rpi: Fix for enumerating the media graphs
- libcamera: pipeline: rpi: Do not set timestamps to 0 if unavailable
- libcamera: pipeline: rpi: Do not clear request metadata anymore
- pipeline: imx8-isi: Cosmetic changes
- pipeline: imx8-isi: Fix match returned value in error case
- pipeline: imx8-isi: Dynamically compute crossbar subdevice's first source.
- pipeline: imx8-isi: Add constexpr for maximum pipeline and resize if needed
- pipeline: imx8-isi: Add multicamera support
- libcamera: pipeline: uvcvideo: Silently ignore `AeEnable`
- libcamera: pipeline: uvcvideo: Handle controls during startup
- pipeline: rkisp1: Limit the maximum number of buffers queued in
- pipeline: rkisp1: Properly handle the bufferCount set in the stream configuration
- libcamera: pipeline: rkisp1: Don't rely on bufferCount
- libcamera: software_isp: Remove type casts in statistics computation
- pipeline: simple: Fix matching with empty media graphs
- libcamera: mali-c55: Set bytesused appropriately
- libcamera: mali-c55: Correct expected entity function
test:
- libcamera: test: Add a failing test for the log level parser
- test: libtest: CameraTest: Set env var before CameraManager
- test: ipa: Add basic Pwl test
- test: ipa: Add failing test for single point Pwl
documentation:
- Documentation: Make `doxygen-internal` depend on public inputs
- Documentation: application: Update mediactl URL
- Documentation: Remove unneeded options from Sphinx configuration
- Documentation: Drop documentation author names
- Documentation: Use Sphinx doxylink to generate links to doxygen
- Documentation: Replace links to Doxygen documentation with doxylink
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The `ProcessManager` is a singleton class to handle `SIGCHLD` signals
and report the exit status to the particular `Process` instance.
However, having a singleton in a library is not favourable and it is
even less favourable if it installs a signal handler.
Using pidfd it is possible to avoid the need for the signal handler;
and the `Process` objects can watch their pidfd themselves, eliminating
the need for the `ProcessManager` class altogether.
`P_PIDFD` for `waitid()` was introduced in Linux 5.4, so this change
raises the minimum supported kernel version. `clone3()`, `CLONE_PIDFD`,
`pidfd_send_signal()` were all introduced earlier.
Furthermore, the call to the `unshare()` system call can be removed
as those options can be passed to `clone3()` directly.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
The abi-compliance checker reports 100% compatibility in this release.
As such the SONAME is maintained at 0.5.
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
This release brings 93 commits with a large proportion of fixes and
cleanup againt earlier releases. Improvements have been made to the
Raspberry Pi Camera Tuning Tools, and the geometry, matrix and vector
class helpers have been expanded for greater reuse throughout the
project.
Notably for packagers - IPA modules now have their own subdirectory
which should prevent undesirable surrupticious error messages that would
occur if packagers choose to install the V4L2 adaptation layer in the
same folder as the IPA modules.
The RKISP1 can now adapt to more complex input pipelines, including
FPGAs and multiplexors, which has been beneficial for users on the
i.MX8MP, and the IPA algorithms for i.MX8MP and RKISP1 continue to get
improvements.
The software ISP has a new Saturation control (available when the CCM is
enabled).
The Documentation and pipeline handler writers guide has been
re-reviewed and cleaned up.
On the application and test side, lc-compliance now includes
multi-stream tests, and cam has extended support for display formats and
now prevents issues on non-display GPUs when rendering direct to DRM.
Contributors:
36 Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
15 Stefan Klug <stefan.klug@ideasonboard.com>
5 David Plowman <david.plowman@raspberrypi.com>
5 Kieran Bingham <kieran.bingham@ideasonboard.com>
5 Laurent Pinchart <laurent.pinchart@ideasonboard.com>
4 Milan Zamazal <mzamazal@redhat.com>
4 Quentin Schulz <quentin.schulz@cherry.de>
3 Daniel Scally <dan.scally@ideasonboard.com>
3 Paul Elder <paul.elder@ideasonboard.com>
2 Hou Qi <qi.hou@nxp.com>
2 Julien Vuillaumier <julien.vuillaumier@nxp.com>
2 Naushir Patuck <naush@raspberrypi.com>
2 Niklas Söderlund <niklas.soderlund@ragnatech.se>
2 Pavel Machek <pavel@ucw.cz>
1 Benjamin Mugnier <benjamin.mugnier@foss.st.com>
1 Nícolas F. R. A. Prado <nfraprado@collabora.com>
1 Sven Püschel <s.pueschel@pengutronix.de>
108 files changed, 3359 insertions(+), 528 deletions(-)
Integration overview:
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
- meson: Do not automatically build documentation if sphinx-build-3 is found
- Fixes: aba567338b ("Documentation: Move all dependencies into features")
- Revert "libcamera: rkisp1: Eliminate hard-coded resizer limits"
- Fixes: 761545407c ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
- pipeline: rkisp1: Fix vblank delay
- Fixes: f72c76eb6e ("rkisp1: Honor the FrameDurationLimits control")
- utils: raspberrypi: ctt: Fix NaNs in lens shading tables
- Bug: https://github.com/raspberrypi/libcamera/issues/254
- utils: raspberrypi: ctt: Fix NaNs in chromatic aberration tables
- Bug: https://github.com/raspberrypi/libcamera/issues/254
- utils: raspberrypi: ctt: Fix integer division error calculating LSC cell size
- Bug: https://github.com/raspberrypi/libcamera/issues/260
- apps: qcam: Push the viewfinder role to vector
- Fixes: ee2b011b65 ("apps: cam: Try raw role if default viewfinder role fails")
- ipa: Move IPA installations to a subdir
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=268
- ipa: rkisp1: algorithms: awb: Fix wrong colour temperature reporting
- Fixes: b60bd37b1a ("ipa: rkisp1: Move calculation of RGB means into own function")
- ipa: rkisp1: ccm/lsc: Fix CCM/LSC based on manual color temperature
- Fixes: 0230880954 ("ipa: rkisp1: awb: Implement ColourTemperature control")
- libcamera: controls: Fix `ControlInfoMap::count(unsigned int)`
- Fixes: 76b9923e55 ("libcamera: controls: Avoid exception in ControlInfoMap count() and find()")
- apps: cam: capture_script: Disallow arrays of strings
- Fixes: b35f04b3c1 ("cam: capture_script: Support parsing array controls")
- libcamera: matrix: Fix compilation error in inverse() function
- Fixes: 6287ceff5a ("libcamera: matrix: Add inverse() function")
- ipa: rpi: controller: rpi: Fix colour gain typo in AGC
- Fixes: 29892f1c56 ("ipa: libipa: colour: Use the RGB class to model RGB values")
And the following updates have been made in this release, grouped by category:
core:
- meson: Make the default value of "documentation" feature explicit
- meson: Do not automatically build documentation if sphinx-build-3 is found
- libcamera: request: Avoid double map lookup
- utils: rkisp1: gen-csc-table: Support printing CCM in decimal
- libcamera: ipa_module: Avoid unnecessary copy when getting signature
- libcamera: controls: Disallow arrays of arrays
- libcamera: media_device: Add helper to return matching entities
- libcamera: internal: Add MediaPipeline helper
- libcamera: stream: Add color space to configuration string representation
- README.rst: remove unnecessary dependency for qcam
- libcamera: v4l2_videodevice: Log buffer count on allocation error
- libcamera: matrix: Replace SFINAE with static_asserts
- libcamera: matrix: Make most functions constexpr
- libcamera: matrix: Add a Span based constructor
- libcamera: vector: Add a Span based constructor
- libcamera: matrix: Add inverse() function
- libcamera: matrix: Extend multiplication operator to heterogenous types
- libcamera: vector: Extend matrix multiplication operator to heterogenous types
- libcamera: controls: Fix `ControlInfoMap::count(unsigned int)`
- utils: codegen: Make users depend on `controls.py` in meson
- libcamera: matrix: Fix compilation error in inverse() function
- libcamera: sensor: Fix the gain delay for IMX283
- treewide: Do not use `*NameValueMap` for known values
- utils: codegen: ipc: Use `any()` instead of `len([]) > 0`
- utils: codegen: ipc: Remove `namespace` argument
- utils: codegen: ipc: Add `deserializer()` function
- utils: codegen: ipc: Log error code when remote call fails
- utils: codegen: ipc: Simplify `return` statements
- libcamera: ipa_data_serializer: Remove some vector `reserve()` calls
- libcamera: mali-c55: Remove tpgCodes_
- libcamera: mali-c55: Remove tpgSizes_ member from MaliC55CameraData
- libcamera: process: Use _exit in child process
- libcamera: process: Pass stderr and reserve stdin and stdout fds
- guides: pipeline-handler: Update name of pipeline handler stop function
- libcamera: mali-c55: Fix error paths in ::init()
pipeline:
- libcamera: software_isp: Add a clarification comment to AWB
- libcamera: pipeline: uvcvideo: Expose `Gamma` control
- libcamera: software_isp: Fix CCM multiplication
- libcamera: pipeline: virtual: Fix typo in log message
- libcamera: pipeline: imx8-isi: Remove unused variable
- pipeline: rkisp1: Fix vblank delay
- libcamera: pipeline: rkisp1: Convert to use MediaPipeline
- libcamera: pipeline: uvcvideo: Report new AeEnable control as available
- ipu3: cio2: Remove unused function definition
- libcamera: software_isp: Add saturation control
- Revert "libcamera: rkisp1: Eliminate hard-coded resizer limits"
apps:
- apps: lc-compliance: Support multiple streams in helpers
- apps: lc-compliance: Add multi-stream tests
- apps: cam: capture_script: Simplify bool array parsing
- gstreamer: Fixate colorimetry field during caps negotiation
- apps: cam: Try raw role if default viewfinder role fails
- apps: qcam: Push the viewfinder role to vector
- py: Set `PYTHONPATH` in devenv
- apps: cam: sdl_texture: Take list of buffers in span
- apps: cam: sdl_texture: Drop `&rect_` from `SDL_Update{NV,}Texture()` call
- apps: cam: sdl_texture: Add `SDLTexture1Plane`
- apps: cam: sdl_sink: Support more single-plane formats
- gstreamer: Add GstVideoMeta support
- apps: cam: capture_script: Disallow arrays of strings
- apps: cam: Skip non-display GPUs
ipa:
- utils: ipc: Do not duplicate signals in proxy object
- utils: ipc: Do not define variables in signal handler up front
- ipa: rpi: common: Avoid warnings when AeEnable control is used
- ipa: rpi: awb: Remove "fast" parameter
- ipa: Move IPA installations to a subdir
- ipa: rkisp1: awb: Declare ControlInfo in AWB
- ipa: rkisp1: awb: Ignore empty AWB statistics
- ipa: rkisp1: Refactor automatic/manual structure in IPAActiveState
- ipa: rkisp1: algorithms: awb: Fix wrong colour temperature reporting
- ipa: rkisp1: ccm/lsc: Fix CCM/LSC based on manual color temperature
- ipa: rkisp1: Implement manual ColourCorrectionMatrix control
- libipa: awb: Make result of gainsFromColourTemp optional
- ipa: rkisp1: Damp color temperature regulation
- ipa: rkisp1: awb: Take the CCM into account for the AWB gains calculation
- ipa: rkisp1: awb: Avoid division by zero
- ipa: rpi: controller: rpi: Fix colour gain typo in AGC
- ipa: rpi: Add tuning for IMX283
- ipa: rpi: Prevent segfault if AGC algorithm is absent
tuning:
- utils: raspberrypi: ctt: Fix NaNs in lens shading tables
- utils: raspberrypi: ctt: Fix NaNs in chromatic aberration tables
- utils: raspberrypi: ctt: Fix integer division error calculating LSC cell size
documentation:
- Documentation: guides: pipeline-handler: Fix camera creation
- Documentation: guides: pipeline-handler: Fix property list file name
- Documentation: guides: pipeline-handler: Fix configuration creation
- Documentation: guides: pipeline-handler: Fix `Camera::create()` link
- Documentation: guides: pipeline-handler: Simplify format collection
- Documentation: guides: pipeline-handler: Query pixel formats once
- Documentation: guides: application-developer: Remove unnecessary argument
- Documentation: Fix `INCLUDE_PATH` doxygen configuration option
- doc: Mention right meson version
- doc: document libtiff dependency for cam
test:
- test: Add minimal test for Matrix
- lc-compliance: Move camera setup to CameraHolder class
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The abi-compliance-checker reports there are both ABI and API changes in this
release:
Binary compatibility: 99%
Source compatibility: 99.5%
Total binary compatibility problems: 5, warnings: 1
Total source compatibility problems: 6, warnings: 1
Substantially less than the previous release, and ultimately quite minor but
unfortunately there nonetheless and so the SONAME is updated to 0.5
accordingly. I do not anticipate anything there that cannot be solved for
applications without just a recompile. I had hoped to get a longer run for 0.4
series...
A full and detailed ABI report for those interested can always be generated
between any two versions with the internal tooling:
"./utils/abi-compat.sh v0.4.0 v0.5.0"
Integration overview:
This release brings in 201 commits with a huge list of fixes and code clean up
which I'm very happy to see, including interesting fixes to the AGC and AWB
handling in libipa.
In regards to new features, libcamera-0.5 has aptly now got the core Raspberry
Pi 5 support merged!. There are still patches that are currently maintained by
Raspberry Pi for additional features, and while the transition to upstream
API's continue, but I think we're all happy to see this support getting in
directly, and Raspberry Pi continue to lead the way in upstream camera
development. I look forward to the kernel API's for streams being fully
utilised by the PiSP platform for upstream camera metadata handling. This
upcoming work is also supported by the CameraSensor factory and CameraSensorRaw
support that is now also merged in this release.
Further more in the platform support, the software_isp continues to be
developed and is now able to measure colour temperature, which will bring in
improvements for AWB, and a CCM can be applied while peforming debayering (at a
CPU cost) which will allow us to finally apply color tuning for sensors on
devices that need to fall back to the software ISP.
New sensor support seems fairly short in this release, with the IMX415 being
the prominent addition.
In libipa, and algorithm developments, along with many fixes and improvements
there is a substantial new feature that the Baysian AWB algorithm from
Raspberry Pi can now also be used on all libipa supported IPA modules, and has
shown good impovements for the RkISP1 supported devices.
There is minimal changes to the application support side, but it is notable
that now the Y444 format has been mapped to be usable by the gstreamer src
element. lc-compliance has seen some progress which I hope will bring this to
being a more central part of the test infrastructure.
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
- DmaBufAllocator: Make DmaSyncer non-copyable
- Fixes: 39482d59fe ("DmaBufAllocator: Add Dma Buffer synchronization function & helper class")
- utils: codegen: controls.py: Fix missing direction error message
- Fixes: 39fe4ad968 ("utils: codegen: controls.py: Parse direction information")
- Thread: Fix setThreadAffinity race condition in start
- Fixes: 4d9db06d66 ("libcamera: add method to set thread affinity")
- meson: Don't override pipeline list when `auto` is selected
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=247
- DmaBufAllocator: Avoid syncing with an invalid file descriptor
- Fixes: 545046a41e ("DmaBufAllocator: Make DmaSyncer non-copyable")
- controls: Introduce AEGC-related controls
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=42
- Documentation: guides: application-developer: Fix variable shadowing
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=252
- libcamera: pipeline: virtual: Fill buffer's metadata
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=245
- ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)
- Fixes: ee918b370a ("ipa: rkisp1: agc: Initialize enum controls with a list of values")
- ipa: rpi: Apply default ControlInfo values for sensor controls
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=253
- ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo
- Fixes: bea2db5e61 ("ipa: rpi: Apply default ControlInfo values for sensor controls")
- ipa: rkisp1: algorithms: agc: Fix whitespace
- Fixes: 0e0e32b189 ("ipa: rkisp1: algorithms: agc: Check for correct stats type")
- libcamera: pipeline: Fix LIBCAMERA_<NAME>_TUNING_FILE handling
- Fixes: f5da05ed03 ("libcamera: pipeline: Move tuning file override handling to IPAProxy")
- ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode
- Fixes: 29892f1c56 ("ipa: libipa: colour: Use the RGB class to model RGB values")
- libipa: awb: Fix non-virtual destructor warning in AwbStats
- Fixes: 6f663990a0 ("libipa: Add AWB algorithm base class")
- ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit
- Fixes: f72c76eb6e ("rkisp1: Honor the FrameDurationLimits control")
- ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC
- Fixes: 34c9ab6282 ("ipa: libipa: Add ExposureModeHelper")
- libcamera: software_isp: Emit ispStatsReady only if IPA is running
- Reported-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
- libcamera: base: log: Fix uninitialized variable warning
- Fixes: 8fa119e0b5 ("libcamera: base: log: Use `std::from_chars()`")
- libcamera: media_object: Fix unnecessary copy
- Fixes: 9490c664b5 ("libcamera: Add members to MediaEntity to support ancillary entities")
- ipa: rkisp1: agc: Fix metering modes
- Fixes: 4c5152843a ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")
- libcamera: software_isp: Reset stored exposure in black level
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=259
- libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setup
- Fixes: bad8d591f8 ("libcamera: uvcvideo: Register ExposureTimeMode control")
- libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setting
- Fixes: bad8d591f8 ("libcamera: uvcvideo: Register ExposureTimeMode control")
- ipa: simple: Initialize ccmEnabled to false
- Fixes: ac30686556 ("libcamera: software_isp: Track whether CCM is enabled")
- gstreamer: Use `Control<>` objects when setting controls
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=261
- gstreamer: Restore `AeEnable` control
- Fixes: 187f2d537b ("gstreamer: Generate the new AEGC controls")
- pipeline: rpi: Fix potential empty optional read
- Fixes: 6c71ee1f15 ("pipeline: raspberrypi: Introduce PipelineHandlerBase class")
And the following updates have been made in this release, grouped by category:
core:
- libcamera: virtual: Avoid some copies
- libcamera: virtual: Query number of planes correctly
- libcamera: virtual: Speed up test pattern animation
- libcamera: camera_sensor_properties: Add delays for imx415
- include: linux: Update headers for line-based embedded data support
- include: linux: videodev2: Add generic line based pixel formats
- libcamera: v4l2_subdevice: Add new metadata formats
- libcamera: v4l2_videodevice: Update to the new kernel metadata API
- libcamera: Add CameraSensor implementation for raw V4L2 sensors
- libcamera: camera_sensor: Add support for embedded data
- libcamera: base: Remove custom __nodiscard attribute
- libcamera: Add missing <stdint.h> include to dma_buf_allocator.h
- libcamera: include: Include missing stdint.h header
- utils: codegen: controls.py: Fix missing direction error message
- meson: Convert `v4l2` into a feature option
- meson: Don't override pipeline list when `auto` is selected
- libcamera: pipeline_handler: Enable silent configuration file lookup
- libcamera: virtual: Install configuration file
- libcamera: v4l2_subdevice: Work around false positive warning
- libcamera: uvcvideo: Register ExposureTimeMode control
- libcamera: camera: Pre-process AeEnable control
- libcamera: base: object,thread: Disable copy/move
- libcamera: matrix: Add read-only accessor to internal data
- libcamera: log: Match whole category in LIBCAMERA_LOG_LEVELS
- libcamera: Copy Vector class files from libipa
- libcamera: Adapt Vector class to new location
- libcamera: request: addBuffer(): Do fence check earlier
- libcamera: Drop spurious colon after doxygen \todo directive
- meson: Enable the -Wnon-virtual-dtor compiler option
- libcamera: formatting: Avoid spaces in for loops without expression
- libcamera: base: log: Remove move constructor
- libcamera: base: log: Use `std::from_chars()`
- libcamera: base: log: Remove `LogMessage::init()`
- libcamera: base: log: Make `LogCategory::severity_` atomic
- libcamera: base: log: Use `std::string_view` to avoid some copies
- libcamera: base: log: Pass dynamic prefix through
- libcamera: base: log: Protect log categories with lock
- libcamera: base: log: Avoid manual `LogCategory` deletion
- libcamera: meson: Fix libyuv detection
- libcamera: base: thread: Support dispatching for a specific receiver
- libcamera: base: log: Fix uninitialized variable warning
- libcamera: base: signal: Drop pre-C++17 support
- meson: Add libpisp.wrap
- libcamera: media_object: Fix unnecessary copy
- libcamera: ipa_manager: Store `IPAModule`s in `std::unique_ptr`
- libcamera: base: mutex: Remove unnecessary constructors
- libcamera: media_device: Ignore `lockf()` return value
- libcamera: v4l2_videodevice: `lastUsedCounter_` need not be atomic
- libcamera: camera: Ensure correct id maps are always set
- libcamera: base: span: Explicitly default copy assignment
- libcamera: controls: Check size of enum
- libcamera: camera_manager: Do not emit signals while holding lock
- libcamera: camera_manager: Simplify camera lookup
- libcamera: camera_manager: Take camera id in `std::string_view`
- libcamera: base: object: Forward arguments when invoking
- libcamera: base: bound_method: Simplify `invokePack()`
- libcamera: v4l2_device: add frame start event helpers
- DmaBufAllocator: Make DmaSyncer non-copyable
- Thread: Fix setThreadAffinity race condition in start
- DmaBufAllocator: Avoid syncing with an invalid file descriptor
- controls: Introduce AEGC-related controls
- controls: Remove AeLocked
- controls: Redefine AeEnable
ipa:
- ipa: rpi: Add cam_helper for imx415
- ipa: rpi: Add vc4 tuning files for imx415
- ipa: rpi: Use r-value references in the set()/setLocked() functions
- ipa: rpi: Add erase()/eraseLocked() to RPiController::Metadata
- ipa: rpi: Add a HW property to determine if the data buffer is strided
- ipa: rpi: Provide the camera helper with the hardware configuration
- ipa: raspberry: Port to the new AEGC controls
- ipa: rkisp1: Port to the new AEGC controls
- ipa: rkisp1: agc: Report new AeEnable control as available
- ipa: raspberry: Report new AeEnable control as available
- ipa: libipa: lux: Fix indentation
- ipa: rkisp1: agc: Initialize enum controls with a list of values
- ipa: rkisp1: agc: Fix build on debian 11 (gcc-9)
- ipa: rpi: Apply default ControlInfo values for sensor controls
- ipa: Use Vector class from libcamera
- libipa: Drop Vector class
- ipa: rpi: Fix incorrect cast for ExposureTime ControlInfo
- ipa: rkisp1: algorithms: agc: Fix whitespace
- libipa: interpolator: Add accessor to internal data
- libipa: pwl: Add clear() function
- libipa: Add AWB algorithm base class
- libipa: awb: Add helper functions for AWB mode support
- libipa: Add grey world AWB algorithm
- ipa: rkisp1: Move calculation of RGB means into own function
- ipa: rkisp1: Use grey world algorithm from libipa
- libipa: Add bayesian AWB algorithm
- ipa: rkisp1: Add support for bayes AWB algorithm from libipa
- ipa: rkisp1: awb: Apply gains based on default colour temperature on start
- libipa: lux: Normalize referenceY to 1
- libipa: awb_bayes: Add logging of value limits
- libipa: awb_bayes: Remove overly verbose log messages
- libipa: awb_bayes: Change the probabilities from log space to linear space
- libipa: awb: Sort class member documentation according to header order
- libipa: awb: Capitalize AWB
- libipa: awb: Follow function names with '()' in doxygen documentation
- libipa: awb: Standardize spelling on 'grey' world
- libipa: awb: Replace reference to pipeline handle with IPA module
- libipa: awb: Pass lux value to calculateAwb() as unsigned int
- ipa: rkisp1: awb: Fix wrong indentation in comment
- libipa: awb: Rename AwbStats::getRGBMeans() to rgbMeans()
- libipa: awb: Tidy up includes
- libipa: awb_grey: Minor comment fixes
- ipa: rkisp1: awb: Don't calculate RGB means if stats are missing
- ipa: rkisp1: awb: Capitalize AWB
- ipa: rkisp1: algorithms: awb: Fix AWB means vector order in RGB mode
- libipa: awb: Fix non-virtual destructor warning in AwbStats
- ipa: rkisp1: Initialise AGC from FrameDurationLimits controls
- ipa: rkisp1: Alias lineDuration
- ipa: rkisp1: Allow exposure time to be shorter than minimum frame duration limit
- ipa: libipa: Fix bug in ExposureModeHelper that leads to oscillations in AEGC
- utils: ipc: Only dispatch messages for proxy when stopping thread
- ipa: rpi: Add support for Raspberry Pi 5
- ipa: simple: lut: Fix include path
- ipa: rkisp1: agc: Fix metering modes
- ipa: rkisp1: agc: Set measurement window to full frame
- ipa: rkisp1: Add debug log for the sensor controls being set
- ipa: libipa: agc_mean_luminance: Error out when effectiveExposureValue is zero
- ipa: rksip1: Remove setControls(0) to reduce startup oscillations
- ipa: simple: softisp: Extend to pass metadata
- ipa: simple: Report the ColourGains in metadata
- ipa: simple: Report black levels in metadata
- ipa: simple: Report contrast in metadata
- ipa: simple: Report exposure in metadata
- ipa: simple: Initialize ccmEnabled to false
- libipa: histogram: Fix quantile() calculation for fractional results
- libipa: histogram: Fix interQuantileMean() for small ranges
apps:
- gstreamer: allocator: gst_libcamera_allocator_new(): Recognize errors
- gstreamer: allocator: gst_libcamera_allocator_new(): Fix memory leak
- gstreamer: Generate the new AEGC controls
- apps: ppm_writer: Add a missing include
- apps: ppm_writer: Return EIO on I/O errors
- gstreamer: Fix scaler-crop property get
- apps: common: event_loop: Take callbacks by rvalue ref
- apps: common: event_loop: Disable copy/move
- apps: common: event_loop: Use `std::deque` instead of `std::list`
- apps: common: event_loop: Use single event source for deferred calls
- apps: common: event_loop: Remove unused type alias
- apps: lc-compliance: Initialize `CameraManager` pointer in `Environment`
- apps: lc-compliance: Put tests into anonymous namespace
- apps: lc-compliance: Optimize `std::shared_ptr` usage
- apps: lc-compliance: Remove redundant getter call
- apps: lc-compliance: Don't allocate `FrameBufferAllocator` dynamically
- apps: lc-compliance: Use `std::vector` for argument array
- apps: lc-compliance: Use array instead of `std::vector`
- apps: lc-compliance: Add message to `GTEST_SKIP()`
- apps: lc-compliance: Merge `CaptureBalanced` and `CaptureUnbalanced`
- gstreamer: Add Y444 format support to the YUV list
- apps: cam: Fix include order
- apps: qcam: Simplify `PixelFormat` search
- apps: cam: Highlight default enumerator
- gstreamer: Use `Control<>` objects when setting controls
- gstreamer: Restore `AeEnable` control
pipeline:
- libcamera: pipeline: virtual: Demote config file error message to debug
- libcamera: pipeline: Move tuning file override handling to IPAProxy
- libcamera: software_isp: Move a non-loop condition out of the loop
- libcamera: software_isp: Handle signals in the proper thread
- libcamera: pipeline: virtual: Simplify error return
- libcamera: pipeline: virtual: Fill buffer's metadata
- libcamera: pipeline: virtual: Set `FrameError` on error
- libcamera: pipeline: Fix LIBCAMERA_<NAME>_TUNING_FILE handling
- rkisp1: Honor the FrameDurationLimits control
- libcamera: software_isp: Emit ispStatsReady only if IPA is running
- libcamera: software_isp: Handle queued output buffers on stop
- libcamera: software_isp: Handle queued input buffers on stop
- libcamera: software_isp: Dispatch messages on stop
- pipeline: rpi: Add new stream flags for PiSP
- pipeline: rpi: Add support for Raspberry Pi 5
- libcamera: software_isp: Determine color temperature
- libcamera: software_isp: Use RGB type to represent gains
- libcamera: software_isp: Store color temperature to metadata
- libcamera: software_isp: lut: Remove maybe_unused on a used argument
- libcamera: software_isp: Use common code to store debayered pixels
- libcamera: software_isp: Use a macro to assign debayering methods
- libcamera: software_isp: Add CCM algorithm
- libcamera: software_isp: Add an example CCM to uncalibrated.yaml
- libcamera: software_isp: Track whether CCM is enabled
- libcamera: software_isp: Apply CCM in debayering
- pipeline: rpi: pisp: Fix uninitialized variable warning
- libcamera: software_isp: Track frames and requests
- libcamera: software_isp: Reset stored exposure in black level
- libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setup
- libcamera: pipeline: uvcvideo: Fix `ExposureTimeMode` control setting
- pipeline: rpi: Fix potential empty optional read
- pipeline: simple: Connect/disconnect frameStart signal at start/stop time
- pipeline: simple: Enable frame start events
- pipeline: simple: Create DelayedControls instance once only
- pipeline: simple: Reset delayedCtrls at start
documentation:
- Documentation: design: ae: Document the design for AE controls
- Documentation: guides: application-developer: Fix variable shadowing
- Revert "README.rst: Report py dependencies"
test:
- test: ipa_data_serialization: Use DebugMetadataEnable
- test: threads: Use `pthread_testcancel()`
- test: ipa: libipa: Add histogram tests
- test: ipa: libipa: histogram: Add tests for quantile() returning a fraction
- test: ipa: libipa: histogram: Add tests for small inter quantile mean ranges
tuning:
- libtuning: module: awb: Add bayes AWB support
- libtuning: Add module for lux calibration
- utils: tuning: rkisp1: Add lux module
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
A base class with virtual functions and a non-virtual public destructor
is prone to undefined behaviourif deleted from a pointer to the base.
Enable the -Wnon-virtual-dtor warning to report those issues.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
The abi-compliance-checker reports that there is both ABI and API breakage in
this release.
Binary compatibility: 91.2%
Source compatibility: 98.9%
Total binary compatibility problems: 69, warnings: 0
Total source compatibility problems: 9, warnings: 0
This is not too surprising as this was the reason for the extra delay holding
up this release, and as such this release bumps the SONAME to 0.4 accordingly.
The majority of the ABI breakages are around the public API for Control
handling and definitions, which have caused underlying identifiers to be
changed, and the reuqired storage for controls has increased.
I hope that grouping the expected ABI and API breakages and delaying this
release will allow a longer stability on the 0.4 series but as we are
developing rapidly this can not be guaranteed, though we aim to minimise
disruption to distributions and applications whereever possible.
This release brings in 253 commits, with substantial development on image
control and tuning features for IPA and Pipeline handlers supporting libipa, as
well as integrating libipa support for IPA handling on the ARM Mali-C55 ISP.
A new 'Virtual Pipeline Handler' has been introduced to support more testing in
CI and virtual environments.
Gstreamer has had some interesting development to rework expressing the full
control set from libcamera using auto generation from the full control
descriptors.
A key and notable change in this release too is that the softISP is now moving
towards utilising the libipa implementaitons which will enable future tuning
and image control capabilities, and should also support future development on a
GPU-ISP implementation for GPU-accelerated handling. I do believe this work may
have introduced an oscillation regression in the AEGC which will need to be
investigated and fixed in the near future, but I don't want to hold up
progressing the ABI updates at this stage.
The i.MX8MP can now make full use of the DW100 Dewarp Engine for full rotation
and digital zoom capabilities.
Raspberry Pi systems now have improved support for the OV7251, IMX462, and
IMX327 Sensors, and libipa platforms can now make use of the GalaxyCore gc05a2
and gc08a3 Image sensors.
The following commits in this release relate to either a bug fix or an
improvement to an existing commit.
- ipa: rpi: Use std::abs()
- Reported-by: Maarten Lankhorst <dev@lankhorst.se>
- libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path
- Fixes: 761545407c ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
- libcamera: rkisp1: Rectify SensorConfiguration check
- Fixes: 047d647452 ("libcamera: rkisp1: Integrate SensorConfiguration support")
- libcamera: controls: Add missing size to control_type<Point>
- Fixes: 200d535ca8 ("libcamera: controls: Add ControlTypePoint")
- pycamera: Add missing code for ControlTypePoint
- Fixes: 200d535ca8 ("libcamera: controls: Add ControlTypePoint")
- libcamera: software_isp: Clear IPA context on configure and stop
- Fixes: 04d171e6b2 ("libcamera: software_isp: Call Algorithm::queueRequest")
- utils: checkstyle.py: Centralize dependency handling for checkers
- Fixes: 8ffaf376bb ("utils: checkstyle: Add a python formatter")
- test: py: Fix log level restore in SimpleTestMethods()
- Fixes: 06cb7130c4 ("py: Add unittests.py")
- v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
- Fixes: 5456e02d3f ("v4l2: Support setting frame rate in the V4L2 Adaptation layer")
- gstreamer: Remove auto-focus-mode property from device provider
- Fixes: 5a142438b0 ("gstreamer: Add enable_auto_focus option to the GStreamer plugin")
- libcamera: software_isp: Clean up pending requests on stop
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=234
- ipa: rpi: awb: Disable CT search bias for Grey World AWB
- Fixes: ea8fd63d93 ("ipa: rpi: awb: Add a bias to the AWB search")
- meson: Don't unnecessarily fallback to libyuv wrap
- Fixes: eeaa7de21b ("libcamera: pipeline: Add test pattern for VirtualPipelineHandler")
- libcamera: Don't copy `StreamConfiguration` when iterating
- Fixes: 4217c9f1aa ("libcamera: camera: Zero streams before validate()")
- libcamera: software_isp: Actually apply black level from tuning data
- Fixes: 41e3d61c74 ("libcamera: software_isp: Clear IPA context on configure and stop")
- gstreamer: keep same transfer with that in negotiated caps
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=150
- pipeline: rkisp1: Fix scope of dewarper stop() exit action
- Fixes: 12b553d691 ("libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter")
- pipeline: rkisp1: Limit sensor size to max resolution
- Fixes: 761545407c ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
And the following updates have been made in this release, grouped by category:
core:
- utils: abi-compat: Disable python build
- utils: abi-compat: sort meson options
- libcamera: controls: Add enum names and values map to ControlId
- libcamera: controls: Add array information to ControlId
- libcamera: v4l2_videodevice: Add getSelection() function
- libcamera: controls: Handle enum values without a cast
- libcamera: Replace usage of lroundf() with std::lround()
- libcamera: Replace last users of math.h
- libcamera: geometry: Clarify Rectangle's top-left corner
- libcamera: geometry: Add two-point Rectangle constructor
- libcamera: controls: Add ControlTypePoint
- libcamera: control_ids_draft: Add face detection controls
- libcamera: android: Add face detection control support
- libcamera: yaml_parser: Take string keys in `std::string_view`
- libcamera: camera: Fix CameraConfiguration spelling error
- libcamera: MappedFrameBuffer: Fix typo in comment formatting
- libcamera: controls: Add missing size to control_type<Point>
- libcamera: tracepoints: Fix copyright year for reproducible builds
- libcamera: controls: Add vendor information to ControlId
- libcamera: converter: Add interface for feature flags
- libcamera: converter: Add interface to support cropping capability
- libcamera: formats: Change bytesPerGroup of RGB565 and RGB565_BE from 3 to 2
- utils: checkstyle.py: Factor out common code to new CheckerBase class
- utils: checkstyle.py: Turn check() into a class method for all checkers
- utils: checkstyle.py: Print issues using __str__
- utils: checkstyle.py: Centralize dependency handling for checkers
- libcamera: camera_sensor: Introduce CameraSensorFactory
- libcamera: camera_sensor: Create abstract base class
- libcamera: camera_sensor: Sort factories by priority
- libcamera: pipeline_handler: Provide cancelRequest
- libcamera: simple: Track requests in conversionQueue_
- libcamera: Rationalize IPA and handlers names
- libcamera: Add debug control space
- libcamera: Add a DebugMetadata helper
- utils: Add script to generate control_ids_debug.yaml
- libcamera: yaml_parser: Use std::from_chars()
- libcamera: add DmaBufAllocator::exportBuffers()
- libcamera: Remove PipelineHandler Fatal check of non-empty MediaDevices
- libcamera: virtual: Add VirtualPipelineHandler
- libcamera: virtual: Add ImageFrameGenerator
- libcamera: virtual: Read config and register cameras based on the config
- meson: Don't unnecessarily fallback to libyuv wrap
- libcamera: Rename "shutter speed" to "exposure time"
- libcamera: camera_sensor_properties: Add sensor control delays
- libcamera: pipelines: Draw control delays from CameraSensor properties
- libcamera: Don't copy `StreamConfiguration` when iterating
- treewide: Avoid some copies in range-based for loops
- libcamera: v4l2_videodevice: Clarify V4L2M2MDevice
- libcamera: Extend u32 control type
- libcamera: Extend u16 control type
- libcamera: add method to set thread affinity
- libcamera: Copy Matrix class from libipa to libcamera
- libcamera: internal: Move Matrix class into libcamera namespace
- libcamera: internal: matrix: Replace vector with array in constructor
- libcamera: internal: Add Matrix class to build
- libcamera: mali-c55: Limit max size to sensor resolution
- libcamera: mali-c55: Limit ISP input size
- libcamera: mali-c55: Init camera properties
- libcamera: mali-c55: Simplify bufferReady()
- libcamera: mali-c55: Remove MaliC55CameraData::mbusCodes()
- libcamera: mali-c55: Add stride and size to rawConfig
- libcamera: v4l2-subdevice: Add Mali C55 media bus formats
- libcamera: bayer_format: Add 20-bit bayer formats
- libcamera: mali-c55: Propagate CSI-2 format to ISP
- libcamera: mali-c55: Correct input/output format representation
- libcamera: mali-c55: Enable links between resizer and video node
- libcamera: mali-c55: Enable usage of scaler
- libcamera: mali-c55: implement support for ScalerCrop
- libcamera: yaml_parser: Output more details when parsing fails
- libcamera: yaml_parser: Include stdlib.h instead of cstdlib
- libcamera: utils: StringSplitter: Inline some trivial methods
- libcamera: utils: StringSplitter: Add `operator==`
- libcamera: stream: Add operator<<(StreamConfiguration)
- libcamera: yaml_parser: Improve efficiency of string empty check
- libcamera: geometry: Add Rectangle::transformedBetween()
- libcamera: converter_v4l2_m2m: Add missing override specifier
- libcamera: converter_v4l2_m2m: Refactor get crop bounds code
- libcamera: converter: Add function to query crop bounds
- libcamera: converter: Add function to check if a stream was configured
- libcamera: converter: Add functions to adjust config
- libcamera: camera: Add a const version of the pipe() function
- libcamera: camera_sensor: Add parameter to limit returned sensor size
- libcamera: camera_sensor_properties: Add ov7251 and ov9281
- libcamera: rpi: Draw sensor delays from CameraSensorProperties
- include: linux: Add mali-c55-config.h
- include: linux: Add Mali-C55 Stats and Params V4L2 format
- libcamera: mali-c55: Acquire and plumb in 3a params and stats
- libcamera: controls: Populate direction field in control definitions
- utils: codegen: controls.py: Parse direction information
- libcamera: controls: Add support for querying direction information
- libcamera: controls: Update the ColourTemperature control to be writable
- utils: gen-debug-controls: Output direction flag
- hooks: pre-push: Verify that co-authors have a SoB line
- gitignore: Add venv directory to gitignore
- CameraManager: Ensure we cleanup on failure
- Add .editorconfig file
- DmaBufAllocator: Add Dma Buffer synchronization function & helper class
apps:
- apps: cam: Print control enum values more nicely
- py: Add bindings for ControlId enum name
- apps: cam: Print control array sizes
- apps: Replace HAVE_DNG with HAVE_TIFF
- apps: cam: Print an error when outputting DNG and DNG support is missing
- pycamera: Add missing code for ControlTypePoint
- apps: cam: Print control vendor information when listing controls
- py: Add bindings for ControlId vendor information
- qcam: Automatically select the camera if only one is available
- gstreamer: Implement caps negotiation for video/x-bayer
- v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
- gstreamer: Remove auto-focus-mode property from device provider
- gstreamer: Remove auto-focus-mode property from libcamerasrc
- gstreamer: Generate controls from control_ids_*.yaml files
- py: Add bindings for ControlId array information
- qcam: Use pointer when choosing camera
- gstreamer: keep same transfer with that in negotiated caps
- apps: cam: Print control direction information
pipeline:
- libcamera: software_isp: Remove superfluous includes
- libcamera: software_isp: Move BlackLevel to libcamera::ipa::soft
- libcamera: software_isp: Define skeletons for IPA refactoring
- libcamera: software_isp: Let IPASoftSimple inherit Module
- libcamera: software_isp: Make stats frame and buffer aware
- libcamera: software_isp: Remove final dots in debayer.cpp docstrings
- libcamera: software_isp: Track and pass frame ids
- libcamera: software_isp: Create algorithms
- libcamera: software_isp: Call Algorithm::configure
- libcamera: software_isp: Call Algorithm::queueRequest
- libcamera: software_isp: Call Algorithm::prepare
- libcamera: software_isp: Call Algorithm::process
- libcamera: software_isp: Move black level to an algorithm module
- libcamera: software_isp: Move color handling to an algorithm module
- libcamera: software_isp: Use floating point for color parameters
- libcamera: software_isp: Use DelayedControls
- libcamera: software_isp: Move exposure+gain to an algorithm module
- libcamera: software_isp: Update black level only on exposure changes
- pipeline: simple: Increase buffer count to four
- libcamera: rkisp1: Eliminate hard-coded resizer limits
- pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline
- libcamera: software_isp: Improve wording in a comment
- libcamera: rkisp1: Integrate SensorConfiguration support
- libcamera: rkisp1: Clamp stream configuration to ISP limit on raw path
- libcamera: rkisp1: Use const reference for sensor configuration
- libcamera: rkisp1: Rectify SensorConfiguration check
- libcamera: rkisp1: Maintain alphabetical order of forward declarations
- libcamera: software_isp: Clear IPA context on configure and stop
- libcamera: software_isp: Get black level from the camera helper
- libcamera: software_isp: Black level from tuning file
- libcamera: pipeline: rkisp1: Fix typo in todo task
- libcamera: rkisp1: Prepare for additional camera controls
- libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter
- pipeline: rpi: Remove CameraData::scalerCrop_
- pipeline: rpi: Pass crop rectangle as a parameter to platformSetIspCrop()
- pipeline: rpi: Introduce CameraData::CropParams
- pipeline: rpi: Track which ISP output is configured for a stream
- pipeline: rpi: Pass ISP output index into platformSetIspCrop()
- pipeline: rpi: Handler controls::rpi::ScalerCrops
- libcamera: rkisp1: Create main buffer pool out of if(!isRaw)
- libcamera: software_isp: Clean up pending requests on stop
- libcamera: pipeline: Add test pattern for VirtualPipelineHandler
- libcamera: software_isp: Refactor SoftwareIsp to use DmaBufAllocator::exportBuffers
- libcamera: software_isp: Initialize exposure+gain before agc calculations
- libcamera: software_isp: Remove unused IPAActiveState fields
- libcamera: software_isp: Actually apply black level from tuning data
- rkisp1: Use Matrix class from libcamera
- libcamera: software_isp: Add support for contrast control
- libcamera: software_isp: Add contrast control
- pipeline: rkisp1: Fix scope of dewarper stop() exit action
- pipeline: rkisp1: Keep aspect ratio on imx8mp
- pipeline: rkisp1: Split inputCrop and outputCrop
- pipeline: rkisp1: Reorder sensorInfo collection code
- pipeline: rkisp1: Query dewarper crop bounds if no stream configured
- pipeline: rkisp1: Fix ScalerCrop to be in sensor coordinates
- pipeline: rkisp1: Add ScalerMaximumCrop property
- pipeline: rkisp1: Refactor path validation
- pipeline: rkisp1: Enable the dewarper unconditionally
- pipeline: rkisp1: make RkISP1CameraConfiguration a friend of the pipeline handler
- pipeline: rkisp1: Fix config validation when dewarper is used
- pipeline: rkisp1: Limit sensor size to max resolution
- debayer_cpu: Replace syncing DMABUFs with DmaSyncer
- include: media-bus-formats: Add Mali-C55 mbus codes
- mali-c55: Plumb the IPA module in
ipa:
- ipa: rpi: Use std::abs()
- ipa: rpi: Replace last users of math.h
- ipa: rpi: awb: Add a const for the default colour temperature
- ipa: rpi: awb: Add a bias to the AWB search
- ipa: rkisp1: algorithms: agc: Check for correct stats type
- ipa: rkisp1: algorithms: awb: Check for correct stats type
- ipa: rpi: Add tuning files for OV7251
- ipa: libipa: Fix ExposureModeHelper function name in documentation
- ipa: rkisp1: Add constructor to the ipa context
- ipa: rkisp1: Add debug metadata support to the rkisp1
- ipa: libipa: Add data accessor to Histogram
- ipa: libipa: Add colour helpers
- ipa: ipu3: Use centralised libipa helpers
- ipa: rkisp1: Use centralised libipa helpers
- ipa: rpi: Use centralised libipa helpers
- ipa: rpi: awb: Disable CT search bias for Grey World AWB
- libipa: FCQueue: Make sure FrameContext#0 is initialized
- libcamera: libipa: camera_sensor: Provide helper and properties for Sony IMX462
- ipa: rpi: cam_helper: Add Sony IMX327
- ipa: raspberrypi: Add tuning file for IMX462 sensor
- ipa: raspberrypi: Add tuning file for IMX327 sensor
- libcamera: libipa: camera_sensor_helper: add IMX290 black level
- ipa: libipa: vector: Add mutable x(), y() and z() accessors
- ipa: libipa: vector: Add r(), g() and b() accessors
- ipa: libipa: vector: Add scalar constructor
- ipa: libipa: vector: Rename the dot product operator*() to dot()
- ipa: libipa: vector: Generalize arithmetic operators
- ipa: libipa: vector: Add missing binary arithemtic operators
- ipa: libipa: vector: Add compound assignment operators
- ipa: libipa: vector: Add element-wise min() and max() functions
- ipa: libipa: vector: Add sum() function
- ipa: ipu3: awb: Replace Awb::RGB class with ipa::RGB
- ipa: libipa: colour: Use the RGB class to model RGB values
- ipa: libipa: colour: Use Vector and Matrix for linear algebra
- ipa: rkisp1: awb: Use RGB class to store colour gains
- ipa: rkisp1: awb: Use Vector and Matrix for linear algebra
- ipa: rkisp1: awb: Expand comment
- libcamera: libipa: camera_sensor: Add GalaxyCore gc05a2 sensor properties
- libcamera: libipa: camera_sensor: Add GalaxyCore gc08a3 sensor properties
- ipa: rpi: Rename Matrix to Matrix3x3
- ipa: rpi: ccm: Replace local matrix implementation with the libcamera one
- libipa: Use Matrix class from libcamera
- libipa: Drop Matrix class
- libipa: agc_mean_luminance: Rename yaml key from exposure-time to exposureTime
- ipa: software_isp: Add constructor to the IPA context
- ipa: ipu3: Add constructor to the IPA context
- libcamera: libipa: camera_sensor_helper: Use `variant` instead of `union`
- ipa: rpi: Fix wrong frame integration difference value for OV9281
- ipa: rpi: cam_helper: imx708: Correct the frame integration diff value
- libipa: Centralise Fixed / Floating point convertors
- ipa: mali-c55: Add Mali-C55 ISP IPA module
- ipa: mali-c55: Add Agc algorithm
- ipa: mali-c55: Add BLC Algorithm
- ipa: mali-c55: Add AWB Algorithm
- ipa: mali-c55: Add Lens Shading Correction algorithm
- ipa: mali-c55: Add IMX415 tuning data file
- ipa: rkisp1: awb: Load white balance gains from tuning file
- ipa: rkisp1: awb: Implement ColourTemperature control
- ipa: rpi: awb: Make it possible to set the colour temperature directly
- ipa: libipa: Add Lux helper
- ipa: rkisp1: Add Lux algorithm module
- controls: rpi: Add a vendor rpi::ScalerCrops control
documentation:
- Documentation: guides: Fix FileSink source link
test:
- test: py: Fix log level restore in SimpleTestMethods()
- test: py: Replace environment array with environment object
- test: py: LD_PRELOAD the C++ standard library when using ASan
- test: libipa: Add Vector class test
- test: span: Use intended variable
tuning:
- utils: tuning: libtuning: Fix tuning for non RGGB RAWs
- libtuning: Use logging framework in ctt_awb.awb()
- libtuning: Remove the Cam object from ctt_awb.awb()
- libtuning: Fix access to color member in ctt_awb.awb()
- libtuning: Add initial AWB module
- utils: tuning: rkisp1: Replace static AWB with new AWB module
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
When the ASan runtime is linked using --as-needed, its dependency on the
C++ standard library is stripped. This results to a failure to properly
handled exceptions when a C++ dynamically loaded .so is used, as in the
Python unit tests that load the libcamera Python module:
AddressSanitizer: CHECK failed: asan_interceptors.cpp:335 "((__interception::real___cxa_throw)) != (0)" (0x0, 0x0) (tid=32679)
#0 0x7fa2f32e6c19 in CheckUnwind /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_rtl.cpp:69
#1 0x7fa2f330c9fd in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/sanitizer_common/sanitizer_termination.cpp:86
#2 0x7fa2f3247824 in __interceptor___cxa_throw /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_interceptors.cpp:335
#3 0x7fa2f3247824 in __interceptor___cxa_throw /var/tmp/portage/sys-devel/gcc-13.3.1_p20241025/work/gcc-13-20241025/libsanitizer/asan/asan_interceptors.cpp:334
#4 0x7fa2efb6da8b in operator() ../../src/py/libcamera/py_main.cpp:157
[...]
The issue has been reported in [1] and so far remains unfixed. Work
around it by preloading the C++ standard library.
[1] https://github.com/google/sanitizers/issues/934
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
abi-compliance-checker reports 100% binary and source compatibility,
so this release does not change the SONAME.
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
bugs:
The following commits in this release relate to either a bug fix or
improvement to existing commit.
- meson: Enable simple pipeline handler on all platforms by default
- Fixes: 06e0d8508e ("libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP")
- libcamera: udev: Catch udev notification errors
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=230
- libcamera: Drop remaining file names from header comment blocks
- Fixes: 829acb3ab0 ("libcamera: Drop file name from header comment blocks in templates")
- Documentation: Fix link to introduction on mainpage.dox
- Fixes: 860a3e3031 ("Documentation: Rework docs.rst into introduction.rst")
- Documentation: Fix links from API references to guides
- Fixes: e938861781 ("Documentation: Improve doxygen main page")
- pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=168
And the following updates have been made in this release, grouped by
category:
core:
- libcamera: Avoid variable-length arrays
- meson: Enable simple pipeline handler on all platforms by default
- libcamera: base: Add MemFd helper class
- libcamera: base: memfd: Handle uClibc compatibility with function wrapper
- libcamera: shared_mem_object: Prevent memfd from shrinking or growing
- libcamera: simple: Log a missing sensor in a better way
- libcamera: ipa_proxy: Unify configurationFile argument name
- libcamera: ipa_proxy: Report a missing configuration as a warning
- libcamera: Remove spaces at end of lines
- meson: Drop gcc 8 support
- utils: checkstyle.py: Warn when no valid Signed-off-by line is found
- libcamera: Drop path prefix from Doxygen file directive
- libcamera: Make all internal headers visible to Doxygen
- libcamera: Unify Doxygen file directive prefix for formats.h
- libcamera: Mark internal parts of public classes with \internal
- libcamera: Hide *::Private classes with __DOXYGEN_PUBLIC__
- libcamera: Split public and internal source arrays
- libcamera: Add version.h to public headers
- libcamera: Drop libcamera_generated_ipa_headers from sources
- libcamera: Move IPA headers to the libcamera_private dependency
- libcamera: Consolidate all IPA headers in libcamera_ipa_headers
- libcamera: Add missing headers to libcamera_internal_headers
- libcamera: Consolidate tracepoint header in libcamera_internal_headers
- libcamera: Don't add libcamera_public_headers to libcamera_public_sources
- utils: checkstyle.py: Add author property to Commit class
- utils: checkstyle.py: Validate SoB trailer against author
- utils: checkstyle.py: Fix trailer parsing for commits with changelogs
- libcamera: ipa_manager: Remove singleton requirement
- libcamera: udev: Catch udev notification errors
- libcamera: Add missing <stdint.h> include to base/file.h
- libcamera: Add missing <stdint.h> include to internal/yaml_parser.h
- libcamera: Fix header grouping
- libcamera: formats: Adding Support for Y12P
- utils: checkstyle.py: Rework commit message parsing
- utils: checkstyle.py: Skip title and trailers checkers for pre-commit
- utils: checkstyle.py: Add __repr__ method to Commit class
- libcamera: simple: Fix a typo in a doc string
- libcamera: camera: Hide Camera::create() from the public API
- meson: Store controls and properties YAML files in variables
- meson: Fix mismatch in controls and properties generated file names
- libcamera: Drop remaining file names from header comment blocks
- meson: Move all code generation scripts to utils/codegen/
- meson: utils: Provide environment for Python scripts
- utils: codegen: gen-header.sh: Generate libcamera.h based on meson.build
- utils: codegen: gen-controls.py: Convert to jinja2 templates
- utils: codegen: gen-controls.py: Move helper classes to separate file
- libcamera: controls: Improve formatting of control descriptions in YAML
- libcamera: pipeline_handler: Fix unlocking media devices too early
- libcamera: pipeline_handler: Call releaseDevice() before unlocking media devices
- libcamera: controls: Fix example for ExposureValue
- utils: update-kernel-headers: Support relative path to kernel git tree
- include: linux: Update headers for rkisp1 extensible parameters
- libcamera: camera: Use invokeMethod() for pipe_->acquire() and pipe_->release()
- libcamera: uvcvideo: Fix includes
- libcamera: v4l2: Remove unused includes
- libcamera: v4l2: Fix an include placement
- libcamera: v4l2: Fix indirect include
- libcamera: libcamera: Remove unused includes
- libcamera: libcamera: Add missing includes
- libcamera: libcamera: Formatting improvements
- libcamera: includes: Add missing includes
- libcamera: includes: Remove unused includes
- libcamera: includes: Formatting improvements
- utils: checkstyle: Add a python formatter
- utils: checkstyle: Remove style checker for python pep8
- libcamera: utils: Add ScopeExitActions class
- libcamera: v4l2_videodevice: Improve readability
- libcamera: media_object: Add MediaPad string representations
- libcamera: media_object: Add MediaLink string representations
- libcamera: media_device: Use MediaLink string helper
- libcamera: yaml-parser: Add additional tests
- libcamera: yaml-parser: Add failing test for unexpected behavior
- libcamera: yaml-parser: Differentiate between empty and empty string
- Document additional environmental variables
pipeline:
- libcamera: software_isp: Remove file seal TODO item
- libcamera: software_isp: Replace malloc() with std::vector<>
- pipeline: rkisp1: Use the extensible parameters format
- pipeline_handler: Add acquireDevice() function to mirror releaseDevice()
- pipeline: uvcvideo: Implement acquireDevice() + releaseDevice()
- libcamera: ipu3: Remove unused includes
- libcamera: ipu3: Replace wrong include
- libcamera: ipu3: Formatting improvements
- libcamera: rkisp1: Remove unused includes
- libcamera: rkisp1: Formatting improvements
- pipeline: rkisp1: Use ScopeExitActions to simplify error handling in start
- libcamera: pipeline: simple: Fix typos in match routing comment
- pipeline: simple: Remove media member variable
- libcamera: pipeline: simple: Use MediaLink string helper
- libcamera: debayer_cpu: Sync DMABUFs
ipa:
- ipa: libipa: camera_sensor_helper: Reference blackLevel() in documentation
- ipa: libipa: Add missing CameraSensorHelper fn label in docs
- ipa: rkisp1: Pass parameters buffer format to IPA module
- ipa: rkisp1: Pass parameters buffer size to pipeline handler
- ipa: rkisp1: Add ISP parameters abstraction class
- ipa: rkisp1: Use the new ISP parameters abstraction
- ipa: rkisp1: params: Add companding blocks
- ipa: rkisp1: Add compand feature flag to ipa context
- ipa: rkisp1: blc: Add support for BLS in compand
- libcamera: libipa: Remove unused includes
- libcamera: ipa: Remove unused includes
- utils: ipc: Include <string> in generated headers where needed
- libcamera: ipa: Drop unneded includes from ipa_interface.h
- ipa: rpi: agc: Ignore stable region when exposure/gain set manually
- ipa: rpi: Adding IMX283 support
- libcamera: libipa: camera_sensor: Add IMX283 black level
- ipa: libipa: Add generic Interpolator class
- ipa: rkisp1: Use generic Interpolator class
- ipa: rkisp1: Remove MatrixInterpolator
- ipa: rkisp1: Use interpolator in lsc
- ipa: rkisp1: Move loader functions into helper class
- ipa: libipa: Add lsc polynomial class
- ipa: rkisp1: Add sensor info to context
- ipa: rkisp1: Add polynomial LSC loader
- libcamera: libipa: camera_sensor: Add Sony IMX214 sensor properties
apps:
- gstreamer: Fix width and height range handling
- apps: qcam: Disable -Wextra-semi
- gstreamer: Fix missing "greater than" symbol in author string
- py: cam: Convert to PyQt6
- py: gen-py-controls: Use Control class
- py: gen-py-controls: Convert to jinja2 templates
- v4l2: Support setting frame rate in the V4L2 Adaptation layer
- qcam: Decrease minimum width of selector dialog
- qcam: Drop Qt version checks
- qcam: viewfinder_qt: Draw the letterbox background black
- qcam: viewfinder_gl: Fix binding of vertex buffer and shader program
- qcam: viewfinder_gl: Drop duplicate glClearColor()
- qcam: viewfinder_gl: Render image centered in letterbox
documentation:
- Documentation: Add Thread safety page
- Documentation: Split doxygen_input in public and internal inputs
- Documentation: Split public/private documentation
- Documentation: Improve doxygen main page
- Documentation: Add documentation-contents.rst
- Documentation: Alphabetise the Documentation toctree
- Documentation: Synchronise camera stack details
- Documentation: Breakout docs.rst
- Documentation: Remove libcamera architecture from introduction.rst
- Documentation: Rework docs.rst into introduction.rst
- Documentation: Rework index.rst
- Documentation: Add internal-api-html placeholder
- Documentation: Reformat documentation_contents.rst
- Documentation: Rename "API" section to "API Reference"
- Documentation: Drop local table of contents from introduction
- Documentation: Rename "Documentation" section to "Introduction"
- Documentation: Fix link to introduction on mainpage.dox
- Documentation: Fix links from API references to guides
tuning:
- utils: tuning: rkisp1: Clean up tuner construction
- utils: tuning: Change Tuner.add() to accept a list of modules
test:
- tests: Add a missing iostream include
- test: ipa: libipa: Add tets for Interpolator
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
When generating control headers, the YAML files to be used are
determined dynamically based on the selected pipeline handlers. As part
of this process, the build system populates an array of meson File
objects used as an input for the control headers generation custom
target, as well as an array of file names (as strings). The file names
array is later used to generate the control source files for the
libcamera core, as well as the source code for controls support in the
Python bindings.
Both of the source code generators manually turn the array of file names
into File objects. This duplicates code and reduces readability. A third
similar implementation has also been proposed to generate control
support sources in the GStreamer element, making the issue worse.
To simplify this, store File objects instead of file names in the
controls_files array. As the meson configuration summary doesn't support
File objects, create a separate controls_files_names to store the file
names for that sole purpose.
The exact same process occurs for properties, address them the same way.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
The libcamera CI has retired gcc 8 testing with the end of life of
Debian Buster at the end of June 2024. As gcc 8 isn't tested anymore, we
can't guarantee it will keep building libcamera correctly. Drop its
support. If anyone still has a compelling use case for gcc 8 support for
libcamera, we will investigate how to restore it in CI.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The simple pipeline handler is enabled by default on arm platforms only,
as it used to support arm SoCs only. Now that support for the IPU6 has
been added to the pipeline handler, it should be enabled on x86
platforms as well. Fix it.
Fixes: 06e0d8508e ("libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
The abi-compliance checker reports 100% binary and source compatibility,
so this release does not change the SONAME.
Binary compatibility: 100%
Source compatibility: 100%
Total binary compatibility problems: 0, warnings: 0
Total source compatibility problems: 0, warnings: 0
The following commits in this release relate to either a bug fix or
improvement to existing commit.
- ipa: rpi: Make monoSensor() accessor const
- Fixes: 2031e2f290 ("ipa: rpi: Add accessor function for monoSensor_")
- libcamera: dma_buf_allocator: Create memfd with CLOEXEC
- Fixes: ea4baaacc3 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc
- Fixes: ea4baaacc3 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- libcamera: dma_buf_allocator: Work around lack of file seals in uClibc
- Fixes: ea4baaacc3 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
- test: ipa: rkisp1: utils: Fix floating and fixed point conversion test
- Fixes: 9d152e9c66 ("ipa: rkisp1: Add a helper to convert floating-point to fixed-point")
- ipa: rkisp1: Fix algorithm controls vanish after configure
- Fixes: 4c5152843a ("ipa: rkisp1: Derive rkisp1::algorithms::Agc from AgcMeanLuminance")
- pipeline: rpi: Don't validate configuration in generateConfiguration()
- Bug: https://github.com/raspberrypi/libcamera/issues/138
- ipa: rkisp1: agc: Fix initialization without metering modes
- Fixes: 35233938ee ("ipa: rkisp1: agc: Read histogram weights from tuning file")
- v4l2: v4l2_compat: Fix redirect from `__open(at)64_2()`
- Fixes: 1023107b64 ("v4l2: v4l2_compat: Intercept open64, openat64, and mmap64")
- ipa: rkisp1: blc: Drop [[maybe_unused]] attribute
- Fixes: 50c28e1351 ("ipa: rkisp1: blc: Query black levels from camera sensor helper")
- ipa: rkisp1: ccm: Fix ccm metadata output
- Fixes: cbfdfa42ca ("ipa: rkisp1: algorithms: Add crosstalk algorithm")
- gstreamer: pool: Replace GstAtomicQueue with deque and mutex
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=201
- gstreamer: allocator: Ensure camera manager stay alive
- Bug: https://bugs.libcamera.org/show_bug.cgi?id=211
And the following updates have been made in this release, grouped by
category:
core:
- treewide: Query list of cameras just once
- libcamera: yaml_parser: Avoid double lookup in `operator[]`
- utils: checkstyle.py: Refactor IncludeChecker
- utils: checkstyle.py: Extend IncludeChecker to cover math.h
- utils: checkstyle.py: Add a check for hex values
- utils: checkstyle.py: Show location of coding style issue within line
- update-kernel-headers: Add linux/udmabuf.h to headers to sync
- include: linux: Update kernel headers to version v6.10-rc1
- libcamera: v4l2_subdevice: Update to the new kernel routing API
- libcamera: Rename DmaHeap class to DmaBufAllocator
- libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf
- libcamera: dma_buf_allocator: Create memfd with CLOEXEC
- libcamera: dma_buf_allocator: Work around lack of memfd_create() in uClibc
- libcamera: dma_buf_allocator: Work around lack of file seals in uClibc
- libcamera: Add gamma control id
- clang-format: Make Qt includes matching case sensitive
- meson: Group libipa and libipa_includes in a dependency object
- libcamera: controls: Add missing period at end of Gamma description
- libcamera: yaml_parser: Make default value templated in `get()`
- libcamera: yaml_parser: Drop std::enable_if_t guards for get() function
- libcamera: yaml_parser: Delegate YamlObject::get() to helper structure
- libcamera: yaml_parser: Add support for float types
- libcamera: base: log: Declare log categories when defining them
- meson: Enable warnings to flag missing declarations
- libcamera: Fix maybe-uninitialized error
- converter: converter_v4l2_m2m: Rectify streams sanity check
- converter: converter_v4l2_m2m: Rename private Stream class
- libcamera: converter: Replace usage of stream index by Stream pointer
- libcamera: base: utils: Implement hex() for 8-bit and 16-bit values
- libcamera: v4l2_videodevice: Use bufferType_ in [get|try|set]Format()
- utils: gen-version: Use posix compliant date
-----------------------------------------------------------------------------
ipa:
- ipa: rpi: Make monoSensor() accessor const
- ipa: rkisp1: Add a helper to convert floating-point to fixed-point
- ipa: rpi: Disable StatsOutputEnable control by default
- ipa: rkisp1: Fix algorithm controls vanish after configure
- ipa: rkisp1: Add GammaOutCorrection algorithm
- ipa: libipa: Add Vector class
- ipa: libipa: Copy pwl from rpi, and clean it up to match libcamera
- ipa: rpi: controller: Use libipa's Pwl class
- ipa: rkisp1: goc: Fix typographical issues in documentation.
- ipa: rkisp1: goc: Drop incorrect [[maybe_unused]]
- ipa: rkisp1: goc: Use copydoc
- ipa: rkisp1: goc: Mark default gamma table as static constexpr
- ipa: rkisp1: goc: Avoid use of auto for short type
- libcamera: libipa: camera_sensor: Define AR0521 helper functions inline
- ipa: rkisp1: cproc: Use anonymous namespace to limit symbol visibility
- ipa: rkisp1: cproc: Merge identical functions
- ipa: rkisp1: cproc: Drop incorrect [[maybe_unused]]
- ipa: rkisp1: agc: Read histogram weights from tuning file
- ipa: rkisp1: agc: Plumb mode-selection and frame duration controls
- ipa: libipa: vector: Specialize YamlObject getter
- ipa: libipa: vector: Drop readYaml() function
- ipa: libipa: pwl: Suffix \param with direction
- ipa: libipa: pwl: Make the empty() function inline
- ipa: libipa: pwl: Add a size() function
- ipa: libipa: pwl: Add a constructor that moves a Point vector
- ipa: libipa: pwl: Specialize YamlObject getter
- ipa: libipa: Add Matrix class
- ipa: libipa: Add MatrixInterpolator class
- ipa: rkisp1: algorithms: Add crosstalk algorithm
- ipa: libipa: vector: Add matrix-vector multiplication
- ipa: rkisp1: agc: Fix initialization without metering modes
- ipa: libipa: agc_mean_luminance: Fix enumerator names
- ipa: libipa: agc_mean_luminance: Include missing header
- ipa: rkisp1: Document all AGC parameters in IPAActiveState
- ipa: rkisp1: Document all AGC parameters in IPAFrameContext
- ipa: rkisp1: agc: Make size argument to computeHistogramPredivider const
- ipa: rkisp1: agc: Don't update histogram parameters unnecessarily
- ipa: rkisp1: agc: Simplify predivider calculation
- ipa: rkisp1: agc: Use mode from frame context to calculate new EV
- ipa: rkisp1: agc: Rename maxShutterSpeed to maxFrameDuration
- ipa: rkisp1: agc: Correctly clamp maximum shutter speed
- ipa: rkisp1: agc: Move AeEnable control to the AGC algorithm
- ipa: rpi: controller: Replace Pwl::readYaml() with YamlObject::get()
- ipa: libipa: pwl: Drop readYaml() function
- ipa: rkisp1: agc: Rename frame context update variable to updateMetering
- ipa: libipa: matrix: Fix incorrect symbol namespace
- ipa: ipa_interface: Declare ipaCreate() in libcamera namespace
- ipa: rpi: Define local functions in anonymous namespace
- ipa: libipa: Add black levels to camera sensor helper
- ipa: rkisp1: Move camHelper into IPAContext
- ipa: rkisp1: blc: Query black levels from camera sensor helper
- ipa: rkisp1: blc: Report sensor black levels in metadata
- ipa: rkisp1: data: Update tuning files for imx219 and imx258
- ipa: rkisp1: Move ov4689 and ov5640 black levels into sensor helpers
- ipa: rkisp1: blc: Drop [[maybe_unused]] attribute
- ipa: rkisp1: Install all tuning files
- libipa: camera_sensor_helper: Add OV5675 black level
- ipa: rkisp1: awb: Clamp gains to machine limits
- ipa: rkisp1: awb: Unconditionally fill metadata
- ipa: rkisp1: ccm: Fix ccm metadata output
- ipa: rkisp1: ccm: Ensure metadata contains valid ccm
- libcamera: libipa: camera_sensor: Add onsemi AR0144 sensor properties
- ipa rkisp1: Remove temperatureK from FrameContext
-----------------------------------------------------------------------------
apps:
- android: camera_capabilities: Fix GCC 14 warning
- v4l2: v4l2_compat: Fix redirect from `__open(at)64_2()`
- v4l2: v4l2_compat: Move `open*()` flag check into function
- py: libcamera: Move function declarations to common header
- v4l2: v4l2_compat: Include missing headers
- v4l2: v4l2_compat: Selectively disable -Wmissing-declarations
- apps: Define local functions in anonymous namespace
- apps: common: dng_writer: Workaround for "Unknown tag 33421" error
- apps: common: dng_writer: Support RAW16 formats
- apps: common: dng_writer: Rename packing functions
- apps: common: dng_writer: Add thumbnail scanline function for Raw
- apps: common: dng_writer: Support RAW10 and RAW12 format
- apps: common: dng_writer: Fix thumbnail generation on BE machines
- apps: common: dng_writer: Fix RAW10 and RAW12 packing on BE machines
- qcam: viewfinder_qt: Maintain aspect ratio
- apps: qcam: Port to Qt 6
- gstreamer: pool: Replace GstAtomicQueue with deque and mutex
- gstreamer: allocator: Ensure camera manager stay alive
- v4l2: v4l2_compat: Fix ioctl() prototype with musl C library
- gst: Add child proxy support to libcamerasrc
- gst: Document libcamerasrc multi stream usage
-----------------------------------------------------------------------------
test:
- test: ipa: rkisp1-utils: Fix capitalization of hex numbers
- test: camera: Increase timeout for vimc capture tests
- test: fence: Turn class member variable into local variable
- test: fence: Fix race condition
- test: fence: Increase timeout for fence test
- test: v4l2_videodevice: Increase timeout for vimc capture tests
- test: ipa: rkisp1-utils: Fix coding style for template arguments
- test: ipa: rkisp1: utils: Fix floating and fixed point conversion test
- test: ipc: unixsocket: Define local function in anonymous namespace
- test: gstreamer: Include missing sanitizer/asan_interface.h header
- test: utils: Extend utils::hex() test to 8-bit and 16-bit values
- test: gstreamer: Test memory lifetime
-----------------------------------------------------------------------------
pipeline:
- libcamera: software_isp: Use a specific integer type for black level
- libcamera: software_isp: Honor black level in AWB
- libcamera: software_isp: Move color mappings out of debayering
- libcamera: software_isp: Remove DebayerParams::kGain10
- libcamera: software_isp: Remove TODO about internal representation
- pipeline: vimc: Don't hardcode scaling factor with recent kernels
- libcamera: software_isp: Allow using dma-buffers from /dev/udmabuf
- libcamera: software_isp: Fix includes ordering in simple.cpp
- pipeline: rkisp1: cproc: Fix default value handling
- pipeline: rpi: Don't validate configuration in generateConfiguration()
- libcamera: debayer_cpu: Add 32bits/aligned output formats
- libcamera: software_isp: Drop unnecessary sanity check
- libcamera: pipeline: simple: Enable intel-ipu6 with Soft ISP
- libcamera: pipeline: simple: Enable Soft ISP for TI CSI-RX
-----------------------------------------------------------------------------
tuning:
- utils: raspberrypi: ctt: Adapt tuning tool for both VC4 and PiSP
- utils: raspberrypi: ctt: Added CAC support to the CTT
- utils: raspberrypi: ctt: Changed CTT handling of VC4 and PiSP
- utils: raspberrypi: ctt: Update tuning tool for HDR
- utils: raspberrypi: ctt: Add option to convert between vc4/pisp targets
- utils: raspberrypi: ctt: Add a maximum gain parameter for LSC
- utils: libtuning: modules: Add skeletal AGC module
- utils: tuning: rkisp1: Add skeletal AGC to the rkisp1 tuning script
- utils: libtuning: Correct GBRG Image parsing
- libtuning: Backport improvements in MacBeth search reliability
- libtuning: Fix reference image
- libtuning: Copy files from raspberrypi
- libtuning: Copy visualize_macbeth_chart from raspberry pi
- utils: tuning: Add requirements file and update readme
- libtuning: Fix imports
- libtuning: Migrate prints to python logging framework
- libtuning: Fix visualize_macbeth_chart()
- libtuning: Improve filename parsing
- libtuning: Implement a minimal yaml parser
- libtuning: Reactivate macbeth locator
- libtuning: Be a bit more verbose
- libtuning: lsc: rkisp1: Clip lsc values to valid range
- libtuning: Use the color member of the Image class
- libtuning: Remove need for Cam object from ccm
- libtuning: modules: Add initial CCM module
- libtuning: Handle cases, where no lsc tuning images are present
- libtuning: Only warn if processing returns None
- libtuning: Add static module
- tuning: rkisp1: Add some static modules
- libtuning: lsc: rkisp1: Do not calculate ratios to green
- libtuning: lsc: Prevent negative values
- libtuning: agc: rkisp1: Increase y-target
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The musl C library, as well as the POSIX standard, define the ioctl()
function's request argument as an int. glibc and uclibc, on the other
hand, define it as an unsigned long.
This difference between the function prototype and the implementation in
the V4L2 adaptation layer causes a compilation error with musl. Fix it
by detecting the function prototype and declaring the libcamera ioctl()
handler accordingly.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Open source Qt 5 has been effectively end of life since the release
of Qt 6, and Qt 6 has current LTS releases now.
This change ports qcam to Qt 6.2 and drops some of the baggage related
to Qt 5 that is no longer applicable.
Signed-off-by: Neal Gompa <neal@gompa.dev>
Reviewed-by: Eric Curtin <ecurtin@redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
A recently introduced typo resulted in a function definition not
matching its declaration. As the problem occurred in libipa, and IPA
modules are loaded dynamically and are linked with lazy symbol
resolution, the problem wasn't caught at build time.
To try and catch future similar issues, enable the
-Wmissing-declarations warning.
Suggested-by: Barnabás Pőcze <pobrn@protonmail.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
uClibc doesn't provide the macros defining parameters for the file
sealing API. Define them manually as a work around.
Fixes: ea4baaacc3 ("libcamera: DmaBufAllocator: Support allocating from /dev/udmabuf")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Enabling -Wdeprecated-enum-enum-conversion by default turned out to be a
too hasty decision. It causes compilation failures with Qt headers prior
to Qt v5.15.8. As the previous LTS versions of Debian and Ubuntu ship
older Qt versions, those errors cause real inconvenience to users.
This reverts commit bf4695266b.
The original goal of avoiding C++20 compilation regressions is still
handled through a test in CI.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
C++20 deprecates bitwise operations between different enumeration types.
This is a bad practice even in C++17, so enable the deprecation warning.
Doing so ensures no such operations will be added.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
ABI Compliance:
abi-compliance-checker reports 94.6% binary compatibilty and 97.6% source
compatibility between 0.1.0 and 0.2.0. The SONAME has been updated accordingly
and applications must be relinked against this version of libcamera.
- Binary compatibility: 94.6%
- Source compatibility: 97.6%
- Total binary compatibility problems: 5, warnings: 2
- Total source compatibility problems: 3, warnings: 3
The key ABI/API differences here are:
- AeFlicker
The control "SceneFlicker" has been removed and replaced by
AeFlickerMode, AeFlickerDetected and AeFlickerPeriod.
- struct CameraConfiguration
Field transform has been removed from the middle position of this structural type.
Field orientation has been added at the middle position of this structural type.
Field sensorConfig has been added at the middle position of this structural type.
Size of this type has been changed from 40 bytes to 96 bytes.
Bugs:
The following bugs are resolved with this release:
https://bugs.libcamera.org:
- Bug 91 - libcamerasrc is missing EOS handling
- Bug 199 - Install error on Ubuntu for Orange Pi 5
- Bug 205 - ipa_proxy_worker.cpp fails to compile if an interface function has
two arguments of SharedFD type
- Bug 206 - Fails to build with Python 3.12
https://github.com/raspberrypi/libcamera/issues:
- Assertion '!this->empty()' failed in libcamera::utils::Duration - libcamera-tools 0.0.5-1 #64
Integration overview:
core:
- utils: checkstyle.py: Treat Malformed trailers as a CommitIssue
- utils: checkstyle.py: Initialise staged trailers
- utils: checkstyle.py: Derive Amendment from Commit
- utils: checkstyle.py: Check trailers for Amendment commits
- libcamera: controls: Add controls for AEC/AGC flicker avoidance
- libcamera: yaml: Increase the YAML parser limit
- utils: checkstyle.py: Extract title and trailers with one command
- meson: Correctly locate libc++
- Documentation: theme: Fix compilation with Sphinx >= 7.0.0
- libcamera: Remove duplicated SortIncludes in `.clang-format`
- libcamera: stream: Document stride will be 0 for compressed formats
- README.rst: Drop recommendation to install meson using pip3
- meson: Don't set _FORTIFY_SOURCE for ChromeOS
- meson: Simplify check for _FORTIFY_SOURCE
- libcamera: formats: Fix typo in YV444 V4L2PixelFormat listing
- Documentation: Introduce Camera Sensor Model
- libcamera: camera: Introduce SensorConfiguration
- libcamera: camera_sensor: Support SensorConfiguration
- libcamera: converter: A few fixes to ConverterFactoryBase documentation
- libcamera: converter: drop unnecessary #include directive
- utils: update-kernel-headers: Support git worktrees
- libcamera: camera_sensor: Cache rotationTransform_
- libcamera: camera: Introduce Orientation
- Documentation: Add figures to document Orientation
- libcamera: properties: Make 'Rotation' the mounting rotation
- libcamera: transform: Add functions to convert Orientation
- libcamera: transform: Invert operator*() operands
- libcamera: transform: Add operations with Orientation
- test: Add unit test for Transform and Orientation
- libcamera: Use CameraConfiguration::orientation
- libcamera: camera_sensor: Cache mounting orientation instead of transform
- libcamera: transform: Fold transformToOrientation() in its only caller
- libcamera: transform: Make the transformFromOrientation() function static
- libcamera: controls: Add controls for HDR
- libcamera: camera_sensor: Only access V4L_CID_HBLANK if existing
- Documentation: Add code of conduct
- Documentation: code-of-conduct: Convert to reStructuredText
- Documentation: code-of-conduct: Add license information
- Documentation: code-of-conduct: Add contact information
- Documentation: contributing: Integrate the code of conduct
- README.rst: Use code directive for all code examples
- Documentation: Fix list indentation
- controls: Add vendor control/property support to generation scripts
- controls: Update argument handling for controls generation scripts
- build: controls: Rework how controls and properties are generated
- libcamera: control: Add vendor control id range reservation
- libcamera: controls: Use vendor tags for draft controls and properties
- documentation: Document vendor specific controls and properties handling
- README.rst: Drop indirect dependencies on Qt5 packages
- README.rst: Document dependencies for the Python bindings
- meson_options: Sort options alphabetically
- meson: Tag all installed files
- test: log: log_process: Log an error when failing due to incorrect message
- test: log: log_process: Fix uninitialized variable on process exit failure
- test: log: log_process: Improve debugging on process exit failures
- test: log: log_process: Increase process exit timeout
- test: ipc: unixsocket: Increase process exit timeout
- test: gstreamer: Remove videoconvert element from pipeline
- README.rst: Add missing libgtest-dev dependency for lc-compliance
- meson: Replace hack with usage of '@BASENAME@'
- libcamera: camera: Fix unused variable compiler warning
- Documentation: camera-sensor-model: Support Sphinx < 2.0
- libcamera: camera_sensor: Add OV64A40 sensor properties
- utils: ipc: Fix deserialization of multiple fd parameters
- libcamera: device_enumerator: ensure deviceNode is not empty
- utils: ipc: mojom_libcamera_generator.py: Fix Python warning
- libcamera: framebuffer_allocator: Remove unnecessary `clear()`
- hooks: pre-push: Disable interpretation of escape sequences
- libcamera: geometry: Correct doxygen reference to classes
- utils: update-mojo.sh: Properly remove old sources
- utils: update-mojo.sh: Exit immediately on error
- utils: update-mojo.sh: Change to the libcamera source directory
- utils: update-mojo.sh: Reject a dirty libcamera tree
- utils: update-mojo.sh: Commit the mojo update
- utils: ipc: generate.py: Add bindings directory to Python path
- utils: ipc: generate.py: Disable attributes checker
- utils: ipc: Update mojo
pipeline:
- libcamera: rpi: pipeline_base: Remove populateSensorFormats()
- libcamera: rpi: pipeline_base: Move findBestFormat to CameraData
- libcamera: rpi: pipeline_base: Cache sensor format
- pipeline: rpi: Don't call toV4L2DeviceFormat() from validate()
- pipeline: rpi: Increase buffer import count to 32
- pipeline: rpi: Remove additional external dma buf handling logic
- pipeline: rpi: Rename RPi::Stream::setExternalBuffer()
- pipeline: rpi: Simplify buffer id generation
- pipeline: rpi: Reset the frame lengths queue during configure
- libcamera: rpi: Handle SensorConfiguration
- libcamera: rpi: Allow platformValidate() to adjust format strides
- libcamera: rpi: Fix wrong comment indentation
- libcamera: rpi: Make isRaw/isYuv/isRgb static functions
- libcamera: rpi: Cache rawStreams and outStreams
- libcamera: rpi: Add some helpers to PipelineHandlerBase
- libcamera: rpi: Simplify validate() and configure() for RAW streams
- libcamera: rpi: Change default stream formats
- libcamera: rpi: Simplify validate() and configure() for YUV/RGB streams
- pipeline: rpi: Add RequiresMmap flag to RPi::Stream
- pipeline: rpi: Add Recurrent and Needs32bitConv flags to RPi::Stream
- pipeline: rpi: Add SharedMemObject class
- pipeline: rpi: Add SW downscale status to RPi::Stream
- pipeline: rpi: Move flip handling validation code
- pipeline: rpi: Make color space members in RPiCameraConfiguration public
- pipeline: rpi: vc4: Allocate more embedded data buffers
- pipeline: rpi: Remove unused variable
- pipeline: rpi: vc4: Fix drop frame bug when no ISP streams are configured
- pipeline: rpi: Add some useful logging messages
- libcamera: pipeline: Fix c++20 compile warning
- pipeline: rpi: Respect provided stride
ipa:
- ipa: rpi: common: Handle AEC/AGC flicker controls
- utils: raspberrypi: ctt: Improved color matrix fitting
- ipa: rpi: vc4: data: Updated color matrices for RPi Cameras
- utils: raspberrypi: ctt: Code tidying
- ipa: rpi: Fix the reporting of Focus FoMs
- ipa: rpi: imx290: Hide one frame on startup
- ipa: rpi: agc: Fetch AWB status in process method, not prepare
- ipa: rpi: agc: Filter exposures before dealing with digital gain
- ipa: rpi: agc: Split AgcStatus into AgcStatus and AgcPrepareStatus
- ipa: rpi: vc4: Make the StatisticsPtr construction clearer
- ipa: rpi: histogram: Add interBinMean()
- ipa: rpi: agc: Reorganise code for multi-channel AGC
- ipa: rpi: agc: Implementation of multi-channel AGC
- ipa: rpi: agc: Add AgcChannelConstraint class
- ipa: rpi: agc: Use channel constraints in the AGC algorithm
- ipa: rpi: Fix segfault when parsing invalid json file
- ipa: rpi: Fix frame count logic when running algorithms
- ipa: rpi: Avoid skipping IPAs on the first frame after the drop frames
- ipa: rpi: Add IpaBase::platformStart() member function
- mojom: pipeline: ipa: rpi: Add fields for PiSP objects
- ipa: rpi: Add try_lock() to RPiController::Metadata
- ipa: rpi: Add statsInline to the Controller hardware description
- ipa: rpi: Add PiSP definitions to the Controller hardware description
- ipa: rpi: Prepare ALSC for PiSP support
- ipa: rpi: Prepare AWB for PiSP support
- ipa: rpi: Add new algorithms for PiSP
- build: ipa: Fix bug in building multiple IPA interfaces with the same mojom file
- ipa: rpi: agc: Add an AGC stable region
- ipa: rpi: contrast: Allow adaptive contrast enhancement to be disabled
- ipa: rpi: denoise: Support different denoise configurations
- ipa: rpi: agc: Avoid overwriting caller's statistics pointer
- ipa: rpi: agc: When AGC channels are changed, start with the 1st channel
- ipa: rpi: hdr: Add the ability to alter the LSC table
- ipa: rpi: alsc: Do not re-read the alsc.status metadata
- ipa: rpi: agc: Allow AGC channels to avoid using "fast desaturation"
- ipa: rpi: vc4: Move denoise control handling into the VC4 derived IPA
- ipa: rpi: agc: Fetch AWB status in the prepare method
- ipa: rpi: agc: Make AGC controls affect all channels
- ipa: rpi: alsc: Do not allow zero colour ratio statistics
- ipa: rpi: agc: Fix bug where AeLocked was never getting set
- ipa: rpi: cac: Minor code improvements and tidying
- ipa: rpi: Add hardware line rate constraints
- ipa: rpi: Allow the mean of an empty histogram interval
- ipa: rpi: black_level: Add an initialValues method
- ipa: rpi: awb: Add an initialValues method
- utils: raspberrypi: ctt: Improve the Macbeth Chart search reliability
- build: controls: Add Raspberry Pi vendor specific controls
- ipa: vc4: Implement the StatsOutputEnable vendor control
- ipa: rpi: Provide a Camera Helper for the OV64A40
- libipa: camera_sensor_helper: Add OV64A40 helper
- ipa: rpi: vc4: Add OV64A40 tuning files
- ipa: rpi: Implement HDR control
- ipa: rpi: vc4: data: Update tuning files for HDR
apps:
- android: camera_device: Fix requestedStream handling
- py: Add the SensorConfiguration class
- py: gen-py-controls: Remove SceneFlicker workaround
- apps: qcam: Add support for RGB565
- py: libcamera: Define and use Orientation
- apps: cam: Add option to set stream orientation
- py: cam: Add option to set stream orientation
- gstreamer: Implement element EOS handling
- gstreamer: Fix unused variable error
- test: gstreamer: Fix indentation in comments
- gstreamer: Move negotiation logic to separate function
- gstreamer: Add GstLibcameraSrcState::clearRequests method
- gstreamer: Implement renegotiation
- lc-compliance: Set minimum version for gtest dependency
- gstreamer: Support for pre-1.16 GstEvent
- apps: lc-compliance: Fix source file ordering in meson.build
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Meson uses tags to sort installed files in categories, and makes it
possible to install a subset of the files using the '--tags' argument to
'meson install'. This is typically used by distributions to split the
runtime, development and documentation files into separate packages.
By default, meson tries to guess the correct tag for installed files,
but can't always do so properly. Mark the install targets that meson
can't guess with the correct install_tag.
As the feature has been introduced in meson 0.60, bump the minimum meson
version. The latest LTS release of all major distributions that
libcamera currently targets ship a recent enough meson version.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Add support for using separate YAML files for controls and properties
generation. The mapping of vendor/pipeline handler to control file is
done through the controls_map variable in include/libcamera/meson.build.
This simplifies management of vendor control definitions and avoids
possible merge conflicts when changing the control_ids.yaml file for
core and draft controls. With this change, libcamera and draft controls
and properties files are designated the 'libcamera' vendor tag.
In this change, we also rename control_ids.yaml -> control_ids_core.yaml
and property_ids.yaml -> property_ids_core.yaml to designate these as
core libcamera controls.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Use the compiler.get_define() function to get the value of
_FORTIFY_SOURCE instead of iterating over the cpp_args. This simplies
the code, but also guarantees to return the actual value of
_FORTIFY_SOURCE, even if defined through other means than through the
meson cpp_args.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: George Burgess IV <gbiv@google.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
ChromeOS is moving to a platform default of `_FORTIFY_SOURCE=3`, and
this definition conflicts with that:
<command line>:4:9: error: '_FORTIFY_SOURCE' macro redefined
[-Werror,-Wmacro-redefined]
Rather than adding logic to keep up with their local configuration, it
seems best to leave setting _FORTIFY_SOURCE on ChromeOS up to ChromeOS.
Signed-off-by: George Burgess IV <gbiv@google.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
The meson find_library() function takes a library name without the "lib"
prefix. Its usage to find lic++ is thus not correct, and meson warns
about it:
WARNING: find_library('libc++') starting in "lib" only works by accident and is not portable
Fix it by dropping the "lib" prefix.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
ABI Compliance:
abi-compliance-checker reports 99% binary compatibility and 81.4% source
compatibilty between version 0.0.5 and 0.1.
- Binary compatibility: 99%
- Source compatibility: 81.4%
- Total binary compatibility problems: 4, warnings: 2
- Total source compatibility problems: 165, warnings: 7
Now that we have funtional ABI validation, the soname has been updated from
libcamera.so.0.0.5 to libcamera.so.0.1.
Future releases will now maintain the same soname until an ABI breakage is
detected to reduce the repackaging and rebuilding of other components that may
use libcamera. The abi-compatibility report can now be generated with the new
utility './utils/abi-compat.sh'.
Key differences here are due to preventing the installation of internal and
private headers in the packaging process, and most of this API compatibility
should not be visible to applications with the exception of:
- Camera::generateConfiguration ( StreamRoles const& roles )
The StreamRoles type definition has been removed. This is now handled as a
Span<StreamRole> to prevent unnecessary allocations and copies.
- CameraManager::addCamera ( std::shared_ptr<struct Camera> camera, std::vector<unsigned long>const& devnums )
- CameraManager::get ( dev_t devnum )
- CameraManager::removeCamera ( std::shared_ptr<struct Camera> camera )
These functions of the CameraManager were for use exclusively by the V4L2
adaptation layer, and not intended for use by applications. This has now been
reworked to use the new SystemDevices and the redundant functions removed.
The ABI/API breakages have been introduced by:
5ca0c9276f ("libcamera: CameraManager: Remove ::get(dev_t)")
26a4b83d1b ("libcamera: Remove `StreamRoles` alias")
63966ae587 ("libcamera: base: Do not install private headers")
Core:
- libcamera: v4l2_videodevice: Use O_CLOEXEC when exporting DMA buffers
- libcamera: ipa_manager: Allow IPA loading in nested subdirs
- meson: Fix usage of overwritten pipeline variable
- subprojects: Drop leftovers of pybind11
- camera_sensor: ipa: core: Add CFA pattern to IPACameraSensorInfo
- libcamera: controls: Define a default lens position behaviour
- libcamera: internal: request: convert to pragma once
- libcamera: camera_manager: Move private implementation to internal
- libcamera: camera_manager: Move {add,remove}Camera to internal
- libcamera: properties: Provide a Devices camera property
- libcamera: pipeline: Register device numbers with camera
- libcamera: camera_sensor: Adjust properties::Rotation
- libcamera: meson: Allow PH to change libcamera_deps
- libcamera: base: Move thread_annotations to private
- libcamera: base: Do not install private headers
- utils: ABI Compatibility checker
- meson: Use x.y soname versioning
- libcamera: camera: Take span of StreamRole instead of vector
- libcamera: Remove `StreamRoles` alias
- utils: ipu3-capture.sh: Fix the script to work with recent media-ctl versions
- Documentation: Add predefined macros from config.h to Doxyfile
- utils: checkstyle: Add __repr__ method to CommitFile class
- utils: checkstyle: Support running checkers selectively
- utils: checkstyle: Don't include commit ID in commit title
- utils: checkstyle: Add trailers checker
- tests: gstreamer: Test cameras' enumeration from GstDeviceProvider
- meson: Fix space around colon issues
- libcamera: Add option to configure udev support
- libcamera: CameraManager: Remove ::get(dev_t)
- tests: gstreamer: Fix compiler error with gcc 8.4.0
ipa:
- meson: ipa: Add mapping for pipeline handler to mojom interface file
- libcamera: ipa: Remove character restriction on the IPA name
- ipa: meson: Allow nested IPA directory structures
- ipa: raspberrypi: Introduce IpaBase class
- ipa: raspberrypi: agc: Move weights out of AGC
- ipa: rkisp1: agc: drop hard-coded analogue gain range
- libipa: camera_sensor_helper: Add IMX327 helper
- pipeline: rpi: ipa_base: Parse config files after platformRegister()
- libcamera: camera_sensor: Add Sony IMX327 sensor properties
- ipa: rpi: imx296: Small refinements to the IMX296 mono sensor tuning
- ipa: rpi: Handle controls for mono variant sensors
- libcamera: controls: Drop reference to IPA in controls documentation
- libipa: camera_sensor_helper: Restore alphabetical order
- ipa: ipu3: agc: Drop hard-codec analogue gain max
- ipa: rkisp1: agc: Restore minimum analogue gain limit
- pipeline: ipa: rpi: Return lens controls from ipa->configure()
- ipa: rpi: Set lens position to hyperfocal on startup
- ipa: rpi: tunings: Add missing short and long exposure profiles
- ipa: rpi: agc: Use std::string instead of char arrays
- ipa: rpi: agc: Gracefully handle missing agc modes
- ipa: rpi: agc: Do not switch to a default if a mode is unavailable
- ipa: rpi: imx708: Fix mode switch drop frame count
- ipa: rpi: imx296_mono: Disable all colour shading
pipeline:
- libcamera: pipeline: simple: Add support for ST's DCMIPP
- pipeline: meson: Allow nested pipeline handler directory structures
- pipeline: ipa: raspberrypi: Refactor and move the Raspberry Pi code
- pipeline: raspberrypi: rpi_stream: Set invalid buffer to id == 0
- pipeline: ipa: raspberrypi: Restructure the IPA mojom interface
- pipeline: raspberrypi: Make RPi::Stream::name() return const std::string &
- pipeline: raspberrypi: Introduce PipelineHandlerBase class
- pipeline: raspberrypi: Add stream flags to RPi::Stream
- libcamera: rkisp1: Generate config using main path
- libcamera: rkisp1: Crop on ISP before downscaling
- libcamera: rkisp1: Assign sizes to roles
- libcamera: rkisp1: Fix enumeration of RAW formats
- pipeline: rpi: Do not return an error from pipeline config file handling
- libcamera: pipeline: simple: Support TI CSI-RX
- pipeline: rpi: Account for Bayer packing when validating format
apps:
- apps: qcam: Remove redundant check
- v4l2: Move the v4l2 compat layer to libexec/libcamera
- android: mm: generic: use GRALLOC_HARDWARE_MODULE_ID
- android: mm: Stub libhardware for build tests
- py: Fix CameraManager.version property
- py: Move ColorSpace and Transform classes to separate files
- py: Use exceptions instead of returning error codes
- py: unittests.py: Add weakref helpers and use del
- py: Move to mainline pybind11 version
- py: Fix code formatting
- py: unittests.py: Fix type checker warnings
- gstreamer: Add enable_auto_focus option to the GStreamer plugin
- gstreamer: Drop libcamera_private dependency
- apps: Add ipa-verify application
- v4l2: v4l2_camera_proxy: Prevent ioctl sign-extensions
- v4l2: Use SystemDevices properties to identify cameras
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
libcamera uses udev to support hotplug (and unplug) detection. This is
an optional feature, which gets selected automatically if udev is
available. Users may however want to build libcamera without hotplug
detection, even if udev is available on the system. Add a new feature
option to control udev support. The default value is auto, which retains
the existing behaviour.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The meson style, which libcamera follows, recommends a space before
colons in function parameters. Fix the style violations through the
project.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
libcamera creates a config.h file with predefined macros, and instructs
the compiler to include it implicitly with the -include argument.
Doxygen has no support for implicit inclusion of headers, but has a
PREDEFINED configuration option for its preprocessor that lists
predefined macros. Populate it with the values from the config_h
configuration data object that is used for generate the config.h file,
to ensure that documentation matches the configuration options libcamera
has been built with.
Bump the minimum meson version to 0.57 to use cfg_data.keys().
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Now that we identify ABI breakages, provide incremental releases which
can support backwards compatible linkage across release points that have
a compatible ABI.
Introduction of this commit does not convey that libcamera now has a
stable API, but that patch releases with a common minor number
(0.minor.patch) may potentially be used by applications without
recompilation and linkage against new releases.
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Split the Raspberry Pi pipeline handler and IPA source code into common
and VC4/BCM2835 specific file structures.
For the pipeline handler, the common code files now live in
src/libcamera/pipeline/rpi/common/
and the VC4-specific files in src/libcamera/pipeline/rpi/vc4/.
For the IPA, the common code files now live in
src/ipa/rpi/{cam_helper,controller}/
and the vc4 specific files in src/ipa/rpi/vc4/. With this change, the
camera tuning files are now installed under share/libcamera/ipa/rpi/vc4/.
To build the pipeline and IPA, the meson configuration options have now
changed from "raspberrypi" to "rpi/vc4":
meson setup build -Dipas=rpi/vc4 -Dpipelines=rpi/vc4
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
The current IPA build files require a flat directory structure for the
IPAs. Modify the build files to remove this restriction and allow a
directory structure such as:
src/ipa
|- raspberrypi
|- common
|- cam_helpers
|- controller
|- vc4
|- rkisp1
|- ipu3
where each subdir (e.g. raspberrypi/common, raspberrypi/cam_helper) has
its own meson.build file. Such a directory structure will be introduced
for the Raspberry Pi IPA in a future commit.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Starting from 13.1, gcc implements the C++23 version of automatic move
from local variables in return statements (see
https://en.cppreference.com/w/cpp/language/return). As a result, some
previously required explicit `std::move()` in return statements generate
warnings. This is the case when a function returns an object whose type
is a class derived from the class type the function returns:
struct U { };
struct T : U { };
U f()
{
T t;
return t;
}
Up to C++20, the automatic move from local variables selects the move
constructor of class U, which is not the move constructor of the
expression. Overload resolution is then performed a second time, with t
considered as an lvalue. An explicit `std::move(t)` is needed in the
return statement to select the U move constructor.
Starting from C++23, `t` is treated as an xvalue, and the U move
constructor is selected without the need for an explicit `std::move(t)`.
An explicit `std:move()` then generates a redundant-move warning, as in
the valueOrTuple() function in src/py/libcamera/py_helpers.cpp.
Omitting the `std::move()` silences the warning, but selects the copy
constructor of U with older gcc versions and with clang, which
negatively impacts performance.
The easiest fix is to disable the warning. With -Wpessimizing-move
enabled, the compiler will still warn of pessimizing moves, only the
redundant but not pessimizing moves will be ignored.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>