Patch Detail
Show a patch.
GET /api/1.1/patches/20405/?format=api
{ "id": 20405, "url": "https://patchwork.libcamera.org/api/1.1/patches/20405/?format=api", "web_url": "https://patchwork.libcamera.org/patch/20405/", "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": "<20240626072100.55497-14-mzamazal@redhat.com>", "date": "2024-06-26T07:20:54", "name": "[13/19] libcamera: software_isp: Call Algorithm::configure", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "f044d363081387a5fed88ff6110035344568e1f4", "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/20405/mbox/", "series": [ { "id": 4419, "url": "https://patchwork.libcamera.org/api/1.1/series/4419/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4419", "date": "2024-06-26T07:20:41", "name": "Software ISP refactoring", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4419/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/20405/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/20405/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 DDA29BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 26 Jun 2024 07:21:47 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 940CB654C2;\n\tWed, 26 Jun 2024 09:21:47 +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 15993654C5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Jun 2024 09:21:41 +0200 (CEST)", "from mx-prod-mc-03.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-663-Pz8WxmCgNC6bruACNb9fMw-1;\n\tWed, 26 Jun 2024 03:21:38 -0400", "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS\n\tid 6C83E1956051 for <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Jun 2024 07:21:37 +0000 (UTC)", "from nuthatch.brq.redhat.com (unknown [10.43.17.159])\n\tby mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 706EB300022A; Wed, 26 Jun 2024 07:21:36 +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=\"YmtzHP06\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1719386500;\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=ijfhu1Sx9MTPRpcZECyApzN20pMtjagsC/459JJqGB4=;\n\tb=YmtzHP062KwWFJuTtht7reow4t9xXK1dXVn7DCMIif07AWHxblFz8Jr7a1PpdzINxV/7YW\n\tj67d/aLckmWuwx+rbAPgaJTQ3BAajgerEmq09xSU6BqhKn3Y2x7yW3S8oJ3IZoSo8LudCN\n\tL0Km0IsIhj+H7WdIdxHUG5Wv0miOuNk=", "X-MC-Unique": "Pz8WxmCgNC6bruACNb9fMw-1", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>", "Subject": "[PATCH 13/19] libcamera: software_isp: Call Algorithm::configure", "Date": "Wed, 26 Jun 2024 09:20:54 +0200", "Message-ID": "<20240626072100.55497-14-mzamazal@redhat.com>", "In-Reply-To": "<20240626072100.55497-1-mzamazal@redhat.com>", "References": "<20240626072100.55497-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4", "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>\n---\n .../libcamera/internal/software_isp/software_isp.h | 2 +-\n include/libcamera/ipa/soft.mojom | 6 +++++-\n src/ipa/simple/module.h | 3 ++-\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, 28 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 8753c2fd..1ba9eb62 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -61,7 +61,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(unsigned int output, 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 dad352ba..65d90bfa 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 prepare(uint32 frame);\ndiff --git a/src/ipa/simple/module.h b/src/ipa/simple/module.h\nindex 21328ecd..e518e742 100644\n--- a/src/ipa/simple/module.h\n+++ b/src/ipa/simple/module.h\n@@ -10,6 +10,7 @@\n #include <libcamera/controls.h>\n \n #include <libcamera/ipa/core_ipa_interface.h>\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@@ -22,7 +23,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 514a9db5..7200abaf 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@@ -209,9 +209,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@@ -250,6 +250,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 0fa9db38..a82d05f4 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1288,10 +1288,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+\telse {\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 ba3f1bae..1f176214 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -223,16 +223,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": [ "13/19" ] }