Show a patch.

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

{
    "id": 21315,
    "url": "https://patchwork.libcamera.org/api/patches/21315/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/21315/",
    "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": "<20240920183143.1674117-11-mzamazal@redhat.com>",
    "date": "2024-09-20T18:31:35",
    "name": "[v7,10/18] libcamera: software_isp: Call Algorithm::queueRequest",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "dc47842229eaaa4ac06b87c9fbe5c03c85cdfd8d",
    "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/21315/mbox/",
    "series": [
        {
            "id": 4610,
            "url": "https://patchwork.libcamera.org/api/series/4610/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4610",
            "date": "2024-09-20T18:31:25",
            "name": "Software ISP refactoring",
            "version": 7,
            "mbox": "https://patchwork.libcamera.org/series/4610/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/21315/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/21315/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 F3657C32D7\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 20 Sep 2024 18:32:36 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3F3716350D;\n\tFri, 20 Sep 2024 20:32: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 AFF7663504\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 20 Sep 2024 20:32:32 +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-70-qvW92DcmO926-UwaJAW2Sg-1;\n\tFri, 20 Sep 2024 14:32:28 -0400",
            "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (unknown\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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id A1840193723B; Fri, 20 Sep 2024 18:32:27 +0000 (UTC)",
            "from nuthatch.redhat.com (unknown [10.45.224.12])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id B3C711956052; Fri, 20 Sep 2024 18:32:25 +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=\"dSsn/o60\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1726857151;\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=kOcj7stPRr5Kqj2D/3eX7mfv4t/mYsr6rdB/4OBTuU0=;\n\tb=dSsn/o60KefcNIzoEqBkY+0o/l0JgTJ4YxCkW9YhJkQdPpAxkL/KRdCBkp1QHb6jbj8CKK\n\toKsQ1YEb9gLhoxJPEI9Maenr8DkA3rfUBJa0ZaeESH+z6oytttxhwwHeF26S9OsanvkdKN\n\t8Kyl5SQ3xY2fOUlpW2lsWzBfk1zYj+o=",
        "X-MC-Unique": "qvW92DcmO926-UwaJAW2Sg-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 v7 10/18] libcamera: software_isp: Call\n\tAlgorithm::queueRequest",
        "Date": "Fri, 20 Sep 2024 20:31:35 +0200",
        "Message-ID": "<20240920183143.1674117-11-mzamazal@redhat.com>",
        "In-Reply-To": "<20240920183143.1674117-1-mzamazal@redhat.com>",
        "References": "<20240920183143.1674117-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::queueRequest call for the defined algorithms.\nAs there are currently no control knobs in software ISP nor the\ncorresponding queueRequest call chain, the patch also introduces the\nqueueRequest methods and calls from the pipeline to the IPA.\n\nThis is preparation only since there are currently no Algorithm based\nalgorithms defined and no current software ISP algorithms support\ncontrol knobs.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n include/libcamera/internal/software_isp/software_isp.h |  1 +\n include/libcamera/ipa/soft.mojom                       |  1 +\n src/ipa/simple/soft_simple.cpp                         |  9 +++++++++\n src/libcamera/pipeline/simple/simple.cpp               |  5 ++++-\n src/libcamera/software_isp/software_isp.cpp            | 10 ++++++++++\n 5 files changed, 25 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h\nindex c5d5a46f..a3e3a9da 100644\n--- a/include/libcamera/internal/software_isp/software_isp.h\n+++ b/include/libcamera/internal/software_isp/software_isp.h\n@@ -73,6 +73,7 @@ public:\n \tint start();\n \tvoid stop();\n \n+\tvoid queueRequest(const uint32_t frame, const ControlList &controls);\n \tint queueBuffers(uint32_t frame, FrameBuffer *input,\n \t\t\t const std::map<const Stream *, FrameBuffer *> &outputs);\n \ndiff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/soft.mojom\nindex 88a35a48..ddccd154 100644\n--- a/include/libcamera/ipa/soft.mojom\n+++ b/include/libcamera/ipa/soft.mojom\n@@ -23,6 +23,7 @@ interface IPASoftInterface {\n \tconfigure(IPAConfigInfo configInfo)\n \t\t=> (int32 ret);\n \n+\t[async] queueRequest(uint32 frame, libcamera.ControlList sensorControls);\n \t[async] processStats(uint32 frame,\n \t\t\t     uint32 bufferId,\n \t\t\t     libcamera.ControlList sensorControls);\ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex 0ea62266..eb3bbd92 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -78,6 +78,7 @@ public:\n \tint start() override;\n \tvoid stop() override;\n \n+\tvoid queueRequest(const uint32_t frame, const ControlList &controls) override;\n \tvoid processStats(const uint32_t frame, const uint32_t bufferId,\n \t\t\t  const ControlList &sensorControls) override;\n \n@@ -270,6 +271,14 @@ void IPASoftSimple::stop()\n {\n }\n \n+void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &controls)\n+{\n+\tIPAFrameContext &frameContext = context_.frameContexts.alloc(frame);\n+\n+\tfor (auto const &algo : algorithms())\n+\t\talgo->queueRequest(context_, frame, frameContext, controls);\n+}\n+\n void IPASoftSimple::processStats([[maybe_unused]] const uint32_t frame,\n \t\t\t\t [[maybe_unused]] const uint32_t bufferId,\n \t\t\t\t const ControlList &sensorControls)\ndiff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex ddc4102b..61157fe6 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1421,8 +1421,11 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request)\n \t\t}\n \t}\n \n-\tif (data->useConversion_)\n+\tif (data->useConversion_) {\n \t\tdata->conversionQueue_.push(std::move(buffers));\n+\t\tif (data->swIsp_)\n+\t\t\tdata->swIsp_->queueRequest(request->sequence(), request->controls());\n+\t}\n \n \treturn 0;\n }\ndiff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\nindex eed433e0..3a01bdcc 100644\n--- a/src/libcamera/software_isp/software_isp.cpp\n+++ b/src/libcamera/software_isp/software_isp.cpp\n@@ -277,6 +277,16 @@ int SoftwareIsp::exportBuffers(const Stream *stream, unsigned int count,\n \treturn count;\n }\n \n+/**\n+ * \\brief Queue a request and process the control list from the application\n+ * \\param[in] frame The number of the frame which will be processed next\n+ * \\param[in] controls The controls for the \\a frame\n+ */\n+void SoftwareIsp::queueRequest(const uint32_t frame, const ControlList &controls)\n+{\n+\tipa_->queueRequest(frame, controls);\n+}\n+\n /**\n  * \\brief Queue buffers to Software ISP\n  * \\param[in] frame The frame number\n",
    "prefixes": [
        "v7",
        "10/18"
    ]
}