Patch Detail
Show a patch.
GET /api/patches/21795/?format=api
{ "id": 21795, "url": "https://patchwork.libcamera.org/api/patches/21795/?format=api", "web_url": "https://patchwork.libcamera.org/patch/21795/", "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": "<20241031160741.253855-6-dan.scally@ideasonboard.com>", "date": "2024-10-31T16:07:40", "name": "[5/6] libcamera: camera_sensor_properties: Add sensor control delays", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "5ad8759fab86e388a0af33e59b67af4900662dca", "submitter": { "id": 156, "url": "https://patchwork.libcamera.org/api/people/156/?format=api", "name": "Dan Scally", "email": "dan.scally@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/21795/mbox/", "series": [ { "id": 4762, "url": "https://patchwork.libcamera.org/api/series/4762/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4762", "date": "2024-10-31T16:07:35", "name": "Centralise common functions in IPA modules", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4762/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/21795/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/21795/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 660D6C3292\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 31 Oct 2024 16:08:28 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 325A3653B8;\n\tThu, 31 Oct 2024 17:08:26 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id C88A2653A1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 31 Oct 2024 17:08:13 +0100 (CET)", "from mail.ideasonboard.com\n\t(cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B1F25E0D;\n\tThu, 31 Oct 2024 17:08:09 +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=\"CfbXoG84\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1730390889;\n\tbh=qKy6v6XlBz3HiJ7DoKrtKJfauMB3/lVgACuzHKorkXY=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=CfbXoG84FddfjmnjgkF6Y+gt6BdKOXbU+FDcMIYkNBCWjhk8CclAwduAVjT10NwQX\n\tpYJ0J7slwI6soEVzo3/ZjIN+jVGDL2BHNHy3/XNewIQ7/PFpYotLHN9LlxDjTN3uI/\n\tSTdgVev6TNTjdaCTwe/4mis9VTBv0jW9D59iith0=", "From": "Daniel Scally <dan.scally@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "mike.rudenko@gmail.com,\n\tDaniel Scally <dan.scally@ideasonboard.com>", "Subject": "[PATCH 5/6] libcamera: camera_sensor_properties: Add sensor control\n\tdelays", "Date": "Thu, 31 Oct 2024 16:07:40 +0000", "Message-Id": "<20241031160741.253855-6-dan.scally@ideasonboard.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20241031160741.253855-1-dan.scally@ideasonboard.com>", "References": "<20241031160741.253855-1-dan.scally@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": "Add properties covering the sensor control application delays to both\nthe list of control values and the static CameraSensorProperties\ndefinitions. The values used are the defaults that're in use across\nthe library, with deviations from that taken from Raspberry Pi's\nCamHelper class definitions.\n\nInitialise the properties from the static database during the same\nCameraSensor::initStaticProperties() function that currently handles\nthe UnitCellSize.\n\nSigned-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\n\nIf anyone has a suggestion for a graceful way to set default values without\ncausing warnings due to -Wmissing-field-initializers I'm very interested...\n\n .../internal/camera_sensor_properties.h | 13 ++\n src/libcamera/property_ids_core.yaml | 25 +++\n src/libcamera/sensor/camera_sensor.cpp | 8 +\n .../sensor/camera_sensor_properties.cpp | 167 ++++++++++++++++++\n 4 files changed, 213 insertions(+)", "diff": "diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\nindex 480ac121..cd176b9e 100644\n--- a/include/libcamera/internal/camera_sensor_properties.h\n+++ b/include/libcamera/internal/camera_sensor_properties.h\n@@ -10,6 +10,8 @@\n #include <map>\n #include <string>\n \n+#include <stdint.h>\n+\n #include <libcamera/control_ids.h>\n #include <libcamera/geometry.h>\n \n@@ -20,6 +22,17 @@ struct CameraSensorProperties {\n \n \tSize unitCellSize;\n \tstd::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;\n+\n+\t/*\n+\t * These values are correct for many sensors. Other sensors will need to\n+\t * have the defaults overwritten in their CameraSensorProperties entry.\n+\t */\n+\tstruct {\n+\t\tuint8_t exposureDelay;\n+\t\tuint8_t gainDelay;\n+\t\tuint8_t vblankDelay;\n+\t\tuint8_t hblankDelay;\n+\t} sensorDelays;\n };\n \n } /* namespace libcamera */\ndiff --git a/src/libcamera/property_ids_core.yaml b/src/libcamera/property_ids_core.yaml\nindex 834454a4..a01c4014 100644\n--- a/src/libcamera/property_ids_core.yaml\n+++ b/src/libcamera/property_ids_core.yaml\n@@ -701,4 +701,29 @@ controls:\n \n Different cameras may report identical devices.\n \n+ - ExposureDelay:\n+ type: uint8_t\n+ description: |\n+ The number of frames delay between an Exposure value being configured in\n+ the sensor's registers and taking effect in the output data.\n+\n+ - GainDelay:\n+ type: uint8_t\n+ description: |\n+ The number of frames delay between a Gain value being configured in\n+ the sensor's registers and taking effect in the output data.\n+\n+ - VerticalBlankingDelay:\n+ type: uint8_t\n+ description: |\n+ The number of frames delay between a Horizontal Blanking value being\n+ configured in the sensor's registers and taking effect in the output\n+ data.\n+\n+ - HorizontalBlankingDelay:\n+ type: uint8_t\n+ description: |\n+ The number of frames delay between a Vertical Blanking value being\n+ configured in the sensor's registers and taking effect in the output\n+ data.\n ...\ndiff --git a/src/libcamera/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp\nindex 1b224f19..c9a3761e 100644\n--- a/src/libcamera/sensor/camera_sensor.cpp\n+++ b/src/libcamera/sensor/camera_sensor.cpp\n@@ -387,6 +387,14 @@ void CameraSensor::initStaticProperties()\n \n \t/* Register the properties retrieved from the sensor database. */\n \tproperties_.set(properties::UnitCellSize, staticProps_->unitCellSize);\n+\tproperties_.set(properties::ExposureDelay,\n+\t\t\tstaticProps_->sensorDelays.exposureDelay);\n+\tproperties_.set(properties::GainDelay,\n+\t\t\tstaticProps_->sensorDelays.gainDelay);\n+\tproperties_.set(properties::VerticalBlankingDelay,\n+\t\t\tstaticProps_->sensorDelays.vblankDelay);\n+\tproperties_.set(properties::HorizontalBlankingDelay,\n+\t\t\tstaticProps_->sensorDelays.hblankDelay);\n \n \tinitTestPatternModes();\n }\ndiff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp\nindex 6d4136d0..60d59f79 100644\n--- a/src/libcamera/sensor/camera_sensor_properties.cpp\n+++ b/src/libcamera/sensor/camera_sensor_properties.cpp\n@@ -41,6 +41,11 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)\n * \\brief Map that associates the TestPattern control value with the indexes of\n * the corresponding sensor test pattern modes as returned by\n * V4L2_CID_TEST_PATTERN.\n+ *\n+ * \\var CameraSensorProperties::sensorDelays\n+ * \\brief struct holding the number of frames delay between a control value\n+ * set and taking effect for each of exposure, gain, vertical blanking and\n+ * horizontal blanking.\n */\n \n /**\n@@ -60,6 +65,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ar0521\", {\n \t\t\t.unitCellSize = { 2200, 2200 },\n@@ -69,6 +80,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"hi846\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -87,6 +104,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * 9: \"Resolution Pattern\"\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx214\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -97,6 +120,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx219\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -107,6 +136,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx258\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -117,34 +152,82 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx283\", {\n \t\t\t.unitCellSize = { 2400, 2400 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx290\", {\n \t\t\t.unitCellSize = { 2900, 2900 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx296\", {\n \t\t\t.unitCellSize = { 3450, 3450 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx327\", {\n \t\t\t.unitCellSize = { 2900, 2900 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx335\", {\n \t\t\t.unitCellSize = { 2000, 2000 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx415\", {\n \t\t\t.unitCellSize = { 1450, 1450 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx477\", {\n \t\t\t.unitCellSize = { 1550, 1550 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 3,\n+\t\t\t\t.hblankDelay = 3\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx519\", {\n \t\t\t.unitCellSize = { 1220, 1220 },\n@@ -157,6 +240,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * these two patterns do not comply with MIPI CCS v1.1 (Section 10.1).\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 3,\n+\t\t\t\t.hblankDelay = 3\n+\t\t\t},\n \t\t} },\n \t\t{ \"imx708\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -167,6 +256,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n \t\t\t\t{ controls::draft::TestPatternModePn9, 4 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 3,\n+\t\t\t\t.hblankDelay = 3\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov2685\", {\n \t\t\t.unitCellSize = { 1750, 1750 },\n@@ -181,6 +276,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * 5: \"Color Square\"\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov2740\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -188,6 +289,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 1},\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov4689\", {\n \t\t\t.unitCellSize = { 2000, 2000 },\n@@ -201,6 +308,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * colorBarType2 and colorBarType3.\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov5640\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -208,10 +321,22 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov5647\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov5670\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -219,6 +344,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov5675\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -226,6 +357,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov5693\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -238,6 +375,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * Rolling Bar\".\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov64a40\", {\n \t\t\t.unitCellSize = { 1008, 1008 },\n@@ -251,6 +394,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * 4: \"Vertical Color Bar Type 4\"\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 2,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov8858\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -264,6 +413,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * 4: \"Vertical Color Bar Type 4\"\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov8865\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -278,6 +433,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t * 5: \"Color squares with rolling bar\"\n \t\t\t\t */\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t\t{ \"ov13858\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -285,6 +446,12 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n \t\t\t\t{ controls::draft::TestPatternModeOff, 0 },\n \t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },\n \t\t\t},\n+\t\t\t.sensorDelays = {\n+\t\t\t\t.exposureDelay = 2,\n+\t\t\t\t.gainDelay = 1,\n+\t\t\t\t.vblankDelay = 2,\n+\t\t\t\t.hblankDelay = 2\n+\t\t\t},\n \t\t} },\n \t};\n \n", "prefixes": [ "5/6" ] }