[PATCH v4 00/15] Add global configuration file

Milan Zamazal mzamazal at redhat.com
Tue Oct 1 12:34:49 CEST 2024


Milan Zamazal <mzamazal at redhat.com> writes:

> Kieran Bingham <kieran.bingham at ideasonboard.com> writes:
>
>> Quoting Milan Zamazal (2024-09-25 10:58:32)
>>> This patch series introduces global configuration file for libcamera, to
>>> provide runtime configuration means other than environment variables.
>>
>>> Instead of, or in addition to, the growing list of configuration
>>> environment variables, the whole configuration can be specified in a
>>> single configuration file.  This is both simpler and more flexible.
>>> 
>>> This is not a replacement for specific configuration files already
>>> present in libcamera.
>>> 
>>> The patches implement what is needed to introduce a configuration file
>>> that can handle the current environment variables and software ISP
>>> TODOs.  They demonstrate how to deal with the key points that must be
>>> considered.  See commit messages for more details.
>>> 
>>> The configuration file is a YAML file.  It is looked up in user’s home
>>> directory or, if not present, in system-wide libcamera directories.
>>> Environment variables, if set, still take precedence.
>>> 
>>> This patch series is not exhaustive, there can be future enhancements,
>>> most notably configuration file validation to avoid confusions caused by
>>> typos etc.
>>> 
>>> Not everything has been tested because some of the patches are related
>>> to specific hardware.
>>
>> It looks like this breaks on the unit tests:
>>
>>  - https://gitlab.freedesktop.org/camera/libcamera/-/jobs/64126236
>>
>> And I re-ran incase it was spurious, but that looks like it's going to
>> fail too:
>>
>>  - https://gitlab.freedesktop.org/camera/libcamera/-/jobs/64131685
>>
>> Could you check/take a look please?
>
> I can reproduce it locally.  It happens in the patch #4 "Look up logging
> levels in the configuration file" where the configuration starts being
> used.  And apparently only if the already loaded configuration is
> actually queried.  The errors don't make sense to me, indicating a
> possible memory or thread problem.  I'll continue investigating it
> later.

I haven't identified the exact cause but I reworked storing the
configuration and its initialization to be a bit more robust, which also
fixed the test.

>> --
>> Kieran
>>
>>
>>> 
>>> Changes in v4:
>>> - Rebased on current master.
>>> - Configuration option for LIBCAMERA_IPA_PROXY_PATH added.
>>> - Added a patch to include stdlib.h instead of cstdlib in yaml_parser.cpp.
>>> 
>>> Changes in v3:
>>> - Added a configuration item for the newly introduced
>>>   LIBCAMERA_PIPELINES_MATCH_LIST variable.
>>> - A minor indentation fix.
>>> - Fixed `pipelines.' x `pipeline.' configuration item naming mismatch.
>>> - Tuning files are looked up now by particular cameras attached rather than
>>>   being specified for the whole pipeline.
>>> - Helpers use std::string& instead of char* for confPath arguments.
>>> - Protection against returning YamlObject::empty as a regular value (the
>>>   problem has been probably exposed by addition of
>>>   LIBCAMERA_PIPELINES_MATCH_LIST).
>>> 
>>> Changes in v2:
>>> - Rebased on master.
>>> - Various cleanups, documentation improvements and minor fixes.
>>> - Configuration option for LIBCAMERA_RPI_TUNING_FILE added (Naush).
>>> - Two more patches for software ISP configuration added.
>>> 
>>> Milan Zamazal (15):
>>>   config: Introduce global runtime configuration
>>>   yaml: Include stdlib.h instead of cstdlib
>>>   config: Move global configuration to base
>>>   config: Look up logging levels in the configuration file
>>>   config: Add configuration retrieval helpers
>>>   config: Look up log file in configuration file
>>>   config: Look up log color configuration in configuration file
>>>   config: Look up rpi paths in configuration file
>>>   config: Look up IPA configurables in configuration file
>>>   config: Look up RkISP1 tuning file in configuration file
>>>   config: Look up pipelines match list in configuration file
>>>   config: Allow enabling software ISP in runtime
>>>   config: Add global configuration file documentation
>>>   libcamera: software_isp: Make input buffer copying configurable
>>>   libcamera: software_isp: Make measurement configurable
>>> 
>>>  Documentation/documentation-contents.rst      |   2 +-
>>>  Documentation/index.rst                       |   4 +-
>>>  Documentation/meson.build                     |   2 +-
>>>  ...ariables.rst => runtime_configuration.rst} | 119 ++++++++--
>>>  .../libcamera/internal/global_configuration.h |  67 ++++++
>>>  include/libcamera/internal/meson.build        |   1 +
>>>  src/libcamera/base/global_configuration.cpp   | 219 ++++++++++++++++++
>>>  src/libcamera/base/log.cpp                    |  24 +-
>>>  src/libcamera/base/meson.build                |  15 ++
>>>  src/libcamera/{ => base}/yaml_parser.cpp      |   2 +-
>>>  src/libcamera/camera_manager.cpp              |  19 +-
>>>  src/libcamera/ipa_manager.cpp                 |  23 +-
>>>  src/libcamera/ipa_proxy.cpp                   |  16 +-
>>>  src/libcamera/meson.build                     |  14 --
>>>  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  20 +-
>>>  .../pipeline/rpi/common/pipeline_base.cpp     |  18 +-
>>>  src/libcamera/pipeline/simple/simple.cpp      |  12 +
>>>  src/libcamera/process.cpp                     |  11 +-
>>>  src/libcamera/software_isp/TODO               |  36 ---
>>>  src/libcamera/software_isp/debayer_cpu.cpp    |  30 ++-
>>>  src/libcamera/software_isp/debayer_cpu.h      |   7 +-
>>>  21 files changed, 549 insertions(+), 112 deletions(-)
>>>  rename Documentation/{environment_variables.rst => runtime_configuration.rst} (61%)
>>>  create mode 100644 include/libcamera/internal/global_configuration.h
>>>  create mode 100644 src/libcamera/base/global_configuration.cpp
>>>  rename src/libcamera/{ => base}/yaml_parser.cpp (99%)
>>> 
>>> -- 
>>> 2.44.1
>>>



More information about the libcamera-devel mailing list