Show a patch.

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

{
    "id": 19699,
    "url": "https://patchwork.libcamera.org/api/patches/19699/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/19699/",
    "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": "<20240313105645.120317-13-stefan.klug@ideasonboard.com>",
    "date": "2024-03-13T10:56:44",
    "name": "[11/12] pipeline: rkisp1: Fix per-frame-controls in manual mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "206b9d2e4adc51b6b4a5139bd38db574d355bc0e",
    "submitter": {
        "id": 184,
        "url": "https://patchwork.libcamera.org/api/people/184/?format=api",
        "name": "Stefan Klug",
        "email": "stefan.klug@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/19699/mbox/",
    "series": [
        {
            "id": 4219,
            "url": "https://patchwork.libcamera.org/api/series/4219/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4219",
            "date": "2024-03-13T10:56:32",
            "name": "Preparation for per-frame-controls and initial tests",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/4219/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/19699/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/19699/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 6F867C32A3\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Mar 2024 10:57:14 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0248662C96;\n\tWed, 13 Mar 2024 11:57:10 +0100 (CET)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 652FF62C90\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Mar 2024 11:56:55 +0100 (CET)",
            "from jasper.fritz.box (unknown\n\t[IPv6:2a00:6020:448c:6c00:9b07:31b5:38e1:e957])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DCCEBA8F;\n\tWed, 13 Mar 2024 11:56:32 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"CyNfWp8v\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1710327393;\n\tbh=7OIkJ8llq2WQ664El73vGRKGKvUxgjQIquAjBIulhF4=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=CyNfWp8v0h+iqXP5I3NOu7Bm8xIsAxhwn0kzBAWXv2sbBaQxHbO2vyQNGtTiBdIUP\n\t8k/KCWcAA5uFGkCB7nQG53iA6jQhoYYdKztAE0fkysXK0cYnsHkxOHxfKAN6expak4\n\t+PozwzgAzwyiAAZ66+qFoOPLizNQe8LluSXRfRCg=",
        "From": "Stefan Klug <stefan.klug@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Subject": "[PATCH 11/12] pipeline: rkisp1: Fix per-frame-controls in manual\n\tmode",
        "Date": "Wed, 13 Mar 2024 11:56:44 +0100",
        "Message-Id": "<20240313105645.120317-13-stefan.klug@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.40.1",
        "In-Reply-To": "<20240313105645.120317-1-stefan.klug@ideasonboard.com>",
        "References": "<20240313105645.120317-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": "If the isp is not regulating, it can forward the request directly to\nthe pipeline handler which will then be able to feed the delayed controls\nearly enough.\n\nThis solutions is quite simplistic and will need more thoughts as soon\nas other algorithms get implemented.\n\nSigned-off-by: Stefan Klug <stefan.klug@ideasonboard.com>\n---\n src/ipa/rkisp1/rkisp1.cpp                | 16 ++++++++++++++--\n src/libcamera/pipeline/rkisp1/rkisp1.cpp |  2 +-\n 2 files changed, 15 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\nindex 71db2ae7..8780abc9 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -321,6 +321,12 @@ void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n \t\t\tcontinue;\n \t\talgo->queueRequest(context_, frame, frameContext, controls);\n \t}\n+\n+\t/* Fast path, if we are not regulating */\n+\tif (!frameContext.agc.autoEnabled) {\n+\t\tControlList ctrls = getControls(frame);\n+\t\tsetSensorControls.emit(frame, ctrls);\n+\t}\n }\n \n void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n@@ -369,8 +375,14 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n \t\talgo->process(context_, frame, frameContext, stats, metadata);\n \t}\n \n-\tControlList ctrls = getControls(frame);\n-\tsetSensorControls.emit(frame, ctrls);\n+\t/*\n+\t * Set controls only when we are actually regulation. Otherwise, the controls\n+\t * where already set in queueRequest\n+\t */\n+\tif (frameContext.agc.autoEnabled) {\n+\t\tControlList ctrls = getControls(frame);\n+\t\tsetSensorControls.emit(frame, ctrls);\n+\t}\n \n \tmetadataReady.emit(frame, metadata);\n }\ndiff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\nindex 586b46d6..3e061b52 100644\n--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp\n@@ -401,7 +401,7 @@ void RkISP1CameraData::paramFilled(unsigned int frame)\n void RkISP1CameraData::setSensorControls([[maybe_unused]] unsigned int frame,\n \t\t\t\t\t const ControlList &sensorControls)\n {\n-\tdelayedCtrls_->push(sensorControls);\n+\tdelayedCtrls_->pushForFrame(frame, sensorControls);\n }\n \n void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata)\n",
    "prefixes": [
        "11/12"
    ]
}