From patchwork Wed Sep 25 09:58:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 21353 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id DCD22C0F1B for ; Wed, 25 Sep 2024 09:59:08 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D504363502; Wed, 25 Sep 2024 11:59:07 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="WQdjnAFW"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B0489634F4 for ; Wed, 25 Sep 2024 11:59:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727258344; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=vZXHAHoCOOD3twr9WyXTj2sxQIJXrclv5CKsoswCVRE=; b=WQdjnAFWTryJZGbQDx4c6xi0fBUc8YgHpWvH5fzuinzlqAXbJB1OW8EUL/sZAD3MF8vfwN W7yLIMU5YARWSlkZMIV2/pbMCx2CJymNb/jgupoj+JI7zD7ZRu9Gyu85E/8DsUCl33umDp 53do2A4lUa5aL3JvE6mkz5zUfbBDwa4= Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-274-LrCBa1S3PpKF6F5xpdwoZw-1; Wed, 25 Sep 2024 05:59:03 -0400 X-MC-Unique: LrCBa1S3PpKF6F5xpdwoZw-1 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (unknown [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 17399193E8EF; Wed, 25 Sep 2024 09:59:02 +0000 (UTC) Received: from nuthatch.redhat.com (unknown [10.45.225.29]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2A8CF19560AA; Wed, 25 Sep 2024 09:58:59 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , Kieran Bingham , Naushir Patuck Subject: [PATCH v4 00/15] Add global configuration file Date: Wed, 25 Sep 2024 11:58:32 +0200 Message-ID: <20240925095850.348259-1-mzamazal@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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. 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%)