Show a patch.

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

{
    "id": 17162,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/17162/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/17162/",
    "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": "<20220818094410.1671-8-jacopo@jmondi.org>",
    "date": "2022-08-18T09:44:00",
    "name": "[libcamera-devel,v3,07/17] ipa: libipa: algorithm: queueRequest(): Pass frame context",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "11ab2a84bea92f236fdc410890f9545fc83c7f20",
    "submitter": {
        "id": 3,
        "url": "https://patchwork.libcamera.org/api/1.1/people/3/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo@jmondi.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/17162/mbox/",
    "series": [
        {
            "id": 3426,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3426/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3426",
            "date": "2022-08-18T09:43:53",
            "name": "libcamera: Align IPU3 and RKISP1 interfaces",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/3426/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/17162/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/17162/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 B8CD3C3275\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Aug 2022 09:44:32 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4E98A61FC5;\n\tThu, 18 Aug 2022 11:44:32 +0200 (CEST)",
            "from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[217.70.183.199])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 80E2361FC8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Aug 2022 11:44:29 +0200 (CEST)",
            "(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 68867FF80A;\n\tThu, 18 Aug 2022 09:44:28 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660815872;\n\tbh=RfdDulZFvszGLGA/9KXetJpziGqHRnE5I6HrLWO9f0I=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=wKe/7UCujhNcgjsrWKE0kCoXTPfiVuFbplX1S8olvYsmiAi1NNbDslXLxMtEHeHbD\n\toChHIu6u9ERoPfKFm74f+UpvY5/rL297KXwkV3f/N7coVdZ8cecCQ1KrV8tVETqaeY\n\t0/WQMHrZlcWzdKTUKMp28zqZTPnAsJQn1XFUA4ti5Zgh9JRjK6iwVRs2vyppc/jIiK\n\tRLYtcsqJcSD4x7tGM0/SAiQQq6rbelu4NO9bgCWXMhXmC5StfTKwfrCIuiNxqSSaCr\n\tH7DYaOFajGf94SZIGtHjAGwAvrEjn2MhFMU9NyGjjisUUUaMrk5R5lnkTw4VMD3vFA\n\tDAIa5px6enbYQ==",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 18 Aug 2022 11:44:00 +0200",
        "Message-Id": "<20220818094410.1671-8-jacopo@jmondi.org>",
        "X-Mailer": "git-send-email 2.37.2",
        "In-Reply-To": "<20220818094410.1671-1-jacopo@jmondi.org>",
        "References": "<20220818094410.1671-1-jacopo@jmondi.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v3 07/17] ipa: libipa: algorithm:\n\tqueueRequest(): Pass frame context",
        "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>",
        "From": "Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Jacopo Mondi <jacopo@jmondi.org>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "From: Kieran Bingham via libcamera-devel <libcamera-devel@lists.libcamera.org>\n\nIPA modules have access to incoming Request's controls list and\nneed to store them in the frame context at queueRequest() time.\n\nAs each algorithm is expected to have ownership of a certain set of\ncontrols it should have access to the frame context where they have been\nstored, and where the algorithm computation results can be stored to\nlater populate metadata.\n\nNow that both the IPU3 and RkISP1 IPA modules comply with the same\ninterface, propagate the queueRequest() call to algorithms in the IPU3\nIPA module.\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nSigned-off-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n---\n src/ipa/ipu3/ipu3.cpp                | 5 ++---\n src/ipa/libipa/algorithm.cpp         | 1 +\n src/ipa/libipa/algorithm.h           | 1 +\n src/ipa/rkisp1/algorithms/cproc.cpp  | 1 +\n src/ipa/rkisp1/algorithms/cproc.h    | 1 +\n src/ipa/rkisp1/algorithms/filter.cpp | 1 +\n src/ipa/rkisp1/algorithms/filter.h   | 1 +\n src/ipa/rkisp1/rkisp1.cpp            | 4 +++-\n 8 files changed, 11 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\nindex 874d82c873ed..eabf179aaa0a 100644\n--- a/src/ipa/ipu3/ipu3.cpp\n+++ b/src/ipa/ipu3/ipu3.cpp\n@@ -658,9 +658,8 @@ void IPAIPU3::queueRequest(const uint32_t frame, const ControlList &controls)\n \t/* \\todo Start processing for 'frame' based on 'controls'. */\n \tIPU3FrameContext &frameContext = context_.frameContexts.initialise(frame);\n \n-\t/* \\todo Implement queueRequest to each algorithm. */\n-\t(void)frameContext;\n-\t(void)controls;\n+\tfor (auto const &algo : algorithms())\n+\t\talgo->queueRequest(context_, frame, frameContext, controls);\n }\n \n /**\ndiff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp\nindex 30eab67f71fc..c152b885aee1 100644\n--- a/src/ipa/libipa/algorithm.cpp\n+++ b/src/ipa/libipa/algorithm.cpp\n@@ -88,6 +88,7 @@ namespace ipa {\n  * \\brief Provide control values to the algorithm\n  * \\param[in] context The shared IPA context\n  * \\param[in] frame The frame number to apply the control values\n+ * \\param[in] frameContext The current frame's context\n  * \\param[in] controls The list of user controls\n  *\n  * This function is called for each request queued to the camera. It provides\ndiff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h\nindex c2d990707b25..f92829ad7ac6 100644\n--- a/src/ipa/libipa/algorithm.h\n+++ b/src/ipa/libipa/algorithm.h\n@@ -46,6 +46,7 @@ public:\n \n \tvirtual void queueRequest([[maybe_unused]] typename Module::Context &context,\n \t\t\t\t  [[maybe_unused]] const uint32_t frame,\n+\t\t\t\t  [[maybe_unused]] typename Module::FrameContext &frameContext,\n \t\t\t\t  [[maybe_unused]] const ControlList &controls)\n \t{\n \t}\ndiff --git a/src/ipa/rkisp1/algorithms/cproc.cpp b/src/ipa/rkisp1/algorithms/cproc.cpp\nindex edaf2d10e850..c0792926f9eb 100644\n--- a/src/ipa/rkisp1/algorithms/cproc.cpp\n+++ b/src/ipa/rkisp1/algorithms/cproc.cpp\n@@ -38,6 +38,7 @@ LOG_DEFINE_CATEGORY(RkISP1CProc)\n  */\n void ColorProcessing::queueRequest(IPAContext &context,\n \t\t\t\t   [[maybe_unused]] const uint32_t frame,\n+\t\t\t\t   [[maybe_unused]] RKISP1FrameContext &frameContext,\n \t\t\t\t   const ControlList &controls)\n {\n \tauto &cproc = context.activeState.cproc;\ndiff --git a/src/ipa/rkisp1/algorithms/cproc.h b/src/ipa/rkisp1/algorithms/cproc.h\nindex fde83f3c965c..13f8967e70a8 100644\n--- a/src/ipa/rkisp1/algorithms/cproc.h\n+++ b/src/ipa/rkisp1/algorithms/cproc.h\n@@ -22,6 +22,7 @@ public:\n \t~ColorProcessing() = default;\n \n \tvoid queueRequest(IPAContext &context, const uint32_t frame,\n+\t\t\t  RKISP1FrameContext &frameContext,\n \t\t\t  const ControlList &controls) override;\n \tvoid prepare(IPAContext &context, unsigned int frame,\n \t\t     RKISP1FrameContext &frameContext,\ndiff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp\nindex f6577046442a..8c5af213d6d0 100644\n--- a/src/ipa/rkisp1/algorithms/filter.cpp\n+++ b/src/ipa/rkisp1/algorithms/filter.cpp\n@@ -44,6 +44,7 @@ static constexpr uint32_t kFiltModeDefault = 0x000004f2;\n  */\n void Filter::queueRequest(IPAContext &context,\n \t\t\t  [[maybe_unused]] const uint32_t frame,\n+\t\t\t  [[maybe_unused]] RKISP1FrameContext &frameContext,\n \t\t\t  const ControlList &controls)\n {\n \tauto &filter = context.activeState.filter;\ndiff --git a/src/ipa/rkisp1/algorithms/filter.h b/src/ipa/rkisp1/algorithms/filter.h\nindex 1fbe785a3cab..b10efa208a48 100644\n--- a/src/ipa/rkisp1/algorithms/filter.h\n+++ b/src/ipa/rkisp1/algorithms/filter.h\n@@ -22,6 +22,7 @@ public:\n \t~Filter() = default;\n \n \tvoid queueRequest(IPAContext &context, const uint32_t frame,\n+\t\t\t  RKISP1FrameContext &frameContext,\n \t\t\t  const ControlList &controls) override;\n \tvoid prepare(IPAContext &context, unsigned int frame,\n \t\t     RKISP1FrameContext &frameContext,\ndiff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex 7ed69ca15960..724b0ffb6ace 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -295,8 +295,10 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)\n \n void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n {\n+\tRKISP1FrameContext &frameContext = context_.frameContexts.initialise(frame);\n+\n \tfor (auto const &algo : algorithms())\n-\t\talgo->queueRequest(context_, frame, controls);\n+\t\talgo->queueRequest(context_, frame, frameContext, controls);\n }\n \n void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n",
    "prefixes": [
        "libcamera-devel",
        "v3",
        "07/17"
    ]
}