{"id":21901,"url":"https://patchwork.libcamera.org/api/patches/21901/?format=json","web_url":"https://patchwork.libcamera.org/patch/21901/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20241115074628.417215-6-dan.scally@ideasonboard.com>","date":"2024-11-15T07:46:27","name":"[v3,5/6] libcamera: camera_sensor_properties: Add sensor control delays","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"cc5b13c90491cbedf4a9e3b6f4b7ff9c458f7b7d","submitter":{"id":156,"url":"https://patchwork.libcamera.org/api/people/156/?format=json","name":"Dan Scally","email":"dan.scally@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/21901/mbox/","series":[{"id":4792,"url":"https://patchwork.libcamera.org/api/series/4792/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4792","date":"2024-11-15T07:46:22","name":"Centralise common functions in IPA modules","version":3,"mbox":"https://patchwork.libcamera.org/series/4792/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/21901/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/21901/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 9D24FC330B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 15 Nov 2024 07:46:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EA7236586F;\n\tFri, 15 Nov 2024 08:46:58 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 43ECB65860\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 15 Nov 2024 08:46:49 +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 855D7291;\n\tFri, 15 Nov 2024 08:46:34 +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=\"XaD5flRd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1731656794;\n\tbh=dBcOvZc7yO3j2flltzJyhsLe7qUtFxUMmu8yS4jIYMc=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=XaD5flRd3olg+HdF6xdqqMAjnM9PW8NW7xY0M/33nqiYLHCN+yLlcaiV8ASmYI3U4\n\tQEn+RyRMiJ+pLMLjyzMeHkb+ydCE/SncsumIdglgNPGt06z8l9RoA7AyR0bYlWSfOw\n\tedJUStt0XBMm7BCcrPu7n5j9rYGEgzKACYnn9VNc=","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 v3 5/6] libcamera: camera_sensor_properties: Add sensor\n\tcontrol delays","Date":"Fri, 15 Nov 2024 07:46:27 +0000","Message-Id":"<20241115074628.417215-6-dan.scally@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20241115074628.417215-1-dan.scally@ideasonboard.com>","References":"<20241115074628.417215-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 static CameraSensorProperties definitions. The values used are the\ndefaults that're in use across the library, with deviations from that\ntaken from Raspberry Pi's CamHelper class definitions.\n\nSigned-off-by: Daniel Scally <dan.scally@ideasonboard.com>\n---\nChanges in v3:\n\n\t- Rebased on top of the CameraSensorFactory introduction\n\t- Some rephrasing\n\t- Defined the sensorDelays member as empty where Raspberry Pi didn't\n\t  have any specific values. Check for the empty struct in\n\t  getSensorDelays() and return the defaults from there with a warning.\n\nChanges in v2:\n\n\t- Rather than adding the delays to the properties ControlList, added a\n\t  new function in CameraSensor that allows PipelineHandlers to retreive\n\t  the delay values.\n\n include/libcamera/internal/camera_sensor.h    |  2 +\n .../internal/camera_sensor_properties.h       |  9 +++\n src/libcamera/sensor/camera_sensor.cpp        | 13 +++\n src/libcamera/sensor/camera_sensor_legacy.cpp | 33 ++++++++\n .../sensor/camera_sensor_properties.cpp       | 79 +++++++++++++++++++\n 5 files changed, 136 insertions(+)","diff":"diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h\nindex 8aafd82e..a9b2d494 100644\n--- a/include/libcamera/internal/camera_sensor.h\n+++ b/include/libcamera/internal/camera_sensor.h\n@@ -73,6 +73,8 @@ public:\n \tvirtual const std::vector<controls::draft::TestPatternModeEnum> &\n \ttestPatternModes() const = 0;\n \tvirtual int setTestPatternMode(controls::draft::TestPatternModeEnum mode) = 0;\n+\tvirtual void getSensorDelays(uint8_t &exposureDelay, uint8_t &gainDelay,\n+\t\t\t\t     uint8_t &vblankDelay, uint8_t &hblankDelay) = 0;\n };\n \n class CameraSensorFactoryBase\ndiff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\nindex 480ac121..56d5c15d 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,13 @@ struct CameraSensorProperties {\n \n \tSize unitCellSize;\n \tstd::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;\n+\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/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp\nindex 54cf98b2..61420873 100644\n--- a/src/libcamera/sensor/camera_sensor.cpp\n+++ b/src/libcamera/sensor/camera_sensor.cpp\n@@ -336,6 +336,19 @@ CameraSensor::~CameraSensor() = default;\n  * pattern mode for every frame thus incurs no performance penalty.\n  */\n \n+/**\n+ * \\fn CameraSensor::getSensorDelays()\n+ * \\brief Fetch the sensor delay values\n+ * \\param[out] exposureDelay The exposure delay\n+ * \\param[out] gainDelay The analogue gain delay\n+ * \\param[out] vblankDelay The vblank delay\n+ * \\param[out] hblankDelay The hblank delay\n+ *\n+ * This function fills in sensor control delays for pipeline handlers to use to\n+ * inform the DelayedControls. If no static properties are available it fills in\n+ * some widely applicable default values.\n+ */\n+\n /**\n  * \\class CameraSensorFactoryBase\n  * \\brief Base class for camera sensor factories\ndiff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp\nindex a9b15c03..84972f02 100644\n--- a/src/libcamera/sensor/camera_sensor_legacy.cpp\n+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp\n@@ -95,6 +95,8 @@ public:\n \tconst std::vector<controls::draft::TestPatternModeEnum> &\n \ttestPatternModes() const override { return testPatternModes_; }\n \tint setTestPatternMode(controls::draft::TestPatternModeEnum mode) override;\n+\tvoid getSensorDelays(uint8_t &exposureDelay, uint8_t &gainDelay,\n+\t\t\t     uint8_t &vblankDelay, uint8_t &hblankDelay) override;\n \n protected:\n \tstd::string logPrefix() const override;\n@@ -482,6 +484,37 @@ void CameraSensorLegacy::initStaticProperties()\n \tinitTestPatternModes();\n }\n \n+void CameraSensorLegacy::getSensorDelays(uint8_t &exposureDelay, uint8_t &gainDelay,\n+\t\t\t\t\t uint8_t &vblankDelay, uint8_t &hblankDelay)\n+{\n+\n+\t/*\n+\t * These defaults are applicable to many sensors, however more specific\n+\t * values can be added to the CameraSensorProperties for a sensor if\n+\t * required.\n+\t */\n+\tif (!staticProps_ ||\n+\t    (!staticProps_->sensorDelays.exposureDelay &&\n+\t     !staticProps_->sensorDelays.gainDelay &&\n+\t     !staticProps_->sensorDelays.vblankDelay &&\n+\t     !staticProps_->sensorDelays.hblankDelay)) {\n+\t\tLOG(CameraSensor, Warning)\n+\t\t\t<< \"No sensor delays found in static properties. \"\n+\t\t\t   \"Assuming unverified defaults.\";\n+\n+\t\texposureDelay = 2;\n+\t\tgainDelay = 1;\n+\t\tvblankDelay = 2;\n+\t\thblankDelay = 2;\n+\t\treturn;\n+\t}\n+\n+\texposureDelay = staticProps_->sensorDelays.exposureDelay;\n+\tgainDelay = staticProps_->sensorDelays.gainDelay;\n+\tvblankDelay = staticProps_->sensorDelays.vblankDelay;\n+\thblankDelay = staticProps_->sensorDelays.hblankDelay;\n+}\n+\n void CameraSensorLegacy::initTestPatternModes()\n {\n \tconst auto &v4l2TestPattern = controls().find(V4L2_CID_TEST_PATTERN);\ndiff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp\nindex 6d4136d0..6dda7ba9 100644\n--- a/src/libcamera/sensor/camera_sensor_properties.cpp\n+++ b/src/libcamera/sensor/camera_sensor_properties.cpp\n@@ -41,6 +41,13 @@ 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 Holds the delays, expressed in number of frames, between the time a\n+ * control is applied to the sensor and the time it actually takes effect.\n+ * Delays are recorded for the exposure time, analogue gain, vertical and\n+ * horizontal blanking. These values may be defined as empty, in which case the\n+ * CameraSensor derivative should provide default values.\n  */\n \n /**\n@@ -60,6 +67,7 @@ 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} },\n \t\t{ \"ar0521\", {\n \t\t\t.unitCellSize = { 2200, 2200 },\n@@ -69,6 +77,7 @@ 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} },\n \t\t{ \"hi846\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -87,6 +96,7 @@ 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} },\n \t\t{ \"imx214\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -97,6 +107,7 @@ 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} },\n \t\t{ \"imx219\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -107,6 +118,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 +134,62 @@ 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} },\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} },\n \t\t{ \"imx335\", {\n \t\t\t.unitCellSize = { 2000, 2000 },\n \t\t\t.testPatternModes = {},\n+\t\t\t.sensorDelays = { },\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} },\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 +202,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 +218,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 +238,7 @@ 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} },\n \t\t{ \"ov2740\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -188,6 +246,7 @@ 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} },\n \t\t{ \"ov4689\", {\n \t\t\t.unitCellSize = { 2000, 2000 },\n@@ -201,6 +260,7 @@ 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} },\n \t\t{ \"ov5640\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -208,10 +268,17 @@ 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} },\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 +286,7 @@ 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} },\n \t\t{ \"ov5675\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -226,6 +294,7 @@ 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} },\n \t\t{ \"ov5693\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -238,6 +307,7 @@ 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} },\n \t\t{ \"ov64a40\", {\n \t\t\t.unitCellSize = { 1008, 1008 },\n@@ -251,6 +321,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 +340,7 @@ 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} },\n \t\t{ \"ov8865\", {\n \t\t\t.unitCellSize = { 1400, 1400 },\n@@ -278,6 +355,7 @@ 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} },\n \t\t{ \"ov13858\", {\n \t\t\t.unitCellSize = { 1120, 1120 },\n@@ -285,6 +363,7 @@ 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} },\n \t};\n \n","prefixes":["v3","5/6"]}