Show a patch.

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

{
    "id": 17546,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/17546/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/17546/",
    "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": "<20221006131744.5179-6-naush@raspberrypi.com>",
    "date": "2022-10-06T13:17:39",
    "name": "[libcamera-devel,v2,05/10] pipeline: ipa: raspberrypi: Add HBLANK control to DelayedControls",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "58d7b437757c477bf62418f573baa013368ab87c",
    "submitter": {
        "id": 34,
        "url": "https://patchwork.libcamera.org/api/1.1/people/34/?format=api",
        "name": "Naushir Patuck",
        "email": "naush@raspberrypi.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/17546/mbox/",
    "series": [
        {
            "id": 3537,
            "url": "https://patchwork.libcamera.org/api/1.1/series/3537/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3537",
            "date": "2022-10-06T13:17:34",
            "name": "Raspberry Pi: Horizontal blanking control",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/3537/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/17546/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/17546/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 C390FC3285\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  6 Oct 2022 13:18:01 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 67A9962D12;\n\tThu,  6 Oct 2022 15:18:01 +0200 (CEST)",
            "from mail-wr1-x429.google.com (mail-wr1-x429.google.com\n\t[IPv6:2a00:1450:4864:20::429])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EF74A62CF1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Oct 2022 15:17:57 +0200 (CEST)",
            "by mail-wr1-x429.google.com with SMTP id j7so2695203wrr.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 06 Oct 2022 06:17:57 -0700 (PDT)",
            "from naush-laptop.localdomain ([93.93.133.154])\n\tby smtp.gmail.com with ESMTPSA id\n\tq18-20020a056000137200b0022cc7c32309sm17986049wrz.115.2022.10.06.06.17.56\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 06 Oct 2022 06:17:56 -0700 (PDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665062281;\n\tbh=LiJykRHySPwMITHpitnktWgOfZ/SebcLk52NJaiBcf4=;\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=O57b42VunBALK7mcc7U1fm/6oDYrjq6se3PIYDqwsCjgalbtILj49xD6c5z4ewk2Q\n\tRd1KArh6iP4hXiNNx8JkQ+a1As59Yr8chFnv7q+suJOZeEp8I2KdfODKBjHRoC2Ty4\n\tnqFhXWKG9tPNxPSXrYvYwaprb3fCG4URZbLkVmWtJa1J2kNAOo5g4BQerfn+RTKu2a\n\tkqOOdFDzAjspr/QJn+xPePKVn35mJhfiD6Gg++vEcF99qkSOqYgfbaEpfV9gRaWUJY\n\tJJPA/Oxl1DOeZ3uuSkZBn0jJhGN+ZcmjXd/mYUtf4tL//bQlYHh7JLeysIdjShOJi7\n\tf9GF0dFi8IIgw==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date;\n\tbh=3A80b1nsNT2hQAo3ttEhnCdEVBVLiw4c2Pt97Cf+Zds=;\n\tb=B2ewzxDVtVP/tfhkO2vOO4/HcCPCU5BloHFnti2+5oUefgfBVb4WZz5neqpitKZV8h\n\txHqDM8KOdWzJkpNyd21fFXL/PIEIL710vk0YJewuxQjTh1RWjoSNCIhwbAhghPDzCYDW\n\tS/i7tQudc6pDkTd/1mJzdblmDbIC8cL+C+SKA2DIjllIgkUlfjoZP1/gkTV7iHp2PZq3\n\t3LwHFiSqr3D2vAs0I/7dfL5i23WJbxMy91/P2JezCM5kYIas7lhhKcFLPbiZGs+PlatI\n\tbU7H1hzFT/SNoXMQ87oHIgZ/Z6ZpPu0DnEpIIt2Hapd3tTVakqECOEr7MYoFbIAWDsAa\n\tM/2g=="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"B2ewzxDV\"; dkim-atps=neutral",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date;\n\tbh=3A80b1nsNT2hQAo3ttEhnCdEVBVLiw4c2Pt97Cf+Zds=;\n\tb=odwIpT7woJOdcG3trAsY/do8TkW3Sn2qLsz6MQ1asPZE1V0bOcX5q/w7Qh/5SE1/lP\n\tE+zsdacKrOzBmTle5u7mQtr/CM1d1eshPLo0+SqRkfNLdzWdDBcFW3Po/4u3oKeAh4Jg\n\tXQk4uF/ugOb2qsdUA+4DA8tCmmw0GbwyfrxFCyatm2ZrspJH2iEueq1Cxmd5dRHlFaeL\n\tBRQuPYyg+HkTzX/NvpJ1jF+XLEnSicCU5IJbx/t5tkLXBtxLtZQZAXmQKWBtjDUa0DSS\n\t6X0Z+x7UhLiEN5BGgnQ7HBLPJ+WN8SKzyV6wnf/RSpOivdPcevsY+4JvLz36vEynUKOW\n\t1yoA==",
        "X-Gm-Message-State": "ACrzQf1VsOkqGwFTVK6a8zQUr6bn6cY99fTNc57nUh9KNZ/xu4JpmAbw\n\tsPFhQdCgiLwEWQObvkqPzSklJSi0Qf9cLQ==",
        "X-Google-Smtp-Source": "AMsMyM7n8MDXVQefyKPdgaZajwWIzILh1oOg1jou6jVKz0Pa6yxpbAjdBJk3HZY7WE5/MiR9jcZQyw==",
        "X-Received": "by 2002:a5d:65c4:0:b0:22c:dbdd:7177 with SMTP id\n\te4-20020a5d65c4000000b0022cdbdd7177mr3053983wrw.470.1665062277356; \n\tThu, 06 Oct 2022 06:17:57 -0700 (PDT)",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu,  6 Oct 2022 14:17:39 +0100",
        "Message-Id": "<20221006131744.5179-6-naush@raspberrypi.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20221006131744.5179-1-naush@raspberrypi.com>",
        "References": "<20221006131744.5179-1-naush@raspberrypi.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 05/10] pipeline: ipa: raspberrypi: Add\n\tHBLANK control to DelayedControls",
        "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": "Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Naushir Patuck <naush@raspberrypi.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Update CamHelper::getDelays() to return the sensor HBLANK delay. The HBLANK\ndelay is set to the same value as VBLANK delay for all sensors in the Raspberry\nPi IPA.\n\nReturn the HBLANK gain delay from the IPA to the pipeline handler, and\ninitialise DelayedControls to handle V4L2_CID_HBLANK with this delay value.\n\nAs a drive-by, check that the V4L2_CID_HBLANK control is available when calling\nIPARPi::configure().\n\nSigned-off-by: Naushir Patuck <naush@raspberrypi.com>\nTested-by: Dave Stevenson <dave.stevenson@raspberrypi.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n include/libcamera/ipa/raspberrypi.mojom            | 1 +\n src/ipa/raspberrypi/cam_helper.cpp                 | 3 ++-\n src/ipa/raspberrypi/cam_helper.h                   | 2 +-\n src/ipa/raspberrypi/cam_helper_imx290.cpp          | 5 +++--\n src/ipa/raspberrypi/cam_helper_imx296.cpp          | 6 ++++--\n src/ipa/raspberrypi/cam_helper_imx477.cpp          | 5 +++--\n src/ipa/raspberrypi/cam_helper_imx519.cpp          | 5 +++--\n src/ipa/raspberrypi/cam_helper_ov5647.cpp          | 5 +++--\n src/ipa/raspberrypi/cam_helper_ov9281.cpp          | 5 +++--\n src/ipa/raspberrypi/raspberrypi.cpp                | 6 ++++--\n src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 1 +\n 11 files changed, 28 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom\nindex c0de435b7b33..40f78d9e3b3f 100644\n--- a/include/libcamera/ipa/raspberrypi.mojom\n+++ b/include/libcamera/ipa/raspberrypi.mojom\n@@ -23,6 +23,7 @@ struct SensorConfig {\n \tuint32 gainDelay;\n \tuint32 exposureDelay;\n \tuint32 vblankDelay;\n+\tuint32 hblankDelay;\n \tuint32 sensorMetadata;\n };\n \ndiff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp\nindex 45214531626e..dd7236f1b693 100644\n--- a/src/ipa/raspberrypi/cam_helper.cpp\n+++ b/src/ipa/raspberrypi/cam_helper.cpp\n@@ -107,7 +107,7 @@ void CamHelper::setCameraMode(const CameraMode &mode)\n }\n \n void CamHelper::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t  int &vblankDelay) const\n+\t\t\t  int &vblankDelay, int &hblankDelay) const\n {\n \t/*\n \t * These values are correct for many sensors. Other sensors will\n@@ -116,6 +116,7 @@ void CamHelper::getDelays(int &exposureDelay, int &gainDelay,\n \texposureDelay = 2;\n \tgainDelay = 1;\n \tvblankDelay = 2;\n+\thblankDelay = 2;\n }\n \n bool CamHelper::sensorEmbeddedDataPresent() const\ndiff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/raspberrypi/cam_helper.h\nindex 6771829a56da..db2387afc993 100644\n--- a/src/ipa/raspberrypi/cam_helper.h\n+++ b/src/ipa/raspberrypi/cam_helper.h\n@@ -88,7 +88,7 @@ public:\n \tvirtual uint32_t gainCode(double gain) const = 0;\n \tvirtual double gain(uint32_t gainCode) const = 0;\n \tvirtual void getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t       int &vblankDelay) const;\n+\t\t\t       int &vblankDelay, int &hblankDelay) const;\n \tvirtual bool sensorEmbeddedDataPresent() const;\n \tvirtual double getModeSensitivity(const CameraMode &mode) const;\n \tvirtual unsigned int hideFramesStartup() const;\ndiff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/raspberrypi/cam_helper_imx290.cpp\nindex 25f23d531c72..7d6f5b549a73 100644\n--- a/src/ipa/raspberrypi/cam_helper_imx290.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp\n@@ -18,7 +18,7 @@ public:\n \tuint32_t gainCode(double gain) const override;\n \tdouble gain(uint32_t gainCode) const override;\n \tvoid getDelays(int &exposureDelay, int &gainDelay,\n-\t\t       int &vblankDelay) const override;\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \tunsigned int hideFramesModeSwitch() const override;\n \n private:\n@@ -46,11 +46,12 @@ double CamHelperImx290::gain(uint32_t gainCode) const\n }\n \n void CamHelperImx290::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 2;\n+\thblankDelay = 2;\n }\n \n unsigned int CamHelperImx290::hideFramesModeSwitch() const\ndiff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/raspberrypi/cam_helper_imx296.cpp\nindex d86ff3878983..ecb845e76e12 100644\n--- a/src/ipa/raspberrypi/cam_helper_imx296.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_imx296.cpp\n@@ -23,7 +23,8 @@ public:\n \tdouble gain(uint32_t gainCode) const override;\n \tuint32_t exposureLines(const Duration exposure, const Duration lineLength) const override;\n \tDuration exposure(uint32_t exposureLines, const Duration lineLength) const override;\n-\tvoid getDelays(int &exposureDelay, int &gainDelay, int &vblankDelay) const override;\n+\tvoid getDelays(int &exposureDelay, int &gainDelay,\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \n private:\n \tstatic constexpr uint32_t minExposureLines = 1;\n@@ -66,11 +67,12 @@ Duration CamHelperImx296::exposure(uint32_t exposureLines,\n }\n \n void CamHelperImx296::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 2;\n+\thblankDelay = 2;\n }\n \n static CamHelper *create()\ndiff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/raspberrypi/cam_helper_imx477.cpp\nindex 71529bdd3034..76a82cc51378 100644\n--- a/src/ipa/raspberrypi/cam_helper_imx477.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp\n@@ -49,7 +49,7 @@ public:\n \tuint32_t getVBlanking(Duration &exposure, Duration minFrameDuration,\n \t\t\t      Duration maxFrameDuration) const override;\n \tvoid getDelays(int &exposureDelay, int &gainDelay,\n-\t\t       int &vblankDelay) const override;\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \tbool sensorEmbeddedDataPresent() const override;\n \n private:\n@@ -153,11 +153,12 @@ uint32_t CamHelperImx477::getVBlanking(Duration &exposure,\n }\n \n void CamHelperImx477::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 3;\n+\thblankDelay = 3;\n }\n \n bool CamHelperImx477::sensorEmbeddedDataPresent() const\ndiff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/raspberrypi/cam_helper_imx519.cpp\nindex 2c120dad1680..9dff1eeb899f 100644\n--- a/src/ipa/raspberrypi/cam_helper_imx519.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_imx519.cpp\n@@ -49,7 +49,7 @@ public:\n \tuint32_t getVBlanking(Duration &exposure, Duration minFrameDuration,\n \t\t\t      Duration maxFrameDuration) const override;\n \tvoid getDelays(int &exposureDelay, int &gainDelay,\n-\t\t       int &vblankDelay) const override;\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \tbool sensorEmbeddedDataPresent() const override;\n \n private:\n@@ -153,11 +153,12 @@ uint32_t CamHelperImx519::getVBlanking(Duration &exposure,\n }\n \n void CamHelperImx519::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 3;\n+\thblankDelay = 3;\n }\n \n bool CamHelperImx519::sensorEmbeddedDataPresent() const\ndiff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/raspberrypi/cam_helper_ov5647.cpp\nindex 04fb725d42db..5a99083dee78 100644\n--- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp\n@@ -18,7 +18,7 @@ public:\n \tuint32_t gainCode(double gain) const override;\n \tdouble gain(uint32_t gainCode) const override;\n \tvoid getDelays(int &exposureDelay, int &gainDelay,\n-\t\t       int &vblankDelay) const override;\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \tunsigned int hideFramesStartup() const override;\n \tunsigned int hideFramesModeSwitch() const override;\n \tunsigned int mistrustFramesStartup() const override;\n@@ -53,7 +53,7 @@ double CamHelperOv5647::gain(uint32_t gainCode) const\n }\n \n void CamHelperOv5647::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \t/*\n \t * We run this sensor in a mode where the gain delay is bumped up to\n@@ -62,6 +62,7 @@ void CamHelperOv5647::getDelays(int &exposureDelay, int &gainDelay,\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 2;\n+\thblankDelay = 2;\n }\n \n unsigned int CamHelperOv5647::hideFramesStartup() const\ndiff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/raspberrypi/cam_helper_ov9281.cpp\nindex 66f56a31e1b8..86c5bc4c8fda 100644\n--- a/src/ipa/raspberrypi/cam_helper_ov9281.cpp\n+++ b/src/ipa/raspberrypi/cam_helper_ov9281.cpp\n@@ -18,7 +18,7 @@ public:\n \tuint32_t gainCode(double gain) const override;\n \tdouble gain(uint32_t gainCode) const override;\n \tvoid getDelays(int &exposureDelay, int &gainDelay,\n-\t\t       int &vblankDelay) const override;\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n \n private:\n \t/*\n@@ -49,12 +49,13 @@ double CamHelperOv9281::gain(uint32_t gainCode) const\n }\n \n void CamHelperOv9281::getDelays(int &exposureDelay, int &gainDelay,\n-\t\t\t\tint &vblankDelay) const\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n {\n \t/* The driver appears to behave as follows: */\n \texposureDelay = 2;\n \tgainDelay = 2;\n \tvblankDelay = 2;\n+\thblankDelay = 2;\n }\n \n static CamHelper *create()\ndiff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\nindex 13807f4d47f7..9b0ad4361c97 100644\n--- a/src/ipa/raspberrypi/raspberrypi.cpp\n+++ b/src/ipa/raspberrypi/raspberrypi.cpp\n@@ -219,13 +219,14 @@ int IPARPi::init(const IPASettings &settings, IPAInitResult *result)\n \t * Pass out the sensor config to the pipeline handler in order\n \t * to setup the staggered writer class.\n \t */\n-\tint gainDelay, exposureDelay, vblankDelay, sensorMetadata;\n-\thelper_->getDelays(exposureDelay, gainDelay, vblankDelay);\n+\tint gainDelay, exposureDelay, vblankDelay, hblankDelay, sensorMetadata;\n+\thelper_->getDelays(exposureDelay, gainDelay, vblankDelay, hblankDelay);\n \tsensorMetadata = helper_->sensorEmbeddedDataPresent();\n \n \tresult->sensorConfig.gainDelay = gainDelay;\n \tresult->sensorConfig.exposureDelay = exposureDelay;\n \tresult->sensorConfig.vblankDelay = vblankDelay;\n+\tresult->sensorConfig.hblankDelay = hblankDelay;\n \tresult->sensorConfig.sensorMetadata = sensorMetadata;\n \n \t/* Load the tuning file for this sensor. */\n@@ -607,6 +608,7 @@ bool IPARPi::validateSensorControls()\n \t\tV4L2_CID_ANALOGUE_GAIN,\n \t\tV4L2_CID_EXPOSURE,\n \t\tV4L2_CID_VBLANK,\n+\t\tV4L2_CID_HBLANK,\n \t};\n \n \tfor (auto c : ctrls) {\ndiff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\nindex bcb5bb8a1e73..61997326f7f9 100644\n--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n@@ -1289,6 +1289,7 @@ int PipelineHandlerRPi::registerCamera(MediaDevice *unicam, MediaDevice *isp, Me\n \tstd::unordered_map<uint32_t, DelayedControls::ControlParams> params = {\n \t\t{ V4L2_CID_ANALOGUE_GAIN, { result.sensorConfig.gainDelay, false } },\n \t\t{ V4L2_CID_EXPOSURE, { result.sensorConfig.exposureDelay, false } },\n+\t\t{ V4L2_CID_HBLANK, { result.sensorConfig.hblankDelay, false } },\n \t\t{ V4L2_CID_VBLANK, { result.sensorConfig.vblankDelay, true } }\n \t};\n \tdata->delayedCtrls_ = std::make_unique<DelayedControls>(data->sensor_->device(), params);\n",
    "prefixes": [
        "libcamera-devel",
        "v2",
        "05/10"
    ]
}