The sharpening default values are updated to be slightly less
aggressive, and exposure profiles are made slightly more
consistent. This now matches the latest tuning changes.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Sharpening is reduced slightly for official Raspberry Pi cameras, and
exposure profiles made a bit more consistent.
Denoise is reduced for the imx708 where it appears too strong.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Noise and detail tuning is improved for all official Raspberry Pi
cameras.
The old tunings left too much noise in and even sharpened some of
it. The new tunings remove more noise, and no longer sharpen it. Some
of the more general over-sharpening is also removed. Note that lost
detail can be recovered well using TDN (temporal denoise), which is
the recommended method to get the best results.
There are some minor adjustments to the CDN deviation, now that this
gets backed-off as TDN ramps up.
The contrast in the gamma in the bright areas is also toned down just
a little.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The default noise/sharpness/gamma values are updated to reflect the
latest camera tuning work.
- Denoise is increased when not using temporal denoise.
- Denoise is reduced when benefitting from temporal denoise.
- Over-sharpening is reduced.
- High contrast gamma is slightly reduced.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
The CDN (colour denoise) deviation gets gradually reduced frame by
frame as TDN (temporal denoise) comes in and has more effect. CDN is
more harmful to image detail than TDN, so ramping it down in favour of
TDN is beneficial.
The tuning file parameters are chosen so that existing tuning files
don't have to be updated and will carry on working "mostly like they
did" (apart from the new back-off).
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Add an imx415 tuning file for both the VC4 and PiSP. This tuning file
has been created and supplied by Arducam to support the B0569 module.
Note that this conflicts with an already existing imx415.json and
as such is provided as imx415_b0459.json.
More work will be required to support module specific tuning file
parsing.
Acked-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Add an imx335 tuning file for both VC4 and PiSP. This tuning file
has been created and supplied by Arducam to support the B0568 module.
Acked-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
In current implementation, the sink pad counter of the crossbar is not
incremented if the pad is not connected to any subdevice. This would lead
to incorrect routing and format configuration if CSI is not connected
to first sink pad.
To avoid such issue, every sink pads must be taken into account. Then if
CSI and sensor are present, current counter is used for routing at match(),
and stored in camera data to be reused during configure().
Signed-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>
Tested-by: Pavel Löbl <pavel@loebl.cz>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
libcamera uses the meson python module to handle native compilation of
Python extension modules, and uses the shared_module() function when
cross-compiling due to an issue in the python module. The difference
between native and cross compilation also extends to the installation
path: native compilation lets the python module handle the paths, while
cross compilation constructs a path manually using a heuristic based on
the Python version and hardcoded components.
This manually-constructed installation path is problematic for cross
compilation for the same reason it caused issue when used for native
compilation: it is not guaranteed to be right, and it can't be
overridden by users.
Switch to obtaining the installation path from the meson python module
for cross-compilation as well. This also prepares for usage of
py.extension_module() once the file suffix issue will be fixed in meson.
On Debian 13, this change replaces the incorrect path
/usr/local/lib/python3.12/site-packages/libcamera with the still (but
differently) incorrect /usr/local/lib/python3/dist-packages/libcamera.
Future fixes in meson to address this issue will make the path correct
by default.
When the path calculated by the python module is not correct, it can now
be overridden by the user through the meson python.platlibdir
configuration variable.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
libcamera uses the meson python module to handle native compilation of
Python extension modules.
When cross-compiling, the module uses the build machine suffix instead
of the host machine suffix in some enviroments (for instance naming the
shared object file _libcamera.cpython-313-x86_64-linux-gnu.so instead of
_libcamera.cpython-313-aarch64-linux-gnu.so when cross-compiling from
x86_64 to aarch64). This prevents using the python module in that case,
and libcamera uses the normal dependency() function to locate the Python
libraries, and the shared_module() function to build the module.
Not using the meson python module to get the Python dependency prevents
selecting a specific Python interpreter, the same way as it does for
native builds. While having multiple Python interpreter versions in a
cross-build environment is likely less common, different behaviours and
features between native and cross-compilation are still not optimal.
Improve this situation by getting the dependency from the python module
for cross-compilation as well. This also prepares for usage of
py.extension_module() once the file suffix issue will be fixed in meson.
The user will need to ensure that the Python interpreter for the build
machine matches the version of the interpreter in the cross-compilation
environment for the host machine. Otherwise, meson will fail to find the
Python dependency. Cross-compilation environment provided by Linux
distributions (such as Debian multi-arch support) should work out of the
box, but compiling libcamera manually against a cross-compilation
environment provided by Buildroot or Yocto may require manual
configuration.
When the interpreters versions do not match, meson needs to be pointed
to the build ùachine interpreter from the cross-compilation environment
using the cross file. For instance, assuming a 'br_host_dir' variable
pointing to the host directory from Buildroot, the cross file should
contain
[binaries]
python = br_host_dir / 'bin/python3'
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
The existing meson.build file installs the bindings to a manually
constructed directory that is not included in the Python path in most
distributions. For instance, on a Debian 12 system, the modules is
intalled in /usr/lib/x86_64-linux-gnu/python3.11/site-packages/, while
the Python interpreter looks for site packages in
/usr/lib/python3/dist-packages/.
It also always builds the bindings using the system Python, as it
searches for the Python library using the standard dependency()
function. This prevents build the Python bindings for a different
interpreter version without changing the system default interpreter.
Modify the build process to use the meson python module to build the
Python bindings targets, so it installs them to the correct directories
for Python. This also allows specifying a different target Python
interpreter through the '[binaries]' section of a meson native file.
The behaviour is not changed for cross-compilation, as the meson python
module has known issues in that case.
Signed-off-by: William Vinnicombe <william.vinnicombe@raspberrypi.com>
Co-developed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@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>
When checking the version of the sphinxcontrib.doxylink module, the
Python interpreter used by Sphinx must be used, as that's where the
module will be imported from. Using the meson python_installation object
for this purpose is incorrect, as it's meant to access the Python
installation of the host machine, not the system Python interpreter on
the build machine.
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 meson python module will refer to
the latter, while Sphinx will use the former.
Fix this by using python3 directly.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
The planes variable in the Device::createFrameBuffer() function is a
reference to buffer.planes() that is only used as a range initializer in
a range-based for loop. Use buffer.planes() directly and drop the
variable.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@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 paths of the doxygen tag files for sphinxcontrib-doxygen must be
absolute or relative the the current working directory. However, when
libcamera is built as a subproject, the current working directory
is the top-level build directory. Thus the paths for the tag files
will not be correct.
Fix that by using `configure_file()` to generate the final sphinx
configuration with the appropriate paths queried from meson.
Fixes: 0382d215db ("Documentation: Use Sphinx doxylink to generate links to doxygen")
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>
If `addModel` is true, then the previously set `name` will be overwritten.
This does not seem to be the intended behaviour, so fix it by using `+=`.
Before:
Available cameras:
1: 'imx219' (/base/soc@0/bus@30800000/i2c@30a30000/camera@10)
After:
Available cameras:
1: External camera 'imx219' (/base/soc@0/bus@30800000/i2c@30a30000/camera@10)
Fixes: aab49f903e ("cam: Do not assume Location is available")
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
In `Semaphore::release()`, unlocking the mutex before signalling the condition
variable can be problematic, especially with "temporary" objects such as the
ones `BoundMethodBase::activatePack()` uses to handle `ConnectionTypeBlocking`.
Specifically, `Semaphore::acquire()` might lock the mutex after `Semaphore::release()`
has unlocked it, but before it had the chance to notify the condition variable.
In that case `Semaphore::acquire()` can succeed, and execution may proceed to
destroy the `Semaphore` object while the other thread is in the process of
running `std::condition_variable::notify_all()`.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=225
Fixes: 66e7c5b774 ("libcamera: Add Semaphore class")
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 function is not actually thread safe contrary to its documentation.
Since it is currently not used in an unsafe context, simply remove the
mention of thread safety from the documentation.
The variable must still remain atomic because it is accessed internally
from different threads, e.g. `Thread::postMessage()`.
Also add an assertion to enforce this.
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>
It is often helpful to know which tuning file is used. Add a log
statement with INFO level for that.
As the core logic has multiple return paths, adding the log statement is
not straight forward. Extract finder logic into a ipaConfigurationFile()
function and call that with the name and optionally the fallbackName
from the configurationFile() function.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
There is no reason to allocate the frame info objects dynamically,
and then store raw pointers in the `std::map` in the rkisp1
and ipu3 pipeline handler.
Instead, store the objects directly in the map. This removes
the need for manually calling new/delete, simplifies the code,
and eliminates one memory allocation per frame.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Top-level `const` qualifiers are not useful, so avoid them. This is done
either by simply removing the top-level `const`, or making the function
return a reference to const where that is appropriate.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
This reverts commit 10cdc914da.
The constructors introduced by that commit are not used anywhere,
and they do not match the existing practice for boolean controls.
Specifically, every single boolean control is described by calling
the `ControlInfo(ControlValue, ControlValue, ControlValue)`
constructor. Crucially, that constructor does not set `values_`,
while the two removed constructors do. And whether or not `values_`
has any elements is currently used as an implicit sign to decide
whether or not the control is "enum-like", and those are assumed
to have type `int32_t`.
For example, any boolean control described using any of the two
removed constructors would cause an assertion in failure in
`CameraSession::listControls()` when calling `value.get<int32_t>()`.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@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>
Use `std::{forward,move}` to forward the arguments, this enables the
use of move constructors, likely leading to less code and better runtime.
For example, move constructing a libstdc++ `std::shared_ptr` is noticeably
less code than copy constructing one.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Iterate over all libcamera camera properties and report them as
device properties. Each libcamera ControlType is mapped to the
corresponding gstreamer GType. If the ControlValue is an array of
values (ControlValue::isArray()), GValue with type GST_TYPE_ARRAY
is used to set the value of that ControlValue with the corresponding
GType.
Signed-off-by: Umang Jain <uajain@igalia.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Move the existing GValue helpers from gstlibcamera-controls.cpp.in
to gstreamer-utils.cpp. The intention here is to make these helpers
available to other parts of gstreamer source element, for example,
reporting camera properties in GstDeviceProvider.
The function signature has been changed to match with the other
gstreamer-utils utility functions:
value_get_rectangle() => gst_libcamera_gvalue_get_rectangle()
value_set_rectangle() => gst_libcamera_gvalue_set_rectangle()
value_set_point() => gst_libcamera_gvalue_set_point()
value_set_size() => gst_libcamera_gvalue_set_size()
Signed-off-by: Umang Jain <uajain@igalia.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Split the value_set_rectangle() GValue helper into further
helpers pertaining to libcamera::Point and libcamera::Size.
This would help to cover additional cases where helpers
are needed for Point and Size individually (in subsequent commits).
The libcamera::Rectangle's GValue helper can be easily
constructed with the new Point and Size helpers. Hence,
this patch does not introduce any functional changes.
Signed-off-by: Umang Jain <uajain@igalia.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
For both vc4 and pisp, vd56g3.json has been generated using ctt with
rpi.dpc algorithm removed as this is already handled in the sensor's
ISP. vd56g3_mono.json has been adapted from vd56g3.json by removing
color correction related algorithms.
Adding Cyril Liotard and Jean Poire as co-developers for providing the
base vd56g3.json tuning files for vc4 and pisp respectively. Thank you.
Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
Co-developed-by: Cyril Liotard <cyril.liotard@st.com>
Signed-off-by: Cyril Liotard <cyril.liotard@st.com>
Co-developed-by: Jean Poire <jean.poire@st.com>
Signed-off-by: Jean Poire <jean.poire@st.com>
Reviewed-by: Naushir Patuck <naush@rasbperrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Add unit cell size from the 'pixel size' element in the datasheet.
Delays are set to 2 in case a setting is entered at the very end of the
N frame, the N+1 frame will miss it and only the N+2 frame will use this
new setting.
Note that vd56g3 has a diagonal color test pattern, but does not match
any description in specified test patterns and therefore is ignored.
Signed-off-by: Benjamin Mugnier <benjamin.mugnier@foss.st.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@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>