Patch Detail
Show a patch.
GET /api/1.1/patches/24777/?format=api
{ "id": 24777, "url": "https://patchwork.libcamera.org/api/1.1/patches/24777/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24777/", "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-12-stefan.klug@ideasonboard.com>", "date": "2025-10-24T08:50:35", "name": "[v1,11/35] ipa: rkisp1: Move setSensorControls signal to computeParams", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "93b7b726de33062f05c1a14b43565e86022fc970", "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/24777/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/24777/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24777/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 5B8EAC3259\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Oct 2025 08:52:11 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1869C608B5;\n\tFri, 24 Oct 2025 10:52:11 +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 B367160871\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Oct 2025 10:52:09 +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 1BF981E47; \n\tFri, 24 Oct 2025 10:50:24 +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=\"g3NhYVtm\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761295824;\n\tbh=JM75Hf0fKghmW5/ZsfZ4EOJip8kutXtOZC4v2jUHinM=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=g3NhYVtm4bz3/PWCAkza/3Fj6T79G30WIToX7M4nczuhZ3mDkmANs+rRinZ37YsUP\n\tPyo/GFgVOun27FXrtOs0AYFBTiz5vd6b2pgds7b+pH4eSmUUqjvItJI5uYB71hsMOg\n\tpi5JD92jH5ezE0VXEzr3bqbY+SuP6ZUc4CHE3iis=", "From": "Stefan Klug <stefan.klug@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Stefan Klug <stefan.klug@ideasonboard.com>", "Subject": "[PATCH v1 11/35] ipa: rkisp1: Move setSensorControls signal to\n\tcomputeParams", "Date": "Fri, 24 Oct 2025 10:50:35 +0200", "Message-ID": "<20251024085130.995967-12-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": "The setSensorControls event is emitted in the processStats() function.\nOn first sight this looks reasonable as in processStats() we got the\nlatest statistics and can therefore calculate the most up to date sensor\ncontrols.\n\nIn the light of per-frame-controls however it produces difficult to\nsolve timing issues:\n\n- The frame context in processStats() is the frame context of the frame\n that produced the stats, not for the frame that should be prepared and\nsent to the sensor.\n\n- To synchronize digital gain applied in the ISP with the analog gain\n applied in the sensor the set of parameters prepared for sensor and\nISP must also be synchronized, which is not the case.\n\nTo fix that, move the calculation and setting of sensor controls into\nthe computeParams(). This way the model is far more easy to understand.\n\nWe loose a tiny option for optimizations in that (in theory) we could\ndelay the calculation of ISP parameters by another frame (assuming the\nsensor has a typical 2-frame delay). But all discussions and tests\nshowed that keeping all parameters in sync is more important than that\npossible optimization for one frame.\n\nSigned-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n---\n src/ipa/rkisp1/rkisp1.cpp | 10 +++-------\n 1 file changed, 3 insertions(+), 7 deletions(-)", "diff": "diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex d64c72ecaf4f..ab8583e389d3 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -349,6 +349,9 @@ void IPARkISP1::computeParams(const uint32_t frame, const uint32_t bufferId)\n \tfor (auto const &algo : algorithms())\n \t\talgo->prepare(context_, frame, frameContext, ¶ms);\n \n+\tControlList ctrls = getSensorControls(frameContext);\n+\tsetSensorControls.emit(frame, ctrls);\n+\n \tparamsComputed.emit(frame, params.size());\n }\n \n@@ -380,13 +383,6 @@ void IPARkISP1::processStats(const uint32_t frame, const uint32_t bufferId,\n \t\talgo->process(context_, frame, frameContext, stats, metadata);\n \t}\n \n-\t/*\n-\t * \\todo: Here we should do a lookahead that takes the sensor delays\n-\t * into account.\n-\t */\n-\tControlList ctrls = getSensorControls(frameContext);\n-\tsetSensorControls.emit(frame, ctrls);\n-\n \tcontext_.debugMetadata.moveEntries(metadata);\n \tmetadataReady.emit(frame, metadata);\n }\n", "prefixes": [ "v1", "11/35" ] }