Show a patch.

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

{
    "id": 19754,
    "url": "https://patchwork.libcamera.org/api/patches/19754/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/19754/",
    "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": "<20240319120517.362082-16-stefan.klug@ideasonboard.com>",
    "date": "2024-03-19T12:05:16",
    "name": "[v3,15/16] pipeline: rkisp1: Fix per-frame-controls in manual mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9110f9deef55f529e9e1685540445e3a4e7ad579",
    "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/19754/mbox/",
    "series": [
        {
            "id": 4230,
            "url": "https://patchwork.libcamera.org/api/series/4230/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4230",
            "date": "2024-03-19T12:05:01",
            "name": "Preparation for per-frame-controls and initial tests",
            "version": 3,
            "mbox": "https://patchwork.libcamera.org/series/4230/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/19754/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/19754/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 E1060C3274\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 19 Mar 2024 12:05:46 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8FFC362CA7;\n\tTue, 19 Mar 2024 13:05:46 +0100 (CET)",
            "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 5B54E62D36\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 19 Mar 2024 13:05:31 +0100 (CET)",
            "from jasper.fritz.box (unknown\n\t[IPv6:2a00:6020:448c:6c00:1478:344b:8fcb:baf5])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 90BA2480;\n\tTue, 19 Mar 2024 13:05:04 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"flobxmU8\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1710849904;\n\tbh=d5uXxDEA4RWOM0Eb7ankorQ6javh8XT2aBCxCfLX1jg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=flobxmU8Vw4lk1poyKBZzWIqifJmDSWo9mAA1xyH4ht3egjm6vJNGTuAmgQZtoErX\n\tmtqOz67u4ay2ozadIoXkOu07+Pup3H42/M+eWwPxi3P1Hqu1Eflo4Bftqq8OofeBv7\n\t3Cg9RWsAiQnkEHcqTwwyaNgB3EIFDKcihkjKvww8=",
        "From": "Stefan Klug <stefan.klug@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Stefan Klug <stefan.klug@ideasonboard.com>",
        "Subject": "[PATCH v3 15/16] pipeline: rkisp1: Fix per-frame-controls in manual\n\tmode",
        "Date": "Tue, 19 Mar 2024 13:05:16 +0100",
        "Message-Id": "<20240319120517.362082-16-stefan.klug@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.40.1",
        "In-Reply-To": "<20240319120517.362082-1-stefan.klug@ideasonboard.com>",
        "References": "<20240319120517.362082-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 the\npipeline handler which will then be able to feed the delayed controls early\nenough.\n\nThis solutions is quite simplistic and will need more thoughts as soon as other\nalgorithms 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 6bc09198..240e11e6 100644\n--- a/src/ipa/rkisp1/rkisp1.cpp\n+++ b/src/ipa/rkisp1/rkisp1.cpp\n@@ -322,6 +322,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@@ -370,8 +376,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 abb21968..ab452d8f 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_->push(sensorControls, frame);\n }\n \n void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &metadata)\n",
    "prefixes": [
        "v3",
        "15/16"
    ]
}