Age | Commit message (Collapse) | Author |
|
C++20 deprecates bitwise operations between different enumeration types.
This is a bad practice even in C++17, so enable the deprecation warning.
Doing so ensures no such operations will be added.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
|
|
uClibc doesn't provide a memfd_create() implementation. Fix it by using
a direct syscall when the function isn't available.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
|
|
Add a pipeline handler for the Mali-C55 ISP.
The pipeline doesn't currently support an IPA and does not run
any 3a algorithm but only handles the media graph topology and
formats/sizes configuration
Co-developed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Acked-by: Nayden Kanchev <nayden.kanchev@arm.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>
|
|
Meson uses tags to sort installed files in categories, and makes it
possible to install a subset of the files using the '--tags' argument to
'meson install'. This is typically used by distributions to split the
runtime, development and documentation files into separate packages.
By default, meson tries to guess the correct tag for installed files,
but can't always do so properly. Mark the install targets that meson
can't guess with the correct install_tag.
As the feature has been introduced in meson 0.60, bump the minimum meson
version. The latest LTS release of all major distributions that
libcamera currently targets ship a recent enough meson version.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
|
|
Add support for using separate YAML files for controls and properties
generation. The mapping of vendor/pipeline handler to control file is
done through the controls_map variable in include/libcamera/meson.build.
This simplifies management of vendor control definitions and avoids
possible merge conflicts when changing the control_ids.yaml file for
core and draft controls. With this change, libcamera and draft controls
and properties files are designated the 'libcamera' vendor tag.
In this change, we also rename control_ids.yaml -> control_ids_core.yaml
and property_ids.yaml -> property_ids_core.yaml to designate these as
core libcamera controls.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Use the compiler.get_define() function to get the value of
_FORTIFY_SOURCE instead of iterating over the cpp_args. This simplies
the code, but also guarantees to return the actual value of
_FORTIFY_SOURCE, even if defined through other means than through the
meson cpp_args.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: George Burgess IV <gbiv@google.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
|
|
ChromeOS is moving to a platform default of `_FORTIFY_SOURCE=3`, and
this definition conflicts with that:
<command line>:4:9: error: '_FORTIFY_SOURCE' macro redefined
[-Werror,-Wmacro-redefined]
Rather than adding logic to keep up with their local configuration, it
seems best to leave setting _FORTIFY_SOURCE on ChromeOS up to ChromeOS.
Signed-off-by: George Burgess IV <gbiv@google.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The meson find_library() function takes a library name without the "lib"
prefix. Its usage to find lic++ is thus not correct, and meson warns
about it:
WARNING: find_library('libc++') starting in "lib" only works by accident and is not portable
Fix it by dropping the "lib" prefix.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
ABI Compliance:
abi-compliance-checker reports 99% binary compatibility and 81.4% source
compatibilty between version 0.0.5 and 0.1.
- Binary compatibility: 99%
- Source compatibility: 81.4%
- Total binary compatibility problems: 4, warnings: 2
- Total source compatibility problems: 165, warnings: 7
Now that we have funtional ABI validation, the soname has been updated from
libcamera.so.0.0.5 to libcamera.so.0.1.
Future releases will now maintain the same soname until an ABI breakage is
detected to reduce the repackaging and rebuilding of other components that may
use libcamera. The abi-compatibility report can now be generated with the new
utility './utils/abi-compat.sh'.
Key differences here are due to preventing the installation of internal and
private headers in the packaging process, and most of this API compatibility
should not be visible to applications with the exception of:
- Camera::generateConfiguration ( StreamRoles const& roles )
The StreamRoles type definition has been removed. This is now handled as a
Span<StreamRole> to prevent unnecessary allocations and copies.
- CameraManager::addCamera ( std::shared_ptr<struct Camera> camera, std::vector<unsigned long>const& devnums )
- CameraManager::get ( dev_t devnum )
- CameraManager::removeCamera ( std::shared_ptr<struct Camera> camera )
These functions of the CameraManager were for use exclusively by the V4L2
adaptation layer, and not intended for use by applications. This has now been
reworked to use the new SystemDevices and the redundant functions removed.
The ABI/API breakages have been introduced by:
5ca0c9276f28 ("libcamera: CameraManager: Remove ::get(dev_t)")
26a4b83d1b94 ("libcamera: Remove `StreamRoles` alias")
63966ae587d7 ("libcamera: base: Do not install private headers")
Core:
- libcamera: v4l2_videodevice: Use O_CLOEXEC when exporting DMA buffers
- libcamera: ipa_manager: Allow IPA loading in nested subdirs
- meson: Fix usage of overwritten pipeline variable
- subprojects: Drop leftovers of pybind11
- camera_sensor: ipa: core: Add CFA pattern to IPACameraSensorInfo
- libcamera: controls: Define a default lens position behaviour
- libcamera: internal: request: convert to pragma once
- libcamera: camera_manager: Move private implementation to internal
- libcamera: camera_manager: Move {add,remove}Camera to internal
- libcamera: properties: Provide a Devices camera property
- libcamera: pipeline: Register device numbers with camera
- libcamera: camera_sensor: Adjust properties::Rotation
- libcamera: meson: Allow PH to change libcamera_deps
- libcamera: base: Move thread_annotations to private
- libcamera: base: Do not install private headers
- utils: ABI Compatibility checker
- meson: Use x.y soname versioning
- libcamera: camera: Take span of StreamRole instead of vector
- libcamera: Remove `StreamRoles` alias
- utils: ipu3-capture.sh: Fix the script to work with recent media-ctl versions
- Documentation: Add predefined macros from config.h to Doxyfile
- utils: checkstyle: Add __repr__ method to CommitFile class
- utils: checkstyle: Support running checkers selectively
- utils: checkstyle: Don't include commit ID in commit title
- utils: checkstyle: Add trailers checker
- tests: gstreamer: Test cameras' enumeration from GstDeviceProvider
- meson: Fix space around colon issues
- libcamera: Add option to configure udev support
- libcamera: CameraManager: Remove ::get(dev_t)
- tests: gstreamer: Fix compiler error with gcc 8.4.0
ipa:
- meson: ipa: Add mapping for pipeline handler to mojom interface file
- libcamera: ipa: Remove character restriction on the IPA name
- ipa: meson: Allow nested IPA directory structures
- ipa: raspberrypi: Introduce IpaBase class
- ipa: raspberrypi: agc: Move weights out of AGC
- ipa: rkisp1: agc: drop hard-coded analogue gain range
- libipa: camera_sensor_helper: Add IMX327 helper
- pipeline: rpi: ipa_base: Parse config files after platformRegister()
- libcamera: camera_sensor: Add Sony IMX327 sensor properties
- ipa: rpi: imx296: Small refinements to the IMX296 mono sensor tuning
- ipa: rpi: Handle controls for mono variant sensors
- libcamera: controls: Drop reference to IPA in controls documentation
- libipa: camera_sensor_helper: Restore alphabetical order
- ipa: ipu3: agc: Drop hard-codec analogue gain max
- ipa: rkisp1: agc: Restore minimum analogue gain limit
- pipeline: ipa: rpi: Return lens controls from ipa->configure()
- ipa: rpi: Set lens position to hyperfocal on startup
- ipa: rpi: tunings: Add missing short and long exposure profiles
- ipa: rpi: agc: Use std::string instead of char arrays
- ipa: rpi: agc: Gracefully handle missing agc modes
- ipa: rpi: agc: Do not switch to a default if a mode is unavailable
- ipa: rpi: imx708: Fix mode switch drop frame count
- ipa: rpi: imx296_mono: Disable all colour shading
pipeline:
- libcamera: pipeline: simple: Add support for ST's DCMIPP
- pipeline: meson: Allow nested pipeline handler directory structures
- pipeline: ipa: raspberrypi: Refactor and move the Raspberry Pi code
- pipeline: raspberrypi: rpi_stream: Set invalid buffer to id == 0
- pipeline: ipa: raspberrypi: Restructure the IPA mojom interface
- pipeline: raspberrypi: Make RPi::Stream::name() return const std::string &
- pipeline: raspberrypi: Introduce PipelineHandlerBase class
- pipeline: raspberrypi: Add stream flags to RPi::Stream
- libcamera: rkisp1: Generate config using main path
- libcamera: rkisp1: Crop on ISP before downscaling
- libcamera: rkisp1: Assign sizes to roles
- libcamera: rkisp1: Fix enumeration of RAW formats
- pipeline: rpi: Do not return an error from pipeline config file handling
- libcamera: pipeline: simple: Support TI CSI-RX
- pipeline: rpi: Account for Bayer packing when validating format
apps:
- apps: qcam: Remove redundant check
- v4l2: Move the v4l2 compat layer to libexec/libcamera
- android: mm: generic: use GRALLOC_HARDWARE_MODULE_ID
- android: mm: Stub libhardware for build tests
- py: Fix CameraManager.version property
- py: Move ColorSpace and Transform classes to separate files
- py: Use exceptions instead of returning error codes
- py: unittests.py: Add weakref helpers and use del
- py: Move to mainline pybind11 version
- py: Fix code formatting
- py: unittests.py: Fix type checker warnings
- gstreamer: Add enable_auto_focus option to the GStreamer plugin
- gstreamer: Drop libcamera_private dependency
- apps: Add ipa-verify application
- v4l2: v4l2_camera_proxy: Prevent ioctl sign-extensions
- v4l2: Use SystemDevices properties to identify cameras
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
libcamera uses udev to support hotplug (and unplug) detection. This is
an optional feature, which gets selected automatically if udev is
available. Users may however want to build libcamera without hotplug
detection, even if udev is available on the system. Add a new feature
option to control udev support. The default value is auto, which retains
the existing behaviour.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The meson style, which libcamera follows, recommends a space before
colons in function parameters. Fix the style violations through the
project.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
|
|
libcamera creates a config.h file with predefined macros, and instructs
the compiler to include it implicitly with the -include argument.
Doxygen has no support for implicit inclusion of headers, but has a
PREDEFINED configuration option for its preprocessor that lists
predefined macros. Populate it with the values from the config_h
configuration data object that is used for generate the config.h file,
to ensure that documentation matches the configuration options libcamera
has been built with.
Bump the minimum meson version to 0.57 to use cfg_data.keys().
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Now that we identify ABI breakages, provide incremental releases which
can support backwards compatible linkage across release points that have
a compatible ABI.
Introduction of this commit does not convey that libcamera now has a
stable API, but that patch releases with a common minor number
(0.minor.patch) may potentially be used by applications without
recompilation and linkage against new releases.
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Split the Raspberry Pi pipeline handler and IPA source code into common
and VC4/BCM2835 specific file structures.
For the pipeline handler, the common code files now live in
src/libcamera/pipeline/rpi/common/
and the VC4-specific files in src/libcamera/pipeline/rpi/vc4/.
For the IPA, the common code files now live in
src/ipa/rpi/{cam_helper,controller}/
and the vc4 specific files in src/ipa/rpi/vc4/. With this change, the
camera tuning files are now installed under share/libcamera/ipa/rpi/vc4/.
To build the pipeline and IPA, the meson configuration options have now
changed from "raspberrypi" to "rpi/vc4":
meson setup build -Dipas=rpi/vc4 -Dpipelines=rpi/vc4
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The current IPA build files require a flat directory structure for the
IPAs. Modify the build files to remove this restriction and allow a
directory structure such as:
src/ipa
|- raspberrypi
|- common
|- cam_helpers
|- controller
|- vc4
|- rkisp1
|- ipu3
where each subdir (e.g. raspberrypi/common, raspberrypi/cam_helper) has
its own meson.build file. Such a directory structure will be introduced
for the Raspberry Pi IPA in a future commit.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Bugfixes:
- meson: Ignore -Wredundant-move with gcc-13 and newer
- cam: file_sink: Workaround gcc-13 dangling-reference false positive
- libcamera: Open files with O_CLOEXEC
- meson: Fix git version parsing
- libcamera: camera_manager: Stop exponential explosive calls to createPipelineHandlers
- py: cam: Fix demosaic overflow issue
- libcamera: base: Make the registration of log categories atomic
Core:
- test: controls: control_info_map: Test default constructor
- controls: guard ControlInfoMap against nullptr idmap_
- device_enumerator_udev: Use std::string_view
- formats: Add 14-bits Bayer RAW formats
- device_enumerator_udev: Remove devnum from dependency map
- meson: libcamera: Report IPA signature method
- meson: Align handling of build metadata
- converter: Check converter validity
- Keep using syslog for isolated IPA modules
- utils: ipc: Update parser.py
- utils: checkstyle.py: Don't run commit title checker on staged commits
- framebuffer: Allow inheritance of FrameBuffer
- Remove transform from V4L2SubdeviceFormat
- libcamera: camera_sensor: Add tryFormat()
- camera_sensor: Fix typo in comment
- camera_sensor: Demote flip support message to Debug
- internal: tracepoints: Use correct include directive
- libcamera: camera: Ensure queued requests are invalid
ipa:
- doc: Clarify IPA acronym in its namespace description
- rkisp1: Add tuning files for PinephonePro sensors
- rkisp1: Add tuning files for Google DRU "Scarlet" sensors
- rkisp1: lsc: Fix integer division error
- libipa: Add OV2685 Camera Sensor Helper
- libipa: Add OV5647 Camera Sensor Helper
- raspberrypi: agc: Add "shadows" constraint mode
- raspberrypi: generalise algorithms
- raspberrypi: Fix default frame durations calculation
- raspberrypi: Ensure shutter speed and gain are clipped in the AGC
- raspberrypi: Use the new sensor limits fields in CameraMode
- raspberrypi: Add sensor mode limits to CameraMode
- raspberrypi: Fix crash under LTO
- raspberrypi: imx296: Minor tuning updates
- raspberrypi: agc: Fix overflow in Y value calculation
- raspberrypi: Better heuristics for calculating Unicam timeout
- raspberrypi: Generalise statistics
- raspberrypi: Change Unicam timeout handling
pipeline:
- simple: Validate transform
- imx8-isi: Remove mbusCode from formatsMap_
- imx8-isi: Automatically select media bus code
- imx8-isi: Split Bayer/YUV config generation
- imx8-isi: Break out RAW/YUV format selection
- raspberrypi: Iterate over all Unicam instances in match()
- raspberrypi: Add a Unicam timeout override config options
- raspberrypi: Always use ColorSpace::Raw for raw streams
- raspberrypi: Drop unused code
- ipu3: Drop unused code
apps:
- cam: kms_sink: Drop unique_ptr<> from DRM::AtomicRequest
- cam Return std::optional<> from StreamKeyValueParser::parseRole()
- android: jpeg: Add JEA implementation
ABI Compliance:
* abi-compliance-checker reports 98.6% ABI and 100% API compatibility with
with v0.0.4
Total binary compatibility problems: 1, warnings: 1
Total source compatibility problems: 0, warnings: 0
- First virtual method ~__dt ( ) has been added to this class.
1) The layout of type structure has been shifted by 8 bytes by the added v-table pointer.
2) Size of class has been increased by 8 bytes.
affected symbols: 6 (1.4%)
FrameBuffer::releaseFence ( )
FrameBuffer::setCookie ( uint64_t cookie )
FrameBuffer::cookie ( )
FrameBuffer::planes ( )
FrameBuffer::request ( )
FrameBuffer::metadata ( )
This ABI breakage was introduced by:
4843bfa66dc1 ("libcamera: framebuffer: Allow inheritance of FrameBuffer")
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Starting from 13.1, gcc implements the C++23 version of automatic move
from local variables in return statements (see
https://en.cppreference.com/w/cpp/language/return). As a result, some
previously required explicit `std::move()` in return statements generate
warnings. This is the case when a function returns an object whose type
is a class derived from the class type the function returns:
struct U { };
struct T : U { };
U f()
{
T t;
return t;
}
Up to C++20, the automatic move from local variables selects the move
constructor of class U, which is not the move constructor of the
expression. Overload resolution is then performed a second time, with t
considered as an lvalue. An explicit `std::move(t)` is needed in the
return statement to select the U move constructor.
Starting from C++23, `t` is treated as an xvalue, and the U move
constructor is selected without the need for an explicit `std::move(t)`.
An explicit `std:move()` then generates a redundant-move warning, as in
the valueOrTuple() function in src/py/libcamera/py_helpers.cpp.
Omitting the `std::move()` silences the warning, but selects the copy
constructor of U with older gcc versions and with clang, which
negatively impacts performance.
The easiest fix is to disable the warning. With -Wpessimizing-move
enabled, the compiler will still warn of pessimizing moves, only the
redundant but not pessimizing moves will be ignored.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The previous attempt to fix git version parsing in commit d34cefad1791
("meson: Fix git version parsing") was too naive, and didn't take into
account cases where the libcamera git version contains no or multiple
'+' signs.
Fixing this is more complex than a one-liner change, as meson doesn't
support Python-style slicing of arrays or a length method on strings.
The simplest and most versatile option is to patch the version string in
the gen-version.sh script. Do so, and clarify the comments related to
version handling in meson.build.
Fixes: d34cefad1791 ("meson: Fix git version parsing")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
|
|
When extracting the build metadata from the git version, we use the
string strip() method to remove the version prefix. This is incorrect,
as the strip() method takes a set of characters to be removed, not a
literal string. Fix it by splitting the git version string on the '+'
character and keeping the suffix.
Fixes: 02518e598e8f ("meson: Rewrite .replace usage")
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Michael Riesch <michael.riesch@wolfvision.net>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The build metadata is split off correctly from the version string
obtained with utils/gen-version.sh, but for the meson project version
this step is not carried out. However, since libcamera uses Semantic
Versioning, it should be possible to add build metadata to the meson
project version. Align the handling of the build metadata to resolve
this mismatch.
Signed-off-by: Michael Riesch <michael.riesch@wolfvision.net>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Bugfixes:
* libcamera: yaml_parser: Use C locale
* libcamera: base: utils: Support C libraries lacking locale support
* py: cam.py: Fix duplicate metadata output if more than one stream
* libcamera: camera: Fix validateColorSpaces to choose main colour space
* pipeline: raspberrypi: Fix handling of colour spaces
Core:
* test: Fix/Enable testing with ASan
* test: Remove redundant pipeline tests
* meson: Only build pipeline handlers needed in host architecture
* meson: Add 'all' choice to pipelines option
* utils: checkstyle.py: Add commit title checker
* libcamera: ipa_module: Relax ipaModuleInfo symbol size check
* pipeline: Support configuration file paths
ipa:
* camera_sensor: Improve h/v flip handling
* camera_sensor: Add AR0521 Sensor support
* camera_sensor: Add OV4689 Sensor support
* camera_sensor: Add support for OmniVision OV8858
* raspberrypi: Support Autofocus with PDAF
* raspberrypi: Support for the Sony IMX708 sensor
* rkisp1: Raise maximum analogue gain
pipeline:
* raspberrypi: Support parameters from a configuration file
* raspberrypi: Add a parameter to disable startup drop frames
* libcamera: rkisp1: Add support for Transform
apps:
* gstreamer: Add bayer8 support to libcamerasrc
* qcam: Show string representation of pixel format
ABI Compliance:
* abi-compliance-checker reports 100% ABI and API compatibility with
with v0.0.3
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The supported pipelines are listed in three places: the
meson_options.txt file, the defined array when a user selects
-Dpipelines="all", and arrays defined when the default
-Dpipelines="auto" is selected.
This can be hard to maintain and error prone.
Rework the definition of pipeline selection to a single table which
specifies the architecture(s) that the pipeline handler supports and
iterate it to handle the special cases for 'all', 'auto' and 'test'.
The current behaviour such that 'all' takes precedence over 'auto' is
maintained, and 'test' is now extended such that additional test
pipeline handlers can easily be introduced.
The existing implementation defines the i.MX8-ISI and RKISP1 pipeline
handlers as only supported by 'aarch64'. This conversion changes the
behaviour such that those pipeline handlers are now supported on both
'arm' and 'aarch64' as each of those platforms could support a 32-bit
ARM build.
Suggested-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Not all C libraries include support for locale objects (locale_t) and
the strto*_l() family of functions. A notable example is uClibc that can
be compiled with a hardcoded "C" locale. Compilation then fails as the
newlocale(), freelocale() and strtod_l() functions are not defined.
Fix the compilation breakage by checking for the availability of the
locale_t type, and fall back to strtod() when the type isn't available.
This may not lead to the correct result if support for locale objects
isn't available and the locale isn't hardcoded to "C", but that is such
a corner case that we will likely never encounter it.
Fixes: e8ae254970cf ("libcamera: yaml_parser: Use C locale")
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>
|
|
Add an 'all' choice to the pipelines option, for building all pipelines.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
|
|
By default all pipeline handlers are built, regardless on whether these
are needed in the host architecture or not. It makes more sense to build
only the pipeline handlers that will be used for the given architecture.
Let's do that by default now, but still allow to build the other
pipeline handlers if needed, by using the `pipelines` meson option. For
example, on a x86-64 platform:
$ meson build
...
Configuration
Enabled pipelines : ipu3
uvcvideo
Enabled IPA modules : ipu3
...
$ meson build -Dpipelines="ipu3,raspberrypi,rkisp1" -Dtest=true
...
Configuration
Enabled pipelines : ipu3
raspberrypi
rkisp1
vimc
Enabled IPA modules : ipu3
raspberrypi
rkisp1
vimc
...
Suggested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.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>
|
|
Key bug fixes:
* Segfault in the ContolInfo() constructor for an empty V4L2 menu
Bug: https://bugs.libcamera.org/show_bug.cgi?id=167
Fix: libcamera: v4l2_device: Workaround faulty control menus
This resolves and prevents crashes that have occured in Pipewire when
users connect poorly implemented UVC devices.
ABI Compliance:
abi-compliance-checker reports 100% ABI and API compatibility with with
v0.0.2, however 81e7689bb168 ("libcamera: stream: Turn StreamRole into
scoped enumeration") modifies an enum into a class enum. This may need
minor updates to applications, and didn't appear to be picked up by
abi-compliance-checker.
- See https://git.libcamera.org/libcamera/libcamera.git/commit/?id=81e7689bb168a for more details.
Highlights:
Core:
* Fix tracing when built as a subproject
* Avoid double map lookups in framebuffer_allocator
* Workaround faulty control menus
* controls: Change LensPosition units to dioptres
* camera_sensor: Add IMX519 sensor properties
* Documentation: contributing: Add commit message guidelines
* Declare generic converter interface
utils:
* Add libtuning
* Add initial libtuning script support for rkisp1 and raspberrypi.
* checkstyle.py: Check new header file on new and renamed meson.build files
ipa:
* Move IPA sensor controls validation to CameraSensor (IPU3/RKISP1)
rkisp1:
* Support FrameDurationLimits control for FrameRate management
* Support raw capture (IPA, configuration, and runtime)
* Add support for manual gain and exposure
* Fix stream size validation
* Add additional default values to controls
imx8-isi:
* Enumerate supported stream formats
* Set SensorTimestamp metadata
Raspberry Pi:
* Remove generic "pause" mechanism from Algorithm
- Remove enum BuffferMask from the mojom interface
- Fix digital gain calculations for manual mode
- Fix bug in IPA frame drop logic
- imx477: Update tuning file for the latest camera modules
- Add a "scientific" tuning for the IMX477
Apps:
- cam: kms: Avoid 'unused-parameter' warnings
- cam: Support parsing array controls in capture scripts
- gstreamer: Improve control id lookups
- lc-compliance: simple_capture: Free Requests properly
python:
- Support controls that use an array of Rectangles
- Expose the Request Sequence Number in Python Bindings
test:
- Validate CameraSensor Ancillary Devices (focusLens)
- controls: control_info: Test default def() values
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This release contains all the work merged to libcamera over the last 5
weeks, including the following summary highlights:
Highlights:
Core:
* New pipeline handler for the IMX ISI
* Fixed memory leak in the logging infrastructure
* Fixed meson support for 0.56
* Additional Thread Safety annotations added throughout
* Add a release method to pipeline handlers to support
freeing resources when a camera is released, but not
deleted.
* Group test applications under src/apps
* Make libdl optional to support Android builds
Application layers:
* Added DNG File output to cam
* Fixes for building against Android
* gstreamer framerate control and negotiation
IPA:
* Support setting metadata directly from (libipa) algorithms
* Set AGC and AWB metadata for both RKISP1 and IPU3.
* Support for enum serialization and Flags
* Support multiple lens shading tables for different colour
temperatures on RKISP1/i.MX8MP.
Raspberry Pi IPA:
* Full line length control
* Better HBLANK synchronisation and full line length control
* Support ov9281 as ov9281_mono
* Update colour temperature whenever manual gains change
abi-compliance-checker tells me that this release is 100% abi compatible
with v0.0.1.
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Meson introduces a .replace() method in version 0.58.0. However we aim
to restrict ourselves to 0.56 meson features, as released by Debian
stable.
The recent introduction of release management infrastructure makes use
of the .replace() method to fix up the version string when there is a
mis-match between the release version and any (lack) of tags in the git
version description. This breaks when built on systems with only meson
0.56.
Refactor this to use a concatenation of the project version and a
stripped git version to regenerate the full source version string that
will be reported by libcamera.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This patch release commences the package release procedures for the
project.
Initial releases will include a bump to the patch (0.0.x) version
number, as well as a corresponding increment to the soname.
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The libcamera project is not yet ready to declare ABI nor API stability,
but it will benefit the community to be able to provide more regular
release cycles to determine 'versioned' points of history.
Ideally, these releases will be made at any ABI breakage, but can be
made at arbitary time based points along the way.
To support releases which may not be ABI stable, declare the soversion
of both the libcamera and libcamera-base library to be dependant upon
both the major minor and patch component of the project version.
As part of this, introduce a new 'Versions' summary section to highlight
the different version components that may become apparent within any
given build.
Bumping versions may leave dangling libcamera.so.* symlinks in build
directories. This will confuse Doxygen which will print during its
directory scanning phase a warning that the symlink can't be read. As we
don't need Doxygen to follow symlinks, disable it with EXCLUDE_SYMLINKS.
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The comment for supporting the custom script on 'make dist' contains a
typo. Fix it.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
Usage of find_library() to find dependencies that libcamera needs to
compile against can lead to the library being found even if the
corresponding headers are not installed. This will then result in a
compilation failure. Switch to dependency() for libdw, libunwind and
lttng-ust to fix this, all three libraries come with a pkgconfig file
that is usually installed by the distribution package that contains the
library headers.
Reported-by: Christian Rauch <Rauch.Christian@gmx.de>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
|
|
"ipa_modules" stores the value of the ipas meson build option. IPAs are
enabled if and only if there is an enabled pipeline for an IPA listed in
"ipa_modules" array. It is basically the intersection of pipelines and
ipa_modules array.
In order to correctly report which IPAs get enabled, let's create a new
array storing this intersection.
Cc: Quentin Schulz <foss+libcamera@0leil.net>
Reported-by: Daniel Semkowicz <dse@thaumatec.com>
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
It's not safe to assume `-include config.h` works, since this depends on
the functionality of the compiler that the cwd when running the compiler
is searched first.
When libcamera is included as a Meson subproject, the cwd of the
compiler is the cwd of the main project, not of libcamera's build dir,
and thus cannot be found. Instead, pass the include filename as a path
based on the current build dir.
Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Add libcamera Python bindings. pybind11 is used to generate the C++ <->
Python layer.
We use pybind11 'smart_holder' version to avoid issues with private
destructors and shared_ptr. There is also an alternative solution here:
https://github.com/pybind/pybind11/pull/2067
Only a subset of libcamera classes are exposed. Implementing and testing
the wrapper classes is challenging, and as such only classes that I have
needed have been added so far.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add 'check: true/false' to all run_command() calls as suggested in
https://github.com/mesonbuild/meson/issues/9300 to get rid of meson
warning "You should add the boolean check kwarg to the run_command
call."
This makes meson fail if the executed command fails, which makes sense.
[Kieran: Ignore failures on utils/genversion.sh]
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
meson.source_root() and meson.build_root() are deprecated. Use
meson.project_source_root() and meson.project_build_root() instead.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Ubuntu 22.04 LTS has been released with meson 0.61.2, and it is easy to
install a recent version of meson with python-pip, so let's update the
required meson version to get rid of the Android compilation
limitation.
Additionally, going to meson 0.55 gives the ability to have patch files
for git-wraps which is useful for Python bindings.
0.56 brings meson.project_source_root() and meson.project_build_root(),
allowing us to get rid of the deprecated meson.source_root() and
meson.build_root().
So, let's update the required meson version to 0.56.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
gcc 7 has reached end of life and isn't used as a default compiler by
any of the major distributions. It has also been dropped from buildroot.
Drop its support in libcamera.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
|
|
Building the libcamera Android layer currently makes use of features
from meson 0.55. The core libcamera framework in the default configuration
without android enabled uses the 'summary' feature available in 0.53, and
is the lowest supportable meson version if the Android HAL is excluded.
Ubuntu 20.04 LTS currently provides meson 0.53 and represents an
acceptable minimum version to support. Platforms utilising the Android
component will have full control over their build environment and can
ensure that they provide a more recent version of meson.
Reduce the supported meson version for the project to 0.53 to facilitate
building on more distributions without having to manually update the
meson package.
Meson will output a warning that features not available in 0.53 are used
if the Android HAL is enabled. This is considered as an acceptable
middleground to improve the experience on the latest Ubuntu LTS, until
22.04 LTS is released and provides a newer meson version.
Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de>
[Kieran: Add comment about the android meson requirements]
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Clang compiler is able to do a thread safety analysis with
annotations [1]. This introduces the thread safety annotation
macros and also enable the analysis by adding -Wthread-safety
if a clang compiler is used.
[1] https://clang.llvm.org/docs/ThreadSafetyAnalysis.html.
Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The meson option summary currently does not report if the support
for tracing is enabled or not. Add it.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
When distributions build and package libcamera libraries, they may not
necessarily run the build in the upstream source tree. In these cases, the git
SHA1 versioning information will be lost.
This change addresses that problem by requiring package managers to run
'meson dist' to create a tarball of the source files and build from there.
On runing 'meson dist', the utils/run-dist.sh script will create a
.tarball-version file in the release tarball with the version string generated
from the existing utils/gen-version.sh script.
The utils/gen-version.sh script has been updated to check for the presence of
this .tarball-version file and read the version string from it instead of
creating one.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The gen-version.sh script expects to be called from a git repo, and sets its
src_root variable accordingly. This may not always be the case if it is built
from a tarball source - full support for which is in a future commit.
The MESON_SOURCE_ROOT environnement variable does not get set when called from
the meson vcs_tag() function, but does when called from the run_command()
function, so that cannot be used either.
Instead, explicitly pass the meson source root to the gen-version.sh script.
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Create a new class to abstract generation and access to call stack
backtraces. The current implementation depends on the glibc backtrace()
implementation and is copied from the logger. Future development will
bring support for libunwind, transparently for the users of the class.
The logger backtrace implementation is dropped, replaced by usage of the
new Backtrace class.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
In preparation for using the AGC through the new algorithm interfaces,
convert the existing code to use the new function types.
Now that the process call is rewritten, re-enable the compiler flag to
warn when a function declaration hides virtual functions from a base class
(-Woverloaded-virtual).
We never use converged_ so remove its declaration. The controls may not
need to be updated at each call, but it should be decided on the context
side and not by a specific call by using a lock status in the Agc
structure for instance.
As the params_ local variable is not useful anymore, remove it here
too.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Introduce three functions in the Algorithm class to manage algorithms:
- configure which is called when IPA is configured only
- prepare called on EventFillParams event at each frame when the request
is queued
- process called on EventStatReady event at each frame completion when
the statistics have been generated.
The existing AGC implementation already has a function named process(),
though it has different arguments. Adding the new virtual process()
interface causes a compiler warning due to the AGC implementation
overloading a virtual function, even though the overload can be resolved
correctly.
Temporarily disable the warning in this commit to maintain bisection
until the AGC is converted to the new interface.
Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
__builtin_FILE and __builtin_LINE are first defined in clang 9. With
clang of any version less than that we have the following compilation
errors:
../../include/libcamera/base/log.h:94:27: error: use of undeclared identifier '__builtin_FILE'
const char *fileName = __builtin_FILE(),
^
../../include/libcamera/base/log.h:95:24: error: use of undeclared identifier '__builtin_LINE'
unsigned int line = __builtin_LINE()) const;
^
../../include/libcamera/base/log.h:99:26: error: use of undeclared identifier '__builtin_FILE'
const char *fileName = __builtin_FILE(),
^
../../include/libcamera/base/log.h:100:23: error: use of undeclared identifier '__builtin_LINE'
unsigned int line = __builtin_LINE());
Enforce clang version of at least 9 in the main meson file.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The pkg-config file for the main libcamera.so is generated
at the top level meson.build.
Move this to the actual core libcamera build structure to be
consistent and keep it next to the library construction.
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|