Age | Commit message (Collapse) | Author |
|
Even though the new AeEnable control internally switches on and off the
sub-controls (ExposureTimeMode and AnalogueGainMode), it still needs to
be declared as available. Report this control as available in the
rkisp1 IPA.
Support for the control does not need to be added as it is handled by
the Camera class. It does not need to be handled in metadata either as
the new version of AeEnable is not returned in metadata.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Handle the AeEnable under the hood in the Camera class, such that
AeEnable activates ExposureTimeMode and AnalogueGain together. This
allows applications the convenience of setting auto/manual mode of all
of the AE-related controls, as well as protecting applications against a
nasty behavior change if an aperture control is added in the future.
This also moves common handling code out of the IPA.
While we also want to inject AeEnable in Camera::controls() so that IPAs
don't have to report it, it is technically difficult at the moment as
ControlInfoMaps are not easily modifiable.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
In the redesign of the AE-related controls, the AeEnable control was
intended to be removed in favor of more specific sub-controls for
analogue gain and exposure time. However this will cause problems if
aperture sub-controls are introduced, and an application from a
pre-aperture era uses a camera that supports aperture.
If there is no AeEnable control, then a pre-aperture era application
might set analogue gain and exposure time to manual, while aperture
silently stays auto since that's the default mode. Thus aperture would
be uncontrollable by the application.
With an AeEnable control, then a pre-aperture era application can set
AeEnable to manual, and under the hood all three of analogue gain and
exposure time and aperture will be set to manual. The application won't
be able to set the manual aperture, however.
Although the above scenario is expected to be rare, the scenario with an
AeEnable control seems less detrimental. With an AeEnable control at
least the aperture would be static at a reasonably usable value, whereas
without an AeEnable the aperture would be more-or-less uncontrolable and
could go to extreme values as the AEGC algorithm tries to compensate for
the manual analogue gain and exposure time values.
Thus we redefine the AeEnable control, available only as a control and
not in metadata. It will be preprocessed by the Camera class so that the
relevant sub-controls are set. No pipline handler nor IPA shall act on
the AeEnable control. The IPA still has to report the control as
available, however.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Now that the codebase has been ported to use the new AEGC controls
remove the definition of AeLocked. AeEnable is not be removed as it will
be redefined.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Since AeEnable will be replaced with ExposureTimeMode and
AnalogueGainMode so that the two can be set between auto/manual
independently, update the gstreamer control ids generation to conform
with this.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Nicolas Nicolas <nicolas.dufresne@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The newly introduced controls to drive the AEGC algorithm allow
controlling the computation of the exposure time and analogue gain
separately.
Augument the RkISP1 AEGC implementation to handle the exposure and gain
controls separately using the new controls.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The newly introduced controls to drive the AEGC algorithm allow to
control the computation of the exposure time and analogue gain
separately.
The RPi AEGC implementation already computes the shutter and gain values
separately but does not expose separate functions to control them.
Augment the AgcAlgorithm interface to allow pausing/resuming the shutter
and gain automatic computations separately and plumb them to the newly
introduced controls.
Add safety checks to ignore ExposureTime and AnalogueGain values if the
algorithms are not paused, and report the correct AeState value by
checking if both algorithms have been paused or if they have converged.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Acked-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Replace the deprecated AeEnable control with DebugMetadataEnable
in ipa_data_serialization test. We use DebugMetadataEnable instead of
one of the controls replacing AeEnable as they are not boolean controls.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Port the UVC pipeline handler to use the new ExposureTimeMode control
when processing Camera controls in place of the AeEnable control.
The V4L2_CID_EXPOSURE_AUTO control allows 4 possible values, which
map to ExposureTimeModeAuto and ExposureTimeModeManual.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Document the design and rationale for the AE-related controls.
Also add documentation for the controls.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Introduce the AeState, ExposureTimeMode and AnalogueGainMode controls
to model the AEGC algorithm block.
The three controls allow applications to select the exposure time and
analogue gain computation calculation mode (auto vs manual)
independently from one another, while the AeState control reports the
global state for the AEGC algorithm.
The new controls are meant to replace the existing AeEnable and AeLocked
controls, which are momentarily kept not to break compilation of
platforms making use of them.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=42
Bug: https://bugs.libcamera.org/show_bug.cgi?id=43
Bug: https://bugs.libcamera.org/show_bug.cgi?id=47
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
gcc 13.3.0, as provided by buildroot 2024.11.1, chokes when compiling
v4l2_subdevice.cpp with ASan enabled, due to the usage of the C++
standard library regex header:
In file included from /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/functional:59,
from ../../include/libcamera/base/utils.h:12,
from ../../include/libcamera/base/log.h:15,
from ../../include/libcamera/internal/v4l2_subdevice.h:20,
from ../../src/libcamera/v4l2_subdevice.cpp:8:
In constructor ‘std::function<_Res(_ArgTypes ...)>::function(std::function<_Res(_ArgTypes ...)>&&) [with _Res = bool; _ArgTypes = {char}]’,
inlined from ‘std::__detail::_State<_Char_type>::_State(std::__detail::_State<_Char_type>&&) [with _Char_type = char]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:149:4,
inlined from ‘std::__detail::_StateIdT std::__detail::_NFA<_TraitsT>::_M_insert_subexpr_begin() [with _TraitsT = std::__cxx11::regex_traits<char>]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:281:24:
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/std_function.h:405:42: error: ‘*(std::function<bool(char)>*)((char*)&__tmp + offsetof(std::__detail::_StateT, std::__detail::_State<char>::<unnamed>.std::__detail::_State_base::<unnamed>)).std::function<bool(char)>::_M_invoker’ may be used uninitialized [-Werror=maybe-uninitialized]
405 | : _Function_base(), _M_invoker(__x._M_invoker)
| ~~~~^~~~~~~~~~
In file included from /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/regex:65,
from ../../src/libcamera/v4l2_subdevice.cpp:11:
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h: In member function ‘std::__detail::_StateIdT std::__detail::_NFA<_TraitsT>::_M_insert_subexpr_begin() [with _TraitsT = std::__cxx11::regex_traits<char>]’:
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:279:17: note: ‘__tmp’ declared here
279 | _StateT __tmp(_S_opcode_subexpr_begin);
| ^~~~~
In member function ‘bool std::_Function_base::_M_empty() const’,
inlined from ‘std::function<_Res(_ArgTypes ...)>::operator bool() const [with _Res = bool; _ArgTypes = {char}]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/std_function.h:574:25,
inlined from ‘std::function<_Res(_ArgTypes ...)>::function(std::function<_Res(_ArgTypes ...)>&&) [with _Res = bool; _ArgTypes = {char}]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/std_function.h:407:6,
inlined from ‘std::__detail::_State<_Char_type>::_State(std::__detail::_State<_Char_type>&&) [with _Char_type = char]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:149:4,
inlined from ‘std::__detail::_StateIdT std::__detail::_NFA<_TraitsT>::_M_insert_subexpr_begin() [with _TraitsT = std::__cxx11::regex_traits<char>]’ at /host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:281:24:
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/std_function.h:247:37: error: ‘*(const std::_Function_base*)((char*)&__tmp + offsetof(std::__detail::_StateT, std::__detail::_State<char>::<unnamed>.std::__detail::_State_base::<unnamed>)).std::_Function_base::_M_manager’ may be used uninitialized [-Werror=maybe-uninitialized]
247 | bool _M_empty() const { return !_M_manager; }
| ^~~~~~~~~~
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h: In member function ‘std::__detail::_StateIdT std::__detail::_NFA<_TraitsT>::_M_insert_subexpr_begin() [with _TraitsT = std::__cxx11:
/host/aarch64-buildroot-linux-gnu/include/c++/13.3.0/bits/regex_automaton.h:279:17: note: ‘__tmp’ declared here
279 | _StateT __tmp(_S_opcode_subexpr_begin);
| ^~~~~
This is a false positive that previously occurred with gcc 12.1.0 and
was fixed in 12.2 (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105562),
and it seems to have now reappeared. The bug report indicates that the
probability of such false positives increase when using sanitizers. As
this isn't caught by CI, which compiles libcamera with gcc 13.3.0, the
chance that such compilation failures will appear in environments
without a clear pattern is relatively high. Work around the problem by
disabling the warning around the inclusiong of the regex header.
If the regex header needs to be included in other source files, creating
a wrapped in libcamera-base may be a cleaner alternative.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
|
|
As DmaSyncer disables the copy c'tor, the move c'tor will be used
instead. This leaves some DmaSyncers with invalid SharedFDs. They should
avoid syncing with invalid file descriptors in the d'tor.
Fixes: 545046a41e17 ("DmaBufAllocator: Make DmaSyncer non-copyable")
Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>
Tested-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Install the example configuration file of the virtual pipeline
handler as it serves documentation purposes, and to make the
virtual pipeline handler easily usable in CI.
Nonetheless, the file is installed with the ".example" suffix
so that it will not be used by default, to avoid cluttering
the camera lists of users whose distributions decide to
enable the virtual pipeline handler.
The file is installed in the proper location for convenience:
(1) is is easier to use it in the CI;
(2) users need not browse documentation to determine where
they should place the file.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Harvey Yang <chenghaoyang@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The virtual pipeline handler prints an error message when its
configuration file can't be opened. Not providing a configuration file
is the default method to disable virtual cameras, so this error is
confusing for users. Replace it with a debug message when the
configuration file is not found, and keep an error message when it
exists but can't be opened.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The PipelineHandler::configurationFile() function prints an error
message when no configuration file is found. It can be useful for
pipeline handlers to silence the lookup operation and handle errors
themselves. Add a silent parameter to the function to enable this.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Consider `pipelines=auto,virtual`. Previously that would select
everything that `auto` would, but not actually enable the `virtual`
pipeline handler because the `pipelines` list was reset.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=247
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The v4l2 compatibility layer does not have external dependencies,
the usual benefits of a feature option do not apply. The main
motivation behind this change is making use of the `auto_features`
meson option that can change all feature options set to "auto"
by default to the desired value.
This can be useful for two reasons: (1) using auto_features=disabled
and then building up the list of features that are desired in the
particular build; (2) using auto_features=enabled to achieve
(usually) more testing and compilation coverage.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
If `FrameBufferAllocator::allocate()` causes the construction to be
aborted, the allocated `GstLibcameraAllocator` will not be
deallocated properly. Use `g_autoptr()` to address this.
`g_steal_pointer()` could only be used in glib 2.68 or later because
earlier it evaluates to a pointer-to-void in C++, which would necessitate
a `static_cast`.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
|
`FrameBufferAllocator::allocate()` might return a negative error code,
but currently this is handled the same way as success. So instead
of continuing, abort the construction of the allocator object.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
|
Previously we call Thread::setThreadAffinityInternal in
Thread::startThread. The purpose was to avoid the main workload being
run on incorrect CPUs. This leads to a race condition of setting
`Thread::thread_` in `Thread::start()` and accessing
`Thread::setThreadAffinityInternal` though.
This patch moves the call after the construction of std::thread to avoid
the race condition. The downside is that the first tasks, if any, upon
starting a thread might be run on incorrect CPUs.
Fixes: 4d9db06d6690 ("libcamera: add method to set thread affinity")
Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The error message for missing direction field prints the direction value
(usually 'None') instead of the name of the field 'direction'. Fix this.
Fixes: 39fe4ad96803 ("utils: codegen: controls.py: Parse direction information")
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Many libcamera headers that use standard C integer types do not include
stdint.h. Fix the omission.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Without the change the build fails on upcoming `gcc-15` as:
In file included from ../src/libcamera/dma_buf_allocator.cpp:9:
../include/libcamera/internal/dma_buf_allocator.h:66:19: error: 'uint64_t' has not been declared
66 | void sync(uint64_t step);
| ^~~~~~~~
Signed-off-by: Sergei Trofimovich <slyich@gmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
__nodiscard was introduced for compatibility with C++14.
In C++17, there is an official attribute: [[nodiscard]].
Moreover, some libc implementations (like bionic) already define the
__nodiscard macro [1].
Since:
- libcamera builds with cpp_std=c++17
- [[nodiscard]] is already used in the android HAL (exif)
We should replace all usage __nodiscard of by [[nodiscard]] for
consistency.
Do the replacement and remove the no longer used compiler.h.
[1] https://android-review.googlesource.com/c/platform/bionic/+/3254860
Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Some sensors support producing and transmitting embedded data over a
stream separate from the image stream. Add support for this feature in
the CameraSensor interface, and implement it for the CameraSensorRaw
class. The CameraSensorLegacy uses the default stub implementation, as
the corresponding kernel drivers don't support embedded data.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add a new CameraSensorRaw implementation of the CameraSensor interface
tailored to devices that implement the new V4L2 raw camera sensors API.
This new class duplicates code from the CameraSensorLegacy class. The
two classes will be refactored to share code.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
With support for metadata in the streams API, the v4l2_meta_format
structure has been extended with width, height and bytesperline fields.
Support them in the V4L2VideoDevice getFormat() and setFormat()
functions is the video device is meta capture device and if the
pixel format is one of the generic line-based metadata formats.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Support the newly introduced V4L2 media bus formats for metadata. This
includes generic metadata formats, and two sensor-specific embedded data
formats.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add the definition for the generic line based pixelformats.
The formats has been added in upstream Linux by commit
1d9215233958 ("media: uapi: v4l: Add generic 8-bit metadata format
definitions") which got merged in Linux v6.10.
The formats however are not yet available to userspace, as they
have been made only available to the kernel by commit
d69c8429ea80 ("media: uapi: v4l: Don't expose generic metadata formats
to userspace") to let the line-based metadata support stabilize before
allowing applications to use it.
With the forthcoming completion of the line-based metadata upstreaming
manually add the generic line based pixel format to prepare libcamera
to support them.
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Update the kernel headers with the definition of two device-specific
line-based metadata formats, and with the definition of the
MEDIA_PAD_FL_INTERNAL and V4L2_SUBDEV_ROUTE_FL_IMMUTABLE flags.
The new definitions will allow to support handling line-based
metadata streams exposed by the sensor driver through an
internal sink pad.
While the changes have not yet been collected in the official
linux-media tree, they're available in the 'metadata' branch of
https://git.linuxtv.org/sailus/media_tree.git, at revision:
f9bbbd9a696d ("media: Documentation: Add binning and sub-sampling
controls")
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add a CamHelper::setHwConfig() helper used by the IPA to set the
hardware configuration in use by the pipeline. This will be needed by
the IMX500 camera helper in a future commit to determine if the
metadata buffer is strided.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This property (dataBufferStrided) indicates if the CSI-2 hardware writes
to the embedded/metadata buffer directly, or if it treats the buffer
like an image buffer and strides the metadata lines.
Unicam writes this buffer strided, while the PiSP Frontend writes to it
directly. This information will be relevant to data parsers in the
helpers where the data is structured in lines.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
These functions erase a key/value pair from the metadata object.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Use an r-value reference in set() and setLocked(), allowing more
efficient metadata handling with std::forward and std::move if needed.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Basic tuning done by David Plowman using a Waveshare SKU 28524
"IMX415-98 IR-CUT Camera" module.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
As another Starvis sensor, it is near identical to imx290/327.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Believed correct based on imx290.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
As DmaSyncer does sync start/end in the c'tor/d'tor, copying a DmaSyncer
instance would trigger sync end earlier than expected. This patch makes
it non-copyable to avoid the issue.
Fixes: 39482d59fe71 ("DmaBufAllocator: Add Dma Buffer synchronization function & helper class")
Signed-off-by: Harvey Yang <chenghaoyang@chromium.org>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
After the initial generation, when a frame is requested,
the test pattern generator rotates the image left by 1 column.
The current approach has two shortcomings:
(1) it allocates a temporary buffer to hold one column;
(2) it swaps two columns at a time.
The test patterns are simple ARGB images, in row-major order,
so doing (2) works against memory prefetching. This can be
addressed by doing the rotation one row at a time as that way
the image is addressed in a purely linear fashion. Doing so also
eliminates the need for a dynamically allocated temporary buffer,
as the required buffer now only needs to hold one sample,
which is 4 bytes in this case.
In an optimized build, this results in about a 2x increase in the
number of frames per second as reported by `cam`. In an unoptimized,
ASAN and UBSAN intrumented build, the difference is even bigger,
which is useful for running lc-compliance in CI in a reasonable time.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
`PixelFormatInfo::planes.size()` always returns 3 since `planes` is
an array, but that is not the number of planes of the pixel format.
Use the `numPlanes()` getter instead.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
There is no reason make copies, these functions return
const lvalue references, access the data through those.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@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: 761545407c76 ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
- libcamera: rkisp1: Rectify SensorConfiguration check
- Fixes: 047d647452c4 ("libcamera: rkisp1: Integrate SensorConfiguration support")
- libcamera: controls: Add missing size to control_type<Point>
- Fixes: 200d535ca85f ("libcamera: controls: Add ControlTypePoint")
- pycamera: Add missing code for ControlTypePoint
- Fixes: 200d535ca85f ("libcamera: controls: Add ControlTypePoint")
- libcamera: software_isp: Clear IPA context on configure and stop
- Fixes: 04d171e6b299 ("libcamera: software_isp: Call Algorithm::queueRequest")
- utils: checkstyle.py: Centralize dependency handling for checkers
- Fixes: 8ffaf376bb53 ("utils: checkstyle: Add a python formatter")
- test: py: Fix log level restore in SimpleTestMethods()
- Fixes: 06cb7130c4fa ("py: Add unittests.py")
- v4l2: v4l2_camera_proxy: Fix VIDIOC_[GS]_PARM support
- Fixes: 5456e02d3f5b ("v4l2: Support setting frame rate in the V4L2 Adaptation layer")
- gstreamer: Remove auto-focus-mode property from device provider
- Fixes: 5a142438b025 ("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: ea8fd63d936f ("ipa: rpi: awb: Add a bias to the AWB search")
- meson: Don't unnecessarily fallback to libyuv wrap
- Fixes: eeaa7de21b8c ("libcamera: pipeline: Add test pattern for VirtualPipelineHandler")
- libcamera: Don't copy `StreamConfiguration` when iterating
- Fixes: 4217c9f1aa86 ("libcamera: camera: Zero streams before validate()")
- libcamera: software_isp: Actually apply black level from tuning data
- Fixes: 41e3d61c7451 ("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: 12b553d691d4 ("libcamera: rkisp1: Plumb the dw100 dewarper as V4L2M2M converter")
- pipeline: rkisp1: Limit sensor size to max resolution
- Fixes: 761545407c76 ("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>
|
|
The yaml definitions for controls now require a direction attribute
which is not auto generated by gen-debug-controls.py. Fix that.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add a lux algorithm module to rkisp1 IPA for estimating the lux level of
an image. This is reported in metadata, as well as saved in the frame
context so that other algorithms (mainly AGC) can use its value. It does
not set any controls.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
|
|
Add a Lux helper to libipa that does the estimation of the lux level
given gain, exposure, and luminance histogram. The helper also
handles reading the reference values from the tuning file. These are
expected to be common operations of lux algorithm modules in IPAs, and
is modeled/copied from Raspberry Pi.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
|
|
ColourTemperature is now exported as a writable control so that
applications can set it directly. The AWB algorithm class now requires
a method to be provided to perform this operation. The method should
clamp the passed value to the calibrated range known to the algorithm.
The default range is set very wide to cover all conceivable future AWB
calibrations. It will always be clamped before use.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Tested-by: Stefan Klug <stefan.klug@ideasonboard.com>
|
|
The rkisp1 tuner used a static module to insert the AWB algorithm into
the tuning file. Replace that with the new AWB module.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
This AWB module uses the awb function from Raspberry Pi to calculate the
needed white balance gains per colour temperature. It stores these gains
in the tuning file.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The color temperature member of the image object was named "col" in the
past. Now it is named "color" (which is still not very expressive).
There are still a few unspotted accesses to the col member. Fix them to
access the color member.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|