{"id":21402,"url":"https://patchwork.libcamera.org/api/patches/21402/?format=json","web_url":"https://patchwork.libcamera.org/patch/21402/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20240927134624.801004-10-mzamazal@redhat.com>","date":"2024-09-27T13:46:15","name":"[v8,09/18] libcamera: software_isp: Call Algorithm::configure","commit_ref":"ecbc05c4c5e783fd7aa4934a85bc919261700b60","pull_url":null,"state":"accepted","archived":false,"hash":"cd91c7e1b3a5e89319bc9d848c05717ea49fd951","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/?format=json","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/21402/mbox/","series":[{"id":4634,"url":"https://patchwork.libcamera.org/api/series/4634/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4634","date":"2024-09-27T13:46:06","name":"Software ISP refactoring","version":8,"mbox":"https://patchwork.libcamera.org/series/4634/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/21402/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/21402/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BBFA1C32D4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Sep 2024 13:47:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5B0296352E;\n\tFri, 27 Sep 2024 15:47:05 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0258F6352B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Sep 2024 15:46:58 +0200 (CEST)","from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-52-NATicapVMBinp7qWNX5ANw-1;\n\tFri, 27 Sep 2024 09:46:54 -0400","from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (unknown\n\t[10.30.177.40])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id D00AE1903471; Fri, 27 Sep 2024 13:46:53 +0000 (UTC)","from nuthatch.redhat.com (unknown [10.45.224.123])\n\tby mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id EB1FC1956054; Fri, 27 Sep 2024 13:46:51 +0000 (UTC)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"PVedGh4z\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1727444818;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=nbe+A+cFJKjnyzckqpW+xkK5SBHCdoFLXUAEfnoJ370=;\n\tb=PVedGh4zmnaqYlyGjLq1R+JvvqdoSoR5vMbXEnMRWTH3VM62bZGTY4gxTdxJk+OWsIbNbI\n\tyM7H/P5pctvDld7RQWxc+fqMOH6Qrwy9kAV2kqVa379UCd7xojEQelxmt1aFNkiNtIQUU0\n\tOPAacy2SGMreQlXNtlcigZmngwxUMuU=","X-MC-Unique":"NATicapVMBinp7qWNX5ANw-1","From":"Milan Zamazal <mzamazal@redhat.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Milan Zamazal <mzamazal@redhat.com>,\n\tUmang Jain <umang.jain@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tDaniel Scally <dan.scally@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"[PATCH v8 09/18] libcamera: software_isp: Call Algorithm::configure","Date":"Fri, 27 Sep 2024 15:46:15 +0200","Message-ID":"<20240927134624.801004-10-mzamazal@redhat.com>","In-Reply-To":"<20240927134624.801004-1-mzamazal@redhat.com>","References":"<20240927134624.801004-1-mzamazal@redhat.com>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.0 on 10.30.177.40","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain; charset=\"US-ASCII\"; x-default=true","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"This patch adds Algorithm::configure call for the defined algorithms.\nThis is preparation only since there are currently no Algorithm based\nalgorithms defined.\n\nA part of this change is passing IPAConfigInfo instead of ControlInfoMap\nto configure() calls as this is what Algorithm::configure expects.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\n .../libcamera/internal/software_isp/software_isp.h   |  2 +-\n include/libcamera/ipa/soft.mojom                     |  2 +-\n src/ipa/simple/soft_simple.cpp                       | 12 +++++++++---\n src/libcamera/pipeline/simple/simple.cpp             | 11 +++++++----\n src/libcamera/software_isp/software_isp.cpp          |  7 ++++---\n 5 files changed, 22 insertions(+), 12 deletions(-)","diff":"diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex 3a84418ed..c5d5a46ff 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -62,7 +62,7 @@ public:\n \n \tint configure(const StreamConfiguration &inputCfg,\n \t\t      const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,\n-\t\t      const ControlInfoMap &sensorControls);\n+\t\t      const ipa::soft::IPAConfigInfo &configInfo);\n \n \tint exportBuffers(const Stream *stream, unsigned int count,\n \t\t\t  std::vector<std::unique_ptr<FrameBuffer>> *buffers);\ndiff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom\nindex f65b6231d..88a35a48d 100644\n--- a/include/libcamera/ipa/soft.mojom\n+++ b/include/libcamera/ipa/soft.mojom\n@@ -20,7 +20,7 @@ interface IPASoftInterface {\n \t\t=> (int32 ret);\n \tstart() => (int32 ret);\n \tstop();\n-\tconfigure(libcamera.ControlInfoMap sensorCtrlInfoMap)\n+\tconfigure(IPAConfigInfo configInfo)\n \t\t=> (int32 ret);\n \n \t[async] processStats(uint32 frame,\ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex 79ed4891b..0ea622663 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -73,7 +73,7 @@ public:\n \t\t const SharedFD &fdStats,\n \t\t const SharedFD &fdParams,\n \t\t const ControlInfoMap &sensorInfoMap) override;\n-\tint configure(const ControlInfoMap &sensorInfoMap) override;\n+\tint configure(const IPAConfigInfo &configInfo) override;\n \n \tint start() override;\n \tvoid stop() override;\n@@ -207,9 +207,9 @@ int IPASoftSimple::init(const IPASettings &settings,\n \treturn 0;\n }\n \n-int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)\n+int IPASoftSimple::configure(const IPAConfigInfo &configInfo)\n {\n-\tsensorInfoMap_ = sensorInfoMap;\n+\tsensorInfoMap_ = configInfo.sensorControls;\n \n \tconst ControlInfo &exposureInfo = sensorInfoMap_.find(V4L2_CID_EXPOSURE)->second;\n \tconst ControlInfo &gainInfo = sensorInfoMap_.find(V4L2_CID_ANALOGUE_GAIN)->second;\n@@ -248,6 +248,12 @@ int IPASoftSimple::configure(const ControlInfoMap &sensorInfoMap)\n \t\tagainMinStep_ = 1.0;\n \t}\n \n+\tfor (auto const &algo : algorithms()) {\n+\t\tint ret = algo->configure(context_, configInfo);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\n \tLOG(IPASoft, Info) << \"Exposure \" << exposureMin_ << \"-\" << exposureMax_\n \t\t\t   << \", gain \" << againMin_ << \"-\" << againMax_\n \t\t\t   << \" (\" << againMinStep_ << \")\";\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex ff43814c6..ddc4102b1 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1290,10 +1290,13 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)\n \tinputCfg.stride = captureFormat.planes[0].bpl;\n \tinputCfg.bufferCount = kNumInternalBuffers;\n \n-\treturn data->converter_\n-\t\t       ? data->converter_->configure(inputCfg, outputCfgs)\n-\t\t       : data->swIsp_->configure(inputCfg, outputCfgs,\n-\t\t\t\t\t\t data->sensor_->controls());\n+\tif (data->converter_) {\n+\t\treturn data->converter_->configure(inputCfg, outputCfgs);\n+\t} else {\n+\t\tipa::soft::IPAConfigInfo configInfo;\n+\t\tconfigInfo.sensorControls = data->sensor_->controls();\n+\t\treturn data->swIsp_->configure(inputCfg, outputCfgs, configInfo);\n+\t}\n }\n \n int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex a08b0c2ec..eed433e07 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -222,16 +222,17 @@ SoftwareIsp::strideAndFrameSize(const PixelFormat &outputFormat, const Size &siz\n  * \\brief Configure the SoftwareIsp object according to the passed in parameters\n  * \\param[in] inputCfg The input configuration\n  * \\param[in] outputCfgs The output configurations\n- * \\param[in] sensorControls ControlInfoMap of the controls supported by the sensor\n+ * \\param[in] configInfo The IPA configuration data, received from the pipeline\n+ * handler\n  * \\return 0 on success, a negative errno on failure\n  */\n int SoftwareIsp::configure(const StreamConfiguration &inputCfg,\n \t\t\t   const std::vector<std::reference_wrapper<StreamConfiguration>> &outputCfgs,\n-\t\t\t   const ControlInfoMap &sensorControls)\n+\t\t\t   const ipa::soft::IPAConfigInfo &configInfo)\n {\n \tASSERT(ipa_ && debayer_);\n \n-\tint ret = ipa_->configure(sensorControls);\n+\tint ret = ipa_->configure(configInfo);\n \tif (ret < 0)\n \t\treturn ret;\n \n","prefixes":["v8","09/18"]}