From patchwork Thu Dec 11 14:25:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 25492 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 62326C3257 for ; Thu, 11 Dec 2025 14:28:42 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 25A4461611; Thu, 11 Dec 2025 15:28:42 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="KVIGp16U"; dkim-atps=neutral Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C5ACA609D8 for ; Thu, 11 Dec 2025 15:28:39 +0100 (CET) Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-477632b0621so1166045e9.2 for ; Thu, 11 Dec 2025 06:28:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1765463318; x=1766068118; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N8NQVZIfa3n6pCIMXHC7zSmvquRdnC5K6hTQKElvxqE=; b=KVIGp16Uxg5W2jRyKzd44OCLIFG7SXF2Cn3VVUwIKiJH8sukb3z3lfUhIT4BTlQiQY 4lra4xwbM9Ua4e/1Eln+r+QjBszzowajN/YYADN+VEIUYuwe25ImeN5d0oc1Je6ot8uI oUZBoEb/6cXFabTfKASsz9ZlZTjQp0s4m+Jx+bsU5uI9vLiN4VPxgTXbMpBksAf6BjB3 uMgHeRVjzvfX/AIlCQP44Meg+ozogZRUNSiQHRLPfZUzwZI+ZA+kNNX06HJpZSIGkvoT ToIN0Z3LQEnmZa1Mv8YyIAcVyLfTlcAZMe8J8/moDWsimMKn0YOVxc9NX/cDXbeRAlyZ o+TA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765463318; x=1766068118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=N8NQVZIfa3n6pCIMXHC7zSmvquRdnC5K6hTQKElvxqE=; b=WDSYqUtEgmbPkt+MAswu/k1Iary6p3UTJzHBvnZIZ+rXU/Iu6s+8LvJTYFeLEvTq9i dZkHKTpcZH5iMV2TCkFMO8e4mMBAl5IrnWdBjybn2Lqmhzl8lwZ5+8//HNZ3sbom62E8 U3ayhxgbR8cI5hj3L4mV3R6nGrFqgG9ZU9wZWqmJ0Gyte0qAby757dPuVgG3Z7QL+EIF cCbriy9Gns1KCNWoG047y9HmCeDIGelj8UThoggziZd8IOwYebWd/Y+GBu++UOvcPGje e8XKlLXJ4Sw4d9BMIOjiFYqgRmGo33BWryEO6ctvv/pRnCyNYW73R0pfe+zG/BYs+Yhm uovg== X-Gm-Message-State: AOJu0YwhXBGA+v2bF8TcSwIIOnqxjFzbzZn4lT2vHKYcZwy0ESjGw/gK TApOx8VNIAKGhSmVw7LI2ADMsEkbCW7EF2PakzbQbSyFI1Qr7fcPWn4qunAhLaFN/h8dOxy/V1K JLn4y X-Gm-Gg: AY/fxX72MqpDL80aARwtB1YQyWquS5DzJgFy0Jrq+CRJhE8ezqn9E5f+nu9agCFva7A +QAv/oMQZ87fugtvSmGIjXJmDSZqWxRC5aWJvW7nB5B73qRmmBpJbQ3483FubQ7g5Sw0/JqNTv+ 1JBB9mwSwZ1uJv52I5gg75luTa81Po0jj5JPcA4aG00kO5fq+/BTbL09D3sYluBKA/jMmejwpWT /aav9Tiswj2SB/LGHN8cK91IBTyXmD9sSxGW7agbygy/hYmp0+A1xaha/INAQU8sMbDkz8x4hIR XjO1QBNKKEVUnmmAb5fvOgAlVNQTqP56Z9n6ozzwN/dGVwR4TIhjnjNR3UaVu5DGGpHXr3888E2 qT6j0GJ+J0zTdROOLeTBHkd9kpALg5EQ00iIK6SnlrUxL9IZMYdpMVADbgK4tpbArlJHYmN4JN4 sMJYAVDJiLZbzDQZ0+GBhI76p3TZ+2tA1LHAlDnO+niaieupBS+M4ktXMDLB6zZ7ICdJzNLxDm1 jU4Bi7rBo8fubXy81oN9KPYiIoGRA== X-Google-Smtp-Source: AGHT+IEVH5Ewcj0cCLIupuzOYkj8PTTKOUZcmamm6ZzfJ3rwtz9rtA14FkysBUn4PIWrh9JILJ6CNA== X-Received: by 2002:a05:600c:4e92:b0:477:9976:9e1a with SMTP id 5b1f17b1804b1-47a8374de44mr64900855e9.6.1765463318017; Thu, 11 Dec 2025 06:28:38 -0800 (PST) Received: from davidp-pi5.pitowers.org ([2a00:1098:3142:1f:88ea:c658:5b20:5e46]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-47a89da4756sm39999505e9.6.2025.12.11.06.28.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Dec 2025 06:28:31 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Cc: Peter Bailey Subject: [PATCH v2 3/4] ipa: rpi: controller: Ignore algorithms that are not enabled Date: Thu, 11 Dec 2025 14:25:59 +0000 Message-ID: <20251211142824.26635-4-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251211142824.26635-1-david.plowman@raspberrypi.com> References: <20251211142824.26635-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 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" From: Peter Bailey Algorithms may now contain an "enabled" field which can be set to false to disable it and prevent it from being loaded. If not present, algorithms are treated as enabled by default for backwards compatability. We additionally prevent duplicate versions of the same algorithm type (such as AWB) from loading, and flag an error. This will prevent undefined behaviour if (for example) two distinct AWB algorithms are trying to run simultaneously. Signed-off-by: Peter Bailey --- src/ipa/rpi/controller/controller.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/ipa/rpi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp index df45dcd3..88de6f36 100644 --- a/src/ipa/rpi/controller/controller.cpp +++ b/src/ipa/rpi/controller/controller.cpp @@ -145,6 +145,14 @@ int Controller::read(char const *filename) int Controller::createAlgorithm(const std::string &name, const YamlObject ¶ms) { + /* Any algorithm may be disabled by setting "enabled" to false. */ + bool enabled = params["enabled"].get(true); + LOG(RPiController, Debug) + << "Algorithm " << name << ": " + << (enabled ? "enabled" : "disabled"); + if (!enabled) + return 0; + auto it = getAlgorithms().find(name); if (it == getAlgorithms().end()) { LOG(RPiController, Warning) @@ -152,6 +160,16 @@ int Controller::createAlgorithm(const std::string &name, const YamlObject ¶m return 0; } + /* Do not allow duplicate versions of algorithms (e.g. AWB) to run. */ + size_t pos = name.find_last_of('.'); + std::string const &algoType = + pos == std::string::npos ? name : name.substr(pos + 1); + if (getAlgorithm(algoType)) { + LOG(RPiController, Error) + << "Algorithm type '" << algoType << "' already exists"; + return -1; + } + Algorithm *algo = (*it->second)(this); int ret = algo->read(params); if (ret)