Patch Detail
Show a patch.
GET /api/1.1/patches/24789/?format=api
{ "id": 24789, "url": "https://patchwork.libcamera.org/api/1.1/patches/24789/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24789/", "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": "<20251024085130.995967-24-stefan.klug@ideasonboard.com>", "date": "2025-10-24T08:50:47", "name": "[v1,23/35] ipa: rkisp1: Lazy initialise frame context", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "40f9decbf8aa0f34574c2ad6163c0562c71bad81", "submitter": { "id": 184, "url": "https://patchwork.libcamera.org/api/1.1/people/184/?format=api", "name": "Stefan Klug", "email": "stefan.klug@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/24789/mbox/", "series": [ { "id": 5524, "url": "https://patchwork.libcamera.org/api/1.1/series/5524/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5524", "date": "2025-10-24T08:50:24", "name": "rkisp1: pipeline rework for PFC", "version": 1, "mbox": "https://patchwork.libcamera.org/series/5524/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/24789/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24789/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 2C04BC3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Oct 2025 08:52:49 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DC6BA608F1;\n\tFri, 24 Oct 2025 10:52:48 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9971B608C7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Oct 2025 10:52:46 +0200 (CEST)", "from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:7edc:62f4:c118:1549])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 15D7E484E; \n\tFri, 24 Oct 2025 10:51:01 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"j6NYDYtJ\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761295861;\n\tbh=dxCtoWpqKdzg6ayd/boXKOq/crNZYfHq5PZj88Ea2eg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=j6NYDYtJGMNgNCoyO+RYaQ/vcamY/7Ism/UoOyhaA6hI1q11+8xkLGBIHmt1FQ9L3\n\thtdDbvs2l+dCqW2Zn2ChxI6UPTfNCkVGITq+KB8NKvg9A+VkXuac7CP+K7Ltj+htQJ\n\tCWSdlhnhq+rvHtDIAbmKPSTAAWaWmpyXj1cfTu1w=", "From": "Stefan Klug <stefan.klug@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Stefan Klug <stefan.klug@ideasonboard.com>", "Subject": "[PATCH v1 23/35] ipa: rkisp1: Lazy initialise frame context", "Date": "Fri, 24 Oct 2025 10:50:47 +0200", "Message-ID": "<20251024085130.995967-24-stefan.klug@ideasonboard.com>", "X-Mailer": "git-send-email 2.48.1", "In-Reply-To": "<20251024085130.995967-1-stefan.klug@ideasonboard.com>", "References": "<20251024085130.995967-1-stefan.klug@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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": "For per frame control we want to tick the IPA by the sensor frame\nsequence instead of the request frame sequence. This has the side effect\nthat the IPA must be able to cope with situations where a frame context\nis required for a frame that was not queued before (computeParams is\ncalled without a corresponding request) or processStats is called for an\nunexpected sequence number (because a scratch buffer was used on kernel\nside)\n\nPrepare for that by allowing the frame context to be initialized on demand.\n\nSigned-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n---\n src/ipa/rkisp1/algorithms/awb.cpp | 2 ++\n src/ipa/rkisp1/ipa_context.h | 2 ++\n src/ipa/rkisp1/rkisp1.cpp | 6 ++++++\n 3 files changed, 10 insertions(+)", "diff": "diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp\nindex 399fb51be414..27109478c340 100644\n--- a/src/ipa/rkisp1/algorithms/awb.cpp\n+++ b/src/ipa/rkisp1/algorithms/awb.cpp\n@@ -172,6 +172,8 @@ void Awb::queueRequest(IPAContext &context,\n \tawbAlgo_->handleControls(controls);\n \n \tframeContext.awb.autoEnabled = awb.autoEnabled;\n+\tframeContext.awb.gains = awb.automatic.gains;\n+\tframeContext.awb.temperatureK = awb.automatic.temperatureK;\n \n \tif (awb.autoEnabled)\n \t\treturn;\ndiff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\nindex f85a130d9c23..185951fb8286 100644\n--- a/src/ipa/rkisp1/ipa_context.h\n+++ b/src/ipa/rkisp1/ipa_context.h\n@@ -214,6 +214,8 @@ struct IPAFrameContext : public FrameContext {\n \t\tdouble strength;\n \t\tdouble gain;\n \t} wdr;\n+\n+\tbool initialised;\n };\n \n struct IPAContext {\ndiff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex 01b30c947a0a..23d80bc43c5d 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -343,6 +343,10 @@ void IPARkISP1::initializeFrameContext(const uint32_t frame,\n \t\t\t\t IPAFrameContext &frameContext,\n \t\t\t\t const ControlList &controls)\n {\n+\tif (frameContext.initialised)\n+\t\treturn;\n+\n+\tframeContext.initialised = true;\n \tfor (auto const &a : algorithms()) {\n \t\tAlgorithm *algo = static_cast<Algorithm *>(a.get());\n \t\tif (algo->disabled_)\n@@ -354,6 +358,7 @@ void IPARkISP1::initializeFrameContext(const uint32_t frame,\n void IPARkISP1::computeParams(const uint32_t frame, const uint32_t bufferId)\n {\n \tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n+\tinitializeFrameContext(frame, frameContext, {});\n \n \t/*\n \t * \\todo: This needs discussion. In raw mode, computeParams is\n@@ -383,6 +388,7 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,\n \t\t\t const ControlList &sensorControls)\n {\n \tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n+\tinitializeFrameContext(frame, frameContext, {});\n \n \t/*\n \t * In raw capture mode, the ISP is bypassed and no statistics buffer is\n", "prefixes": [ "v1", "23/35" ] }