Show a patch.

GET /api/patches/21065/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 21065,
    "url": "https://patchwork.libcamera.org/api/patches/21065/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/21065/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/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": "<20240830072554.180672-10-mzamazal@redhat.com>",
    "date": "2024-08-30T07:25:45",
    "name": "[v5,09/18] libcamera: software_isp: Call Algorithm::configure",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "d35010347d15903fd59aebbd272021c153b6c2d3",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/21065/mbox/",
    "series": [
        {
            "id": 4548,
            "url": "https://patchwork.libcamera.org/api/series/4548/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4548",
            "date": "2024-08-30T07:25:36",
            "name": "Software ISP refactoring",
            "version": 5,
            "mbox": "https://patchwork.libcamera.org/series/4548/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/21065/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/21065/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 118F6C32D5\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Aug 2024 07:26:37 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 922CE634DE;\n\tFri, 30 Aug 2024 09:26:36 +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 A29E0634CD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Aug 2024 09:26:33 +0200 (CEST)",
            "from mx-prod-mc-05.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-290-GibWb7dcOcuQb4stE9zJXw-1;\n\tFri, 30 Aug 2024 03:26:28 -0400",
            "from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com\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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 1546A1956095; Fri, 30 Aug 2024 07:26:27 +0000 (UTC)",
            "from nuthatch.redhat.com (unknown [10.45.225.65])\n\tby mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 01B1D19560A3; Fri, 30 Aug 2024 07:26:24 +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=\"Ky+LENSD\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1725002791;\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=0BO/w5QMYz6bbvwUpiY8EPkIgmGoWmsNkoodaDvNTIU=;\n\tb=Ky+LENSDrFjQVkbNVFlkl2V2yjfPzVuq3uXtVkpvBzVkm5N9vLOvcE93G6yToojbNSSLiU\n\t3pWL5sN5FxVrEx3i0lkmor+aKlgKSU5BYgHgyhaTAhM3k+mbKt+XF95pciSy792s3mRxfw\n\tUQX8/vz/YkwQadlfwQCWi+0AN5f3/+k=",
        "X-MC-Unique": "GibWb7dcOcuQb4stE9zJXw-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>",
        "Subject": "[PATCH v5 09/18] libcamera: software_isp: Call Algorithm::configure",
        "Date": "Fri, 30 Aug 2024 09:25:45 +0200",
        "Message-ID": "<20240830072554.180672-10-mzamazal@redhat.com>",
        "In-Reply-To": "<20240830072554.180672-1-mzamazal@redhat.com>",
        "References": "<20240830072554.180672-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>\n---\n .../libcamera/internal/software_isp/software_isp.h   |  2 +-\n include/libcamera/ipa/soft.mojom                     |  2 +-\n src/ipa/simple/module.h                              |  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 6 files changed, 24 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 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 cc5c37b2..6b049d20 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/module.h b/src/ipa/simple/module.h\nindex 5aaf8eb0..d1321f59 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 \ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex 79ed4891..0ea62266 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 ebec592a..834b33d9 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1294,10 +1294,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 c5db45ae..8f1c0f65 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": [
        "v5",
        "09/18"
    ]
}