[{"id":23697,"web_url":"https://patchwork.libcamera.org/comment/23697/","msgid":"<165662865229.1516045.2845084106728968151@Monstersaurus>","date":"2022-06-30T22:37:32","subject":"Re: [libcamera-devel] [PATCH v3 09/23] libcamera:\n\tcamera_sensor_properties: Add sensor delays","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi via libcamera-devel (2022-06-30 14:38:48)\n> Add to the camera sensor properties a map of control identifiers to\n> their latencies.\n> \n> Some camera sensor controls take a variable number of frames to take\n> effect, hence they should be set in advance. The newly introduced map\n> records that information as a property of the camera sensor class.\n> \n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> ---\n>  .../internal/camera_sensor_properties.h       |  4 ++\n>  .../camera_sensor_properties.cpp              | 40 +++++++++++++++++++\n>  2 files changed, 44 insertions(+)\n> \n> diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\n> index 1ee3cb994106..2404b0674323 100644\n> --- a/include/libcamera/internal/camera_sensor_properties.h\n> +++ b/include/libcamera/internal/camera_sensor_properties.h\n> @@ -9,6 +9,7 @@\n>  \n>  #include <map>\n>  #include <string>\n> +#include <unordered_map>\n>  \n>  #include <libcamera/control_ids.h>\n>  #include <libcamera/geometry.h>\n> @@ -16,10 +17,13 @@\n>  namespace libcamera {\n>  \n>  struct CameraSensorProperties {\n> +       using SensorDelays = std::unordered_map<const ControlId *, unsigned int>;\n> +\n>         static const CameraSensorProperties *get(const std::string &sensor);\n>  \n>         Size unitCellSize;\n>         std::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;\n> +       SensorDelays sensorDelays;\n>  };\n>  \n>  } /* namespace libcamera */\n> diff --git a/src/libcamera/camera_sensor/camera_sensor_properties.cpp b/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> index e5f27f06eb1d..4b5ab716abe2 100644\n> --- a/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> +++ b/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> @@ -13,6 +13,8 @@\n>  \n>  #include <libcamera/control_ids.h>\n>  \n> +#include <libcamera/internal/control_ids.h>\n> +\n>  /**\n>   * \\file camera_sensor_properties.h\n>   * \\brief Database of camera sensor properties\n> @@ -41,6 +43,18 @@ 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 Map that associates control identifiers with their latencies,\n> + * expressed in frame periods.\n> + */\n> +\n> +/**\n> + * \\typedef CameraSensorProperties::SensorDelays\n> + * \\brief Camera sensor controls delays\n> + *\n> + * Type to represent a map of camera sensor controls associated with their\n> + * latencies, expressed in frame periods.\n>   */\n>  \n\nI wonder if defining a 'common' struct of sensor delays here could ease\nreferencing it in the default case.\n\nstatic const SensorDelays commonDelays = {\n    { &controls::internal::FrameDuration, 2 },\n    { &controls::internal::ExposureTime, 2 },\n    { &controls::internal::AnalogueGain, 1 },\n};\n\nOr ideally, if we knew 'all ccs' cameras or such used these delays we\ncould have a better name ?\n\ndefaultDelays ?\n\nI know I commented on this before saying if we don't have the numbers we\nshould leave the the delays as zero, but I think there I meant on an\nindividual entry.\n\nBut perhaps now I see this I'm changing my mind too - and leaning\ntowards a default set can easily be defined and referenced, and\noverridden in the case of a difference?\n\n\n>  /**\n> @@ -69,6 +83,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                  * 9: \"Resolution Pattern\"\n>                                  */\n>                         },\n> +                       .sensorDelays = { },\n\nthen\n\t\t\t.sensorDelays = &commonDelays;\n?\n\nThough this is the hi846, so we should identify what the delays really\nare there.\n\n>                 } },\n>                 { \"imx219\", {\n>                         .unitCellSize = { 1120, 1120 },\n> @@ -79,6 +94,11 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n>                                 { controls::draft::TestPatternModePn9, 4 },\n>                         },\n> +                       .sensorDelays = {\n> +                               { &controls::internal::FrameDuration, 2 },\n> +                               { &controls::internal::ExposureTime, 2 },\n> +                               { &controls::internal::AnalogueGain, 1 },\n> +                       },\n\nBut this one could be: \n\t\t\t.sensorDelays = &commonDelays;\n\n>                 } },\n>                 { \"imx258\", {\n>                         .unitCellSize = { 1120, 1120 },\n> @@ -89,18 +109,26 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n>                                 { controls::draft::TestPatternModePn9, 4 },\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"imx290\", {\n>                         .unitCellSize = { 2900, 2900 },\n>                         .testPatternModes = {},\n> +                       .sensorDelays = {\n> +                               { &controls::internal::FrameDuration, 2 },\n> +                               { &controls::internal::ExposureTime, 2 },\n> +                               { &controls::internal::AnalogueGain, 2 },\n> +                       },\n>                 } },\n>                 { \"imx296\", {\n>                         .unitCellSize = { 3450, 3450 },\n>                         .testPatternModes = {},\n> +                       .sensorDelays = { },\n\nThe IMX296 is listed in RPi's cam_helper_imx296 without an override.\nThat means in their implementation that this is expected to use\n\n\t.sensorDelays = &commonDelays;\n\n>                 } },\n>                 { \"imx477\", {\n>                         .unitCellSize = { 1550, 1550 },\n>                         .testPatternModes = {},\n> +                       .sensorDelays = { },\n\ncam_helper_imx477 has the following overrides:\n\n\texposure_delay = 2;\n\tgain_delay = 2;\n\tvblank_delay = 3;\n\n>                 } },\n>                 { \"ov2740\", {\n>                         .unitCellSize = { 1400, 1400 },\n> @@ -108,6 +136,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeOff, 0 },\n>                                 { controls::draft::TestPatternModeColorBars, 1},\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov5640\", {\n>                         .unitCellSize = { 1400, 1400 },\n> @@ -115,10 +144,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeOff, 0 },\n>                                 { controls::draft::TestPatternModeColorBars, 1 },\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov5647\", {\n>                         .unitCellSize = { 1400, 1400 },\n>                         .testPatternModes = {},\n> +                       .sensorDelays = {\n> +                               { &controls::internal::FrameDuration, 2 },\n> +                               { &controls::internal::ExposureTime, 2 },\n> +                               { &controls::internal::AnalogueGain, 2 },\n> +                       },\n>                 } },\n>                 { \"ov5670\", {\n>                         .unitCellSize = { 1120, 1120 },\n> @@ -126,6 +161,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeOff, 0 },\n>                                 { controls::draft::TestPatternModeColorBars, 1 },\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov5675\", {\n>                         .unitCellSize = { 1120, 1120 },\n> @@ -133,6 +169,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeOff, 0 },\n>                                 { controls::draft::TestPatternModeColorBars, 1 },\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov5693\", {\n>                         .unitCellSize = { 1400, 1400 },\n> @@ -145,6 +182,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                  * Rolling Bar\".\n>                                  */\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov8865\", {\n>                         .unitCellSize = { 1400, 1400 },\n> @@ -159,6 +197,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                  * 5: \"Color squares with rolling bar\"\n>                                  */\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>                 { \"ov13858\", {\n>                         .unitCellSize = { 1120, 1120 },\n> @@ -166,6 +205,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n>                                 { controls::draft::TestPatternModeOff, 0 },\n>                                 { controls::draft::TestPatternModeColorBars, 1 },\n>                         },\n> +                       .sensorDelays = { },\n>                 } },\n>         };\n>  \n> -- \n> 2.36.1\n>","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 48723BD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 30 Jun 2022 22:37:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8D33A6564E;\n\tFri,  1 Jul 2022 00:37:36 +0200 (CEST)","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 90F1360412\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Jul 2022 00:37:35 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 136F125C;\n\tFri,  1 Jul 2022 00:37:35 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656628656;\n\tbh=oZr1GatVlKUIqHh4jnmXK62k1pEOmixFjYymk5jglkI=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=TdvWJ0g5pxyO3gBNwq92gLvpfj9vzSpH/1JQxsw64LGJ+le/QkQ1D0kokVFhaRkJD\n\tHFFGy2hfn3dNrZITjcHFuweIOp87Z9/bx8njQNlyYQxfUPz3b0Iffkqk2esDXGF+GA\n\tAp1bQTmOzMbQcB6EC1QE3Z3zu4Cd9QTQ8mIIAAAM/e1ZUZARxGXbpHoDY72/KDXVXb\n\tFtTXPeJkWMwMhZlRkjzmqE25+NP8UiE8QuXbXgvnHicodVCOWD0rw0Ykrd2+cp+59w\n\tZBI0SL86sUE7wb3wjNjOiNjzOvFTjc/wa70+erCktc02p7/BSr89J74dmOdkazVJaO\n\twcauUyz22vFqA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1656628655;\n\tbh=oZr1GatVlKUIqHh4jnmXK62k1pEOmixFjYymk5jglkI=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=gl3U3iyuPqOHNdZeX5OqZsIDqoZIBvER5lT0+talauRct1cWmg/m+tRC228mp8Mu3\n\t9nDNzW93hbLv3Mtrw8Rz0EnlWEFKByKoS3gHnCNmqG2GppOQjqma2WdEycQ4RcdVkF\n\tTQTE+2JyCtfq22N9thwFenDqgFdKqr1gAT0Q2Spw="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"gl3U3iyu\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220630133902.321099-10-jacopo@jmondi.org>","References":"<20220630133902.321099-1-jacopo@jmondi.org>\n\t<20220630133902.321099-10-jacopo@jmondi.org>","To":"Jacopo Mondi <jacopo@jmondi.org>, libcamera-devel@lists.libcamera.org","Date":"Thu, 30 Jun 2022 23:37:32 +0100","Message-ID":"<165662865229.1516045.2845084106728968151@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v3 09/23] libcamera:\n\tcamera_sensor_properties: Add sensor delays","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":23708,"web_url":"https://patchwork.libcamera.org/comment/23708/","msgid":"<20220701085917.n7zqxpups5tys4ef@uno.localdomain>","date":"2022-07-01T08:59:17","subject":"Re: [libcamera-devel] [PATCH v3 09/23] libcamera:\n\tcamera_sensor_properties: Add sensor delays","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Thu, Jun 30, 2022 at 11:37:32PM +0100, Kieran Bingham wrote:\n> Quoting Jacopo Mondi via libcamera-devel (2022-06-30 14:38:48)\n> > Add to the camera sensor properties a map of control identifiers to\n> > their latencies.\n> >\n> > Some camera sensor controls take a variable number of frames to take\n> > effect, hence they should be set in advance. The newly introduced map\n> > records that information as a property of the camera sensor class.\n> >\n> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> > ---\n> >  .../internal/camera_sensor_properties.h       |  4 ++\n> >  .../camera_sensor_properties.cpp              | 40 +++++++++++++++++++\n> >  2 files changed, 44 insertions(+)\n> >\n> > diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h\n> > index 1ee3cb994106..2404b0674323 100644\n> > --- a/include/libcamera/internal/camera_sensor_properties.h\n> > +++ b/include/libcamera/internal/camera_sensor_properties.h\n> > @@ -9,6 +9,7 @@\n> >\n> >  #include <map>\n> >  #include <string>\n> > +#include <unordered_map>\n> >\n> >  #include <libcamera/control_ids.h>\n> >  #include <libcamera/geometry.h>\n> > @@ -16,10 +17,13 @@\n> >  namespace libcamera {\n> >\n> >  struct CameraSensorProperties {\n> > +       using SensorDelays = std::unordered_map<const ControlId *, unsigned int>;\n> > +\n> >         static const CameraSensorProperties *get(const std::string &sensor);\n> >\n> >         Size unitCellSize;\n> >         std::map<controls::draft::TestPatternModeEnum, int32_t> testPatternModes;\n> > +       SensorDelays sensorDelays;\n> >  };\n> >\n> >  } /* namespace libcamera */\n> > diff --git a/src/libcamera/camera_sensor/camera_sensor_properties.cpp b/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> > index e5f27f06eb1d..4b5ab716abe2 100644\n> > --- a/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> > +++ b/src/libcamera/camera_sensor/camera_sensor_properties.cpp\n> > @@ -13,6 +13,8 @@\n> >\n> >  #include <libcamera/control_ids.h>\n> >\n> > +#include <libcamera/internal/control_ids.h>\n> > +\n> >  /**\n> >   * \\file camera_sensor_properties.h\n> >   * \\brief Database of camera sensor properties\n> > @@ -41,6 +43,18 @@ 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 Map that associates control identifiers with their latencies,\n> > + * expressed in frame periods.\n> > + */\n> > +\n> > +/**\n> > + * \\typedef CameraSensorProperties::SensorDelays\n> > + * \\brief Camera sensor controls delays\n> > + *\n> > + * Type to represent a map of camera sensor controls associated with their\n> > + * latencies, expressed in frame periods.\n> >   */\n> >\n>\n> I wonder if defining a 'common' struct of sensor delays here could ease\n> referencing it in the default case.\n>\n> static const SensorDelays commonDelays = {\n>     { &controls::internal::FrameDuration, 2 },\n>     { &controls::internal::ExposureTime, 2 },\n>     { &controls::internal::AnalogueGain, 1 },\n> };\n>\n\nIf we want something like this, I think it should not be here but\nrather in CameraSensor.\n\nHave a look at\n[PATCH v3 10/23] libcamera: camera_sensor: Initialize delayed controls\n\n+int CameraSensor::initDelayedControls()\n+{\n+       /* If no static priorities are available, all controls have delay 0. */\n+       static const CameraSensorProperties::SensorDelays noDelays{};\n+       const CameraSensorProperties::SensorDelays *delays = staticProps_\n+                                                          ? &staticProps_->sensorDelays\n+                                                          : &noDelays;\n\nThe noDelays{} there can be made a defaultDelays map.\n\nI actually had it but I had no idea how \"default\" those defaults\nactually are..\n\n> Or ideally, if we knew 'all ccs' cameras or such used these delays we\n> could have a better name ?\n>\n> defaultDelays ?\n>\n> I know I commented on this before saying if we don't have the numbers we\n> should leave the the delays as zero, but I think there I meant on an\n> individual entry.\n>\n> But perhaps now I see this I'm changing my mind too - and leaning\n> towards a default set can easily be defined and referenced, and\n> overridden in the case of a difference?\n>\n>\n> >  /**\n> > @@ -69,6 +83,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                  * 9: \"Resolution Pattern\"\n> >                                  */\n> >                         },\n> > +                       .sensorDelays = { },\n>\n> then\n> \t\t\t.sensorDelays = &commonDelays;\n> ?\n>\n> Though this is the hi846, so we should identify what the delays really\n> are there.\n>\n> >                 } },\n> >                 { \"imx219\", {\n> >                         .unitCellSize = { 1120, 1120 },\n> > @@ -79,6 +94,11 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> >                                 { controls::draft::TestPatternModePn9, 4 },\n> >                         },\n> > +                       .sensorDelays = {\n> > +                               { &controls::internal::FrameDuration, 2 },\n> > +                               { &controls::internal::ExposureTime, 2 },\n> > +                               { &controls::internal::AnalogueGain, 1 },\n> > +                       },\n>\n> But this one could be:\n> \t\t\t.sensorDelays = &commonDelays;\n>\n> >                 } },\n> >                 { \"imx258\", {\n> >                         .unitCellSize = { 1120, 1120 },\n> > @@ -89,18 +109,26 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },\n> >                                 { controls::draft::TestPatternModePn9, 4 },\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"imx290\", {\n> >                         .unitCellSize = { 2900, 2900 },\n> >                         .testPatternModes = {},\n> > +                       .sensorDelays = {\n> > +                               { &controls::internal::FrameDuration, 2 },\n> > +                               { &controls::internal::ExposureTime, 2 },\n> > +                               { &controls::internal::AnalogueGain, 2 },\n> > +                       },\n> >                 } },\n> >                 { \"imx296\", {\n> >                         .unitCellSize = { 3450, 3450 },\n> >                         .testPatternModes = {},\n> > +                       .sensorDelays = { },\n>\n> The IMX296 is listed in RPi's cam_helper_imx296 without an override.\n> That means in their implementation that this is expected to use\n>\n> \t.sensorDelays = &commonDelays;\n\nAh ok, missed that !\n\n>\n> >                 } },\n> >                 { \"imx477\", {\n> >                         .unitCellSize = { 1550, 1550 },\n> >                         .testPatternModes = {},\n> > +                       .sensorDelays = { },\n>\n> cam_helper_imx477 has the following overrides:\n>\n> \texposure_delay = 2;\n> \tgain_delay = 2;\n> \tvblank_delay = 3;\n>\n\nAh thanks, I'll fix\n\n> >                 } },\n> >                 { \"ov2740\", {\n> >                         .unitCellSize = { 1400, 1400 },\n> > @@ -108,6 +136,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeOff, 0 },\n> >                                 { controls::draft::TestPatternModeColorBars, 1},\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov5640\", {\n> >                         .unitCellSize = { 1400, 1400 },\n> > @@ -115,10 +144,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeOff, 0 },\n> >                                 { controls::draft::TestPatternModeColorBars, 1 },\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov5647\", {\n> >                         .unitCellSize = { 1400, 1400 },\n> >                         .testPatternModes = {},\n> > +                       .sensorDelays = {\n> > +                               { &controls::internal::FrameDuration, 2 },\n> > +                               { &controls::internal::ExposureTime, 2 },\n> > +                               { &controls::internal::AnalogueGain, 2 },\n> > +                       },\n> >                 } },\n> >                 { \"ov5670\", {\n> >                         .unitCellSize = { 1120, 1120 },\n> > @@ -126,6 +161,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeOff, 0 },\n> >                                 { controls::draft::TestPatternModeColorBars, 1 },\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov5675\", {\n> >                         .unitCellSize = { 1120, 1120 },\n> > @@ -133,6 +169,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeOff, 0 },\n> >                                 { controls::draft::TestPatternModeColorBars, 1 },\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov5693\", {\n> >                         .unitCellSize = { 1400, 1400 },\n> > @@ -145,6 +182,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                  * Rolling Bar\".\n> >                                  */\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov8865\", {\n> >                         .unitCellSize = { 1400, 1400 },\n> > @@ -159,6 +197,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                  * 5: \"Color squares with rolling bar\"\n> >                                  */\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >                 { \"ov13858\", {\n> >                         .unitCellSize = { 1120, 1120 },\n> > @@ -166,6 +205,7 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen\n> >                                 { controls::draft::TestPatternModeOff, 0 },\n> >                                 { controls::draft::TestPatternModeColorBars, 1 },\n> >                         },\n> > +                       .sensorDelays = { },\n> >                 } },\n> >         };\n> >\n> > --\n> > 2.36.1\n> >","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 948AEBD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  1 Jul 2022 08:59:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 04B2A6564E;\n\tFri,  1 Jul 2022 10:59:20 +0200 (CEST)","from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9AB486054A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  1 Jul 2022 10:59:19 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 03549FF802;\n\tFri,  1 Jul 2022 08:59:18 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1656665960;\n\tbh=qfJkqcOYA/3+HLaaGbKdbEmq+GHcIxYVLbd52Q6FC3E=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=4LcD/bI+ZglUWwuG9V8D0Z1M5p0A+4lTkzJLtp8Uum+7S6O1TAjUj8tMRzrUpQ8HT\n\tPe2mOIn80bmYVUPSaUeBuGjBRFaEnUCOrfHXHXpvwCNjnLfSX4BYbe12A/8TrYcBTD\n\tc+/c5n1fpLTE00E79wAeExPTu9TN2+M5wvJOb38etJIHTXf2beZZETy48XDQSadN4v\n\trNqw9PLAqvOOfR1BkUCwfDdZWQ/fo9gJLwbprYep+a0PBYnxTJiXBgMW49zSCtZmvN\n\tGq8D5jbDx3Vs+F0Xu+q2UDQY4qqYfIUtkp9DpyWKVN2zs34U9iUWIDzJ8B4Prn0FRW\n\txwvax2ihZ+MuA==","Date":"Fri, 1 Jul 2022 10:59:17 +0200","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20220701085917.n7zqxpups5tys4ef@uno.localdomain>","References":"<20220630133902.321099-1-jacopo@jmondi.org>\n\t<20220630133902.321099-10-jacopo@jmondi.org>\n\t<165662865229.1516045.2845084106728968151@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<165662865229.1516045.2845084106728968151@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH v3 09/23] libcamera:\n\tcamera_sensor_properties: Add sensor delays","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":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]