Age | Commit message (Collapse) | Author |
|
The streams API needs to be enabled explictly by setting a subdev client
capability. Do so unconditionally for subdevs that expose streams
support. We don't need any kernel version check to use the
VIDIOC_SUBDEV_S_CLIENT_CAP ioctl, as it is guaranteed to be supported by
kernels that support streams.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Update kernel headers to v6.7 using utils/update-kernel-headers.sh
and re-instating libcamera local modifications.
The V4L2_SUBDEV_CAP_MPLEXED flag has been renamed to
V4L2_SUBDEV_CAP_STREAMS in the upstream streams API. Adapt the code base
accordingly. The flag's numerical value hasn't changed, there is no ABI
breakage introduced by the API update.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The CameraSensorHelperFactory::createInstance() function overrides a
virtual function from CameraSensorHelperFactoryBase. The function
declaration doesn't mark it with the override keyword. This could cause
issues in the future if the base class' function changes, as the
compiler will not issue any warning in that case. Fix it.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@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>
|
|
Update mojo from commit
9be4263648d7d1a04bb78be75df53f56449a5e3a "Updating trunk VERSION from 6225.0 to 6226.0"
from the Chromium repository.
The update-mojo.sh script was used for this update.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=206
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The attributes checker ensures that .mojom files don't contain unknown
attributes. These check fail with the custom 'skipSerdes' and 'async'
libcamera attributes. Ideally the list of supported attributes should be
extended, but that can't easily be done without modifying the mojo
sources that we try to keep identical to the upstream version to make
updates easier. Disable the attributes checker completely for now to fix
this issue.
While at it, fix an indentation issue reported by checkstyle.py.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
Newer mojo versions import a 'checks' module located in the bindings
directory. In preparation for a mojo update, add the directory to the
Python path make the import work.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
Commit the mojo update with a standardized commit message. As mojo is
imported as-is without local modifications, this simplifies usage of the
update script.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
If the libcamera tree is dirty committing the result of the mojo update
will be messy. Bail out in that case.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
Instead of prefixing all paths to IPC files with ${ipc_dir}, change to
the libcamera sources root directory and use relative file paths. This
simplifies the update script.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
If an error occurs there's no point in ignoring it silently and
continuing. Exit immediately.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
The update-mojo.sh script starts by removing all sources before copying
the new files from chromium. A bug in the 'rm' command makes the removal
a no-op: the glob pattern is quoted, which attempts to remove a file
name '*' in the tools directory, not all files in the directory. Fix it
by removing the whole utils/ipc/mojo/ directory.
While at it, also remove the utils/ipc/tools/ directory that contains
imported sources.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.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>
|
|
The classes Rectangle, Size and SizeRange are referenced with \struct in
the doxygen comments in geometry.cpp. Correct the reference to \class
to better reflect their definition.
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The pre-push hook validates the commit messages utilising 'echo' to send
the captured data from the git commit through grep.
Commit messages may occasionally contain strings that could appear to be
escape sequences such as doxygen style references to \struct.
The '\' 'c' escape sequence can be interpreted to supress all further
output [0] which then breaks the processing and string matching.
Unfortunatley for us, doxygen's class reference constructed in the same
form as \struct can be interpreted as the escape sequence to supress
further output.
[0] https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins
Update the pre-push hook to explicitly disable escape sequence
interpretation using the '-E' flag. This is not available on the
posix-compliant shell 'dash', so also switch to bash explicitly to
prevent potential failures.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
All the Raspberry Pi official camera tuning files are updated for
HDR. As stated previously, there is no mechanism in the hardware for
combining images so all this does is enable multi-channel AGC to
produce short and long exposure frames. It will be up to the
application to deal with them.
The changes are identical in every tuning file.
1. The existing AGC tuning is duplicated twice so that we have 3 AGC
channels.
2. The first is left alone (the default AGC channel), the second is
tweaked to under-expose significantly (ev -3) and the final one is
tweaked to over-exposure slightly (ev +0.5)
3. Control parameters are provided to the "rpi.hdr" algorithm to
associate these AGC channels correctly with the HDR modes.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Sufficient plumbing is added so that the HDR mode control can be used
to engage HDR modes on platforms that support them. On the vc4
platform, this allows multi-channel AGC to run, though there is no
image merging.
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 vector in question is destroyed when the item in the `buffers_` map
is destroyed as a result of the `erase()` call. A vector's destructor
already does all the things that `clear()` does,
so calling it earlier is not needed.
Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
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>
|
|
Python 3.12 starts emitting the following warning when building libcamera:
.../utils/ipc/generators/mojom_libcamera_generator.py:372:
SyntaxWarning: invalid escape sequence '\.'
if not re.match('^ipa\.[0-9A-Za-z_]+', namespace):
`r' prefix is now required before the regexp.
Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
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>
|
|
When activating both ISP nodes on the i.MX8MP, but only connecting one
camera sensor, libcamera aborts because it couldn't find the chosen
entity's device node:
[37:54:40.779902250] [3631] DEBUG DeviceEnumerator device_enumerator.cpp:252 Added device /dev/media1: rkisp1
[37:54:40.780196750] [3631] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media0 found
[37:54:40.780237875] [3631] DEBUG DeviceEnumerator device_enumerator.cpp:252 Added device /dev/media0: rkisp1
[37:54:40.780505125] [3631] DEBUG Camera camera_manager.cpp:152 Found registered pipeline handler 'PipelineHandlerRkISP1'
[37:54:40.780599875] [3631] DEBUG DeviceEnumerator device_enumerator.cpp:312 Successful match for media device "rkisp1"
[37:54:40.780731375] [3631] ERROR V4L2 v4l2_device.cpp:93 'rkisp1_isp': Failed to open V4L2 device '': No such file or directory
Fix this by skipping empty device nodes:
[37:49:05.172672000] [3603] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media1 found
[37:49:05.172720625] [3603] DEBUG DeviceEnumerator device_enumerator.cpp:256 Added device /dev/media1: rkisp1
[37:49:05.172973875] [3603] DEBUG DeviceEnumerator device_enumerator_udev.cpp:322 All dependencies for media device /dev/media0 found
[37:49:05.173012125] [3603] DEBUG DeviceEnumerator device_enumerator.cpp:256 Added device /dev/media0: rkisp1
[37:49:05.173281625] [3603] DEBUG Camera camera_manager.cpp:152 Found registered pipeline handler 'PipelineHandlerRkISP1'
[37:49:05.173376875] [3603] DEBUG DeviceEnumerator device_enumerator.cpp:107 Skip rkisp1_isp: no device node
[37:49:05.173414375] [3603] DEBUG DeviceEnumerator device_enumerator.cpp:316 Successful match for media device "rkisp1"
[37:49:05.173671250] [3603] DEBUG V4L2 v4l2_videodevice.cpp:632 /dev/video1[15:cap]: Opened device platform:rkisp1: rkisp1: rkisp1_stats
[37:49:05.173775125] [3603] DEBUG V4L2 v4l2_videodevice.cpp:632 /dev/video2[16:out]: Opened device platform:rkisp1: rkisp1: rkisp1_params
[37:49:05.173880500] [3603] DEBUG V4L2 v4l2_videodevice.cpp:632 /dev/video0[18:cap]: Opened device platform:rkisp1: rkisp1: rkisp1
Signed-off-by: Benjamin Bara <benjamin.bara@skidata.com>
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>
|
|
The IPADataSerializer::deserializer attempts to optimise code paths and
remove potentially unused code where multiple File Descriptors were not
expected to be utilised.
The addition of multiple SharedFD entries in the IPC highlights this as
a bug.
Clean up the conditionals to ensure that all File Descriptors are
correctly deserialized.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=205
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Tested-by: Andrey Konovalov <andrey.konovalov@linaro.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>
|
|
The capture_test.cpp file was added in the source list of meson in the
wrong place. Fix it so the list is alphabetically sorted.
Signed-off-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Provide the OV64A40 tuning files for the Arducam Omnivision camera
module to operate on the VC4 ISP architecture on Raspberry Pi 4 and
below.
Signed-off-by: Lee Jackson <lee.jackson@arducam.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add a CameraSensorHelper for the OV64A40 camera sensor.
Signed-off-by: Jacopo Mondi <jacopo.mondi@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>
|
|
Support the OV64A40 sensor with a camera helper to manage the gain
model, light sensitivity, and control delays.
Signed-off-by: Lee Jackson <lee.jackson@arducam.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add an entry for the Omnivision OV64A40 Sensor which has a square pixel
size of 1.008µ.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Implement the StatsOutputEnable control for the VC4 IPA. When set,
this outputs the ISP statistics as a uint8_t span through the Bcm2835StatsOutput
metadata control.
To get this working, IpaBase::libcameraMetadata_ is moved from a private
to a protected member variable. This makes it accessable to the VC4
derived IPA class.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add a new control_ids_rpi.yaml file to hold the Raspberry Pi specific
vendor controls.
Define a control StatsOutputEnable to allow the ISP hardware statistics
to be output through metadata via the Bcm2835StatsOutput control. The
implementation of these controls will follow in a subsequent patch.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Previously the code would brighten up images in case the Macbeth Chart
is slightly dark, and also zoom in on sections of it to look for
charts occupying less of the field of view. But it would not do both
together.
This change makes the search for smaller charts also repeat that
search for the brightened up images that it made earlier, thereby
increasing the chances of success for non-optimal tuning images.
There are also a couple of very small drive-by typo fixes.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This allows the IPA to get reasonable default colour gains before AWB
has run. This is particularly important on the PiSP platform where
these numbers are helpful in programming the Front End statistics
block in advance.
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>
|
|
This allows the IPA to discover the correct black level values even
before any frames have been processed. This is important on the PiSP
platform where the front end black level blocks must be programmed in
advance.
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>
|
|
Don't assert when taking the weighted mean of a zero-width or
zero-weight interval; return its upper bound. That is certainly
correct in the zero-width case, and plausible otherwise.
Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The language argument to the code-block directive was mandatory in
Sphinx before 2.0. Fix the few instances where no language is specified
to support older versions of Sphinx.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The gst_clear_event() function used by libcamerasrc has been introduced
in GStreamer 1.16, while libcamera claims to need 1.14 or newer. This
causes a compilation error. Fix it by copying the gst_clear_event()
implementation to gstlibcamera-utils.h when compiling with older
GStreamer version.
The version check makes it clear that the workaround is needed with
older versions only, flagging it for removal when the minimum GStreamer
version requirement will be bumped.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
lc-compliance depends on support for skipping tests in gtest (commit
00938b2b228f upstream, merged in v1.10.0). Set the corresponding minimum
version for the gtest dependency.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Advertise hardware constraints on the pixel processing rate through the
Controller::HardwareConfig structure. When calculating the minimum line
length during a configure() operation, ensure that we don't exceed this
constraint.
If we do exceed the hardware constraints, increase the modes's minimum
line length so the pixel processing rate falls below the hardware limit.
If this is not possible, throw a loud error message in the logs.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
When converting from StreamConfiguration to V4L2DeviceFormat, the stride
was being dropped with the result that users could not request a custom
stride.
Set the stride in the V4L2DeviceFormat to prevent this happening.
Signed-off-by: William Vinnicombe <william.vinnicombe@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
When compiling with gcc 8.4.0, the compiler was reported to throw an
unused variable warning:
../src/libcamera/camera.cpp: In member function ‘libcamera::CameraConfiguration::Status libcamera::CameraConfiguration::validateColorSpaces(libcamera::CameraConfiguration::ColorSpaceFlags)’:
../src/libcamera/camera.cpp:497:19: error: unused variable ‘i’ [-Werror=unused-variable]
for (auto [i, cfg] : utils::enumerate(config_)) {
^
The build environment may have been incorrect as the problem couldn't be
reproduced with gcc 8.3.0 and 8.5.0. Nonetheless, the 'i' variable is
indeed unused. It turns out that the code can be simplified, as the
commit that removed usage of the variable kept the now unneeded
utils::enumerate() call.
Simplify the code and fix the warning in one go.
Fixes: 13986d6ce3ab ("libcamera: camera: Fix validateColorSpaces to choose "main" colour space")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Starting with meson 0.59, the custom_target() function substitutes
'@BASENAME@' in the output parameter with the input file name, with the
extension removed. This is exactly what we implement manually when
generating the IPA interface .cpp files.
Furthermore, starting with meson 0.60, the 'name' positional parameter
to the custom_target() function is optional, and defaults to the
basename of the output file (including the extension). This is exactly
the name we compute manually and pass to the function.
As libcamera requires meson 0.60 or newer, we can depend on those two
features and drop manual computation of the base name. This fixes a
warning with recent meson versions that complain that passing a file
object to the format() function is a broken feature:
WARNING: Broken features used:
* 1.3.0: {'str.format: Value other than strings, integers, bools, options, dictionaries and lists thereof.'}
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
lc-compliance requires gtest. When not available on the system, we
install it using a meson wrap, but it is still better to install the
system package. Add it as a dependency in README.rst.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The GStreamer single stream test uses the following pipeline:
libcamerasrc ! videoconvert ! fakesink
The videoconvert element isn't useful as the data is thrown away by the
fakesink anyway. We can shorten the pipeline to
libcamerasrc ! fakesink
to save CPU time and to avoid depending on the gstreamer1.0-plugins-base
package to run the unit tests.
The test could be further simplified by replacing
gst_parse_bin_from_description_full() with gst_element_factory_make(),
now that we only add one element to the bin. The extra cost incurred by
the bin only impacts initialization time, and using a bin will make it
easier to add other elements in the future if needed. Keep the bin, and
only drop the videoconvert element.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
When running tests on slower devices, 200ms is too low to wait for the
process to exit. Increase the timeout to 2s.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
When running tests on slower devices, 200ms is too low to wait for the
process to exit. Increase the timeout to 2s.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
When the process fails to run and exit normally, the test prints an
error message that provides little information:
process did not exit normally
Expand the error message to print the exit status to make debugging
easier.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
If the process fails to exit before the timeout, the
LogProcessTest::exitStatus_ variable gets used uninitialized. Fix it by
initializating to Process::NotExited.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
One of the error paths in the test returns without logging a message,
which makes failures difficult to debug. Fix it by adding an error
message.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-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>
|
|
This commit implements renegotiation of the camera configuration and
source pad caps. A renegotiation can happen when a downstream element
decides to change caps or the pipeline is dynamically changed.
To handle a renegotiation the GST_FLOW_NOT_NEGOTIATED return value has
to be handled in GstLibcameraSrcState::processRequest(). Otherwise the
default would be to print an error and stop streaming.
To archive this in a clean way the if statement is altered into a switch
statement which now also has a case for GST_FLOW_NOT_NEGOTIATED. In the
case of GST_FLOW_NOT_NEGOTIATED every source pad is checked for the
reconfiguration flag with gst_pad_needs_reconfigure() which does not
clear this flag. If at least one pad requested a reconfiguration the
function returns without an error and the renegotiation will happen
later in the running task. If no pad requested a reconfiguration then
the function will return with an error.
In gst_libcamera_src_task_run() the source pads are checked for the
reconfigure flag by calling gst_pad_check_reconfigure() and if one pad
returns true and the caps are not sufficient anymore then the
negotiation is triggered. It is fine to trigger the negotiation after
only a single pad returns true for gst_pad_check_reconfigure() because
the reconfigure flags are cleared in the gst_libcamera_src_negotiate()
function.
If any pad requested a reconfiguration the following will happen:
1. The camera is stopped because changing the configuration may not
happen while running.
2. The completedRequests queue will be cleared by calling
GstLibcameraSrcState::clearRequests() because the completed buffers
have the wrong configuration.
3. The new caps are negotiated by calling gst_libcamera_src_negotiate().
When the negotiation fails streaming will stop.
4. The camera is started again.
Signed-off-by: Jaslo Ziska <jaslo@ziska.de>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Tested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Add a clearRequests() function to GstLibcameraSrcState which clears the
GstLibcameraSrcState::completedRequests_ queue.
Use this new function in gst_libcamera_src_task_leave() instead of doing
it manually.
Signed-off-by: Jaslo Ziska <jaslo@ziska.de>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Tested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Move the code which negotiates all the source pad caps into a separate
function called gst_libcamera_src_negotiate(). When the negotiation
fails this function will return false and true otherwise.
Use this function instead of doing the negotiation manually in
gst_libcamera_src_task_enter() and remove the now redundant error
handling code accordingly.
Signed-off-by: Jaslo Ziska <jaslo@ziska.de>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Tested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
A couple of comments are mis-indented in the gstreamer unit test. Fix
them, and reflow the text while at it.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|