Patch Detail
Show a patch.
GET /api/1.1/patches/20677/?format=api
{ "id": 20677, "url": "https://patchwork.libcamera.org/api/1.1/patches/20677/?format=api", "web_url": "https://patchwork.libcamera.org/patch/20677/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20240717085444.289997-15-mzamazal@redhat.com>", "date": "2024-07-17T08:54:35", "name": "[v3,14/23] libcamera: software_isp: Call Algorithm::configure", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "d5230441cdbab3b04aa5e0aa08ece370bcd6c617", "submitter": { "id": 177, "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api", "name": "Milan Zamazal", "email": "mzamazal@redhat.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/20677/mbox/", "series": [ { "id": 4454, "url": "https://patchwork.libcamera.org/api/1.1/series/4454/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4454", "date": "2024-07-17T08:54:21", "name": "Software ISP refactoring", "version": 3, "mbox": "https://patchwork.libcamera.org/series/4454/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/20677/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/20677/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 43CE3C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 17 Jul 2024 08:55:44 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 68BFB633C1;\n\tWed, 17 Jul 2024 10:55:43 +0200 (CEST)", "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A2FF163373\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 17 Jul 2024 10:55:23 +0200 (CEST)", "from mx-prod-mc-01.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-203-bdiEEZZ6PuirOz8ug2Szxw-1;\n\tWed, 17 Jul 2024 04:55:19 -0400", "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.17])\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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 575FA1955BEE; Wed, 17 Jul 2024 08:55:18 +0000 (UTC)", "from nuthatch.brq.redhat.com (unknown [10.43.17.37])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 3A3641955F40; Wed, 17 Jul 2024 08:55:17 +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=\"D4kqrxMi\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1721206522;\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=RWkl/IHmQu0X684ob3s9CT3SuE+xpitxMfyER+qo/l4=;\n\tb=D4kqrxMi1zf1OUCW1Ke7XB9nZDnRcqCiFpmwg2s85Tm6ZaFxLD9g0vu0D1Xj0f59US/sAY\n\tjSq8mLnAMMHB1ZSVRY4ZeCTWE7ewU1j8JVSuE4PocBkWYYJa0JtyLHQRdWO41iIboc3tRr\n\tFRYNNv73lQwYdxOUsK8qgEXs/cEGgN8=", "X-MC-Unique": "bdiEEZZ6PuirOz8ug2Szxw-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>", "Subject": "[PATCH v3 14/23] libcamera: software_isp: Call Algorithm::configure", "Date": "Wed, 17 Jul 2024 10:54:35 +0200", "Message-ID": "<20240717085444.289997-15-mzamazal@redhat.com>", "In-Reply-To": "<20240717085444.289997-1-mzamazal@redhat.com>", "References": "<20240717085444.289997-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17", "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>\n---\n .../libcamera/internal/software_isp/software_isp.h | 2 +-\n include/libcamera/ipa/soft.mojom | 6 +++++-\n src/ipa/simple/module.h | 4 +++-\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 6 files changed, 29 insertions(+), 13 deletions(-)", "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex 3a84418e..c5d5a46f 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 bd48ece9..5e124016 100644\n--- a/include/libcamera/ipa/soft.mojom\n+++ b/include/libcamera/ipa/soft.mojom\n@@ -8,6 +8,10 @@ module ipa.soft;\n \n import \"include/libcamera/ipa/core.mojom\";\n \n+struct IPAConfigInfo {\n+\tlibcamera.ControlInfoMap sensorControls;\n+};\n+\n interface IPASoftInterface {\n \tinit(libcamera.IPASettings settings,\n \t libcamera.SharedFD fdStats,\n@@ -16,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, uint32 bufferId, libcamera.ControlList sensorControls);\ndiff --git a/src/ipa/simple/module.h b/src/ipa/simple/module.h\nindex 33a7d1db..8d4d53fb 100644\n--- a/src/ipa/simple/module.h\n+++ b/src/ipa/simple/module.h\n@@ -9,6 +9,8 @@\n \n #include <libcamera/controls.h>\n \n+#include <libcamera/ipa/soft_ipa_interface.h>\n+\n #include \"libcamera/internal/software_isp/debayer_params.h\"\n #include \"libcamera/internal/software_isp/swisp_stats.h\"\n \n@@ -20,7 +22,7 @@ namespace libcamera {\n \n namespace ipa::soft {\n \n-using Module = ipa::Module<IPAContext, IPAFrameContext, ControlInfoMap,\n+using Module = ipa::Module<IPAContext, IPAFrameContext, IPAConfigInfo,\n \t\t\t DebayerParams, SwIspStats>;\n \n } /* namespace ipa::soft */\ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex dd300387..49fff312 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -72,7 +72,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@@ -206,9 +206,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@@ -247,6 +247,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 2cb2fee8..4326d14c 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1295,10 +1295,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 09e33361..9793df18 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -224,16 +224,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": [ "v3", "14/23" ] }