[RFC,00/11] Add global configuration file
mbox series

Message ID 20240326112419.503286-1-mzamazal@redhat.com
Headers show
Series
  • Add global configuration file
Related show

Message

Milan Zamazal March 26, 2024, 11:24 a.m. UTC
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 the configuration file
providing configuration options corresponding to the current environment
variables.  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 RFC is not exhaustive, there can be future enhancements, most notably
configuration file validation to avoid confusions caused by typos etc.

The current patch series is based on the last posted software ISP branch.

Milan Zamazal (11):
  config: Introduce global runtime configuration
  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 config path in configuration file
  config: Look up IPA configurables in configuration file
  config: Look up RkISP1 tuning file in configuration file
  config: Allow enabling software ISP in runtime
  config: Add global configuration documentation

 Documentation/index.rst                       |   2 +-
 Documentation/meson.build                     |   2 +-
 ...ariables.rst => runtime_configuration.rst} |  56 ++++++-
 .../libcamera/internal/global_configuration.h |  63 +++++++
 include/libcamera/internal/meson.build        |   1 +
 src/libcamera/base/global_configuration.cpp   | 154 ++++++++++++++++++
 src/libcamera/base/log.cpp                    |  24 ++-
 src/libcamera/base/meson.build                |  15 ++
 src/libcamera/{ => base}/yaml_parser.cpp      |   0
 src/libcamera/camera_manager.cpp              |   9 +
 src/libcamera/ipa_manager.cpp                 |  23 ++-
 src/libcamera/ipa_proxy.cpp                   |   8 +-
 src/libcamera/meson.build                     |  14 --
 src/libcamera/pipeline/rkisp1/rkisp1.cpp      |   9 +-
 .../pipeline/rpi/common/pipeline_base.cpp     |   8 +-
 src/libcamera/pipeline/simple/simple.cpp      |  10 ++
 src/libcamera/process.cpp                     |  11 +-
 17 files changed, 371 insertions(+), 38 deletions(-)
 rename Documentation/{environment_variables.rst => runtime_configuration.rst} (76%)
 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 (100%)