{"id":25063,"url":"https://patchwork.libcamera.org/api/1.1/patches/25063/?format=json","web_url":"https://patchwork.libcamera.org/patch/25063/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/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":"<20251114-exposure-limits-v3-11-b7c07feba026@ideasonboard.com>","date":"2025-11-14T14:17:06","name":"[v3,11/19] ipa: libipa: agc: Pass the frame duration to configure()","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"21ac76648b6f5a4833a40baa60535ea6e4283bbf","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/1.1/people/143/?format=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/25063/mbox/","series":[{"id":5590,"url":"https://patchwork.libcamera.org/api/1.1/series/5590/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5590","date":"2025-11-14T14:16:55","name":"libipa: agc: Calculate exposure limits","version":3,"mbox":"https://patchwork.libcamera.org/series/5590/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/25063/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/25063/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 603B5C3332\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 14 Nov 2025 14:17:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0E7EA60B2C;\n\tFri, 14 Nov 2025 15:17:36 +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 0657560A8A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 14 Nov 2025 15:17:22 +0100 (CET)","from [192.168.1.101] (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 037481AED;\n\tFri, 14 Nov 2025 15:15:20 +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=\"oI+6knlW\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1763129721;\n\tbh=Un6DimgZnEXwkGeYxO0GXkQ1C5J3iMRmDxlXCIsp1N0=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=oI+6knlWsDduoZzse89BE4tBNYlp6MraZJMfl4QgD/rOFwmCq+CtNfwoXU4wNRMBP\n\tWXltMyLQbyOkRGKot7yssQra8g6qJ4BcpDltCFL8JZ5ZxCcbdN8iF3JAbiLw5KZ2Kc\n\tE3gKDvVOr5wXRJ8nhEPQcAUYeeUpeJ+O6Pfj2vxk=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Date":"Fri, 14 Nov 2025 15:17:06 +0100","Subject":"[PATCH v3 11/19] ipa: libipa: agc: Pass the frame duration to\n\tconfigure()","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","Message-Id":"<20251114-exposure-limits-v3-11-b7c07feba026@ideasonboard.com>","References":"<20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com>","In-Reply-To":"<20251114-exposure-limits-v3-0-b7c07feba026@ideasonboard.com>","To":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tRobert Mader <robert.mader@collabora.com>, \n\tlibcamera-devel@lists.libcamera.org","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","X-Mailer":"b4 0.14.2","X-Developer-Signature":"v=1; a=openpgp-sha256; l=12478;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=Un6DimgZnEXwkGeYxO0GXkQ1C5J3iMRmDxlXCIsp1N0=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpFznrDM0hmmIBWJFe9NzTMVwtdgmzgH09yZwgt\n\t6tVvNuBbq+JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaRc56wAKCRByNAaPFqFW\n\tPIG3EADFAXPcp0pcNFs9jJK0E+vLYv904IJ6AhGVtHkJZHQhm7GU7knuovGLakulk23NXtdQbrJ\n\tC+t72oQ+vosfS61EeaF54GytaXkL7UnvMrbDC/t635fjNuFSXO4V/wechWGFjsw5IrP1CAdmjjS\n\tNlRRXAk19KsrR1FbG+zCdIORpNgboflpg43m3Vh3MaXDr10EFDjpiEUrvLtBxngiLJldJ4vNjKh\n\tu7+9cV0hWS/wpdWHl1dWbVIQRKTPbLlgDJZxUPv6yKwhygeibu1a2UHSVxMYsEnUq1jv/qAGH27\n\trJnlq+1yoJ1zpWsbi3yG7AgT3td67kXp3kIsq8YTqJRvGVsErckZTFbr2raSp7pmU41+sSF9z2T\n\tm8HvgzgBV8SXdA75+roukDeOJPOCx7+rw9WgxohO9FdpSLHvh46vgZ1BzBYCN1HInKlkA/Gqx/U\n\ts2F2pKMvW3LdCxu+llxfJeX8+b97xX01yhPWl0KyGhF9dc6ygHORrSylaRU077I/X9Nvx2x1+7u\n\tYYuUtern67qWtS7+mQQ5D7PMsHRvANVOK9X4P5Mp4dqtpINs7Zj8KGWGoO5sOqA6bMlBJaAaeA1\n\toVkY+EgnV5B+6oTbvJV5qYNhe6maxx63zk92MOdwiUzjZweX0MpNpJiAG2b3O9fQVvw5S4JZQpl\n\tbcD9tGYz6/9qPKA==","X-Developer-Key":"i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=72392EDC88144A65C701EA9BA5826A2587AD026B","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":"Pass the min/max sensor frame duration to the AGC configure()\noperation.\n\nThis prepares for limiting the exposure time to the frame duration.\n\nIn order to be able to provide to the AGC the frame duration in the IPU3\nand Mali-C55 IPAs it is necessary to store the FrameDurationLimits in\nthe context sensor configuration, like it was already done for the\nRkISP1 IPA.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\n src/ipa/ipu3/algorithms/agc.cpp       |  2 ++\n src/ipa/ipu3/ipa_context.h            |  4 ++++\n src/ipa/ipu3/ipu3.cpp                 | 18 +++++++++++++++---\n src/ipa/libipa/agc_mean_luminance.cpp |  8 ++++++++\n src/ipa/libipa/agc_mean_luminance.h   |  2 ++\n src/ipa/mali-c55/algorithms/agc.cpp   |  6 ++++++\n src/ipa/mali-c55/ipa_context.h        |  4 ++++\n src/ipa/mali-c55/mali-c55.cpp         | 17 ++++++++++++-----\n src/ipa/rkisp1/algorithms/agc.cpp     |  2 ++\n 9 files changed, 55 insertions(+), 8 deletions(-)","diff":"diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\nindex 5c72806dede5f55459bde69ab8cfaebc495c7560..002ee574c02b79c25834a9d87a5881a9de52e39e 100644\n--- a/src/ipa/ipu3/algorithms/agc.cpp\n+++ b/src/ipa/ipu3/algorithms/agc.cpp\n@@ -118,6 +118,8 @@ int Agc::configure(IPAContext &context,\n \tAgcMeanLuminance::SensorConfiguration sensorConfig;\n \tsensorConfig.lineDuration = context.configuration.sensor.lineDuration;\n \tsensorConfig.minExposureTime = minExposureTime_;\n+\tsensorConfig.minFrameDuration = context.configuration.sensor.minFrameDuration;\n+\tsensorConfig.maxFrameDuration = context.configuration.sensor.maxFrameDuration;\n \tsensorConfig.maxExposureTime = maxExposureTime_;\n \tsensorConfig.minAnalogueGain = minAnalogueGain_;\n \tsensorConfig.maxAnalogueGain = maxAnalogueGain_;\ndiff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h\nindex baf84b8cbc9a1ff9411c0a994e35317b613580dd..33f3fe3ae1b503d47887873046def0835cd53894 100644\n--- a/src/ipa/ipu3/ipa_context.h\n+++ b/src/ipa/ipu3/ipa_context.h\n@@ -39,6 +39,8 @@ struct IPASessionConfiguration {\n \t\tSize size;\n \t\tutils::Duration minExposureTime;\n \t\tutils::Duration maxExposureTime;\n+\t\tutils::Duration minFrameDuration;\n+\t\tutils::Duration maxFrameDuration;\n \t\tdouble minAnalogueGain;\n \t\tdouble maxAnalogueGain;\n \t} sensor;\n@@ -56,6 +58,8 @@ struct IPAActiveState {\n \t\tdouble gain;\n \t\tuint32_t constraintMode;\n \t\tuint32_t exposureMode;\n+\t\tutils::Duration minFrameDuration;\n+\t\tutils::Duration maxFrameDuration;\n \t} agc;\n \n \tstruct {\ndiff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\nindex 60f22727a0f75e374b53fb6d3185946b70c25582..0c8651c5235f9e4e9944eb88595aeef41f016310 100644\n--- a/src/ipa/ipu3/ipu3.cpp\n+++ b/src/ipa/ipu3/ipu3.cpp\n@@ -167,7 +167,8 @@ private:\n \tvoid updateControls(const IPACameraSensorInfo &sensorInfo,\n \t\t\t    const ControlInfoMap &sensorControls,\n \t\t\t    ControlInfoMap *ipaControls);\n-\tvoid updateSessionConfiguration(const ControlInfoMap &sensorControls);\n+\tvoid updateSessionConfiguration(const IPACameraSensorInfo &sensorInfo,\n+\t\t\t\t\tconst ControlInfoMap &sensorControls);\n \n \tvoid setControls(unsigned int frame);\n \tvoid calculateBdsGrid(const Size &bdsOutputSize);\n@@ -197,7 +198,8 @@ std::string IPAIPU3::logPrefix() const\n  * \\brief Compute IPASessionConfiguration using the sensor information and the\n  * sensor V4L2 controls\n  */\n-void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)\n+void IPAIPU3::updateSessionConfiguration(const IPACameraSensorInfo &sensorInfo,\n+\t\t\t\t\t const ControlInfoMap &sensorControls)\n {\n \tconst ControlInfo vBlank = sensorControls.find(V4L2_CID_VBLANK)->second;\n \tcontext_.configuration.sensor.defVBlank = vBlank.def().get<int32_t>();\n@@ -210,6 +212,12 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)\n \tint32_t minGain = v4l2Gain.min().get<int32_t>();\n \tint32_t maxGain = v4l2Gain.max().get<int32_t>();\n \n+\tconst ControlInfo &v4l2VBlank = sensorControls.find(V4L2_CID_VBLANK)->second;\n+\tstd::array<uint32_t, 2> frameHeights{\n+\t\tv4l2VBlank.min().get<int32_t>() + sensorInfo.outputSize.height,\n+\t\tv4l2VBlank.max().get<int32_t>() + sensorInfo.outputSize.height,\n+\t};\n+\n \t/*\n \t * When the AGC computes the new exposure values for a frame, it needs\n \t * to know the limits for exposure time and analogue gain.\n@@ -219,6 +227,10 @@ void IPAIPU3::updateSessionConfiguration(const ControlInfoMap &sensorControls)\n \t */\n \tcontext_.configuration.sensor.minExposureTime = minExposure * context_.configuration.sensor.lineDuration;\n \tcontext_.configuration.sensor.maxExposureTime = maxExposure * context_.configuration.sensor.lineDuration;\n+\tcontext_.configuration.sensor.minFrameDuration = frameHeights[0] *\n+\t\t\t\t\t\t\t context_.configuration.sensor.lineDuration;\n+\tcontext_.configuration.sensor.maxFrameDuration = frameHeights[1] *\n+\t\t\t\t\t\t\t context_.configuration.sensor.lineDuration;\n \tcontext_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain);\n \tcontext_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain);\n }\n@@ -488,7 +500,7 @@ int IPAIPU3::configure(const IPAConfigInfo &configInfo,\n \tupdateControls(sensorInfo_, sensorCtrls_, ipaControls);\n \n \t/* Update the IPASessionConfiguration using the sensor settings. */\n-\tupdateSessionConfiguration(sensorCtrls_);\n+\tupdateSessionConfiguration(sensorInfo_, sensorCtrls_);\n \n \tfor (auto const &algo : algorithms()) {\n \t\tint ret = algo->configure(context_, configInfo);\ndiff --git a/src/ipa/libipa/agc_mean_luminance.cpp b/src/ipa/libipa/agc_mean_luminance.cpp\nindex 512e153791f5b98da01efad6675192a5358e7698..602050729fd08649e2db8d07623a8a39e7a53a77 100644\n--- a/src/ipa/libipa/agc_mean_luminance.cpp\n+++ b/src/ipa/libipa/agc_mean_luminance.cpp\n@@ -117,6 +117,12 @@ static constexpr double kMaxRelativeLuminanceTarget = 0.95;\n  * \\var AgcMeanLuminance::SensorConfiguration::maxExposureTime\n  * \\brief The sensor maximum exposure time in microseconds\n  *\n+ * \\var AgcMeanLuminance::SensorConfiguration::minFrameDuration\n+ * \\brief The sensor minimum frame duration in microseconds\n+ *\n+ * \\var AgcMeanLuminance::SensorConfiguration::maxFrameDuration\n+ * \\brief The sensor maximum frame duration in microseconds\n+ *\n  * \\var AgcMeanLuminance::SensorConfiguration::minAnalogueGain\n  * \\brief The sensor minimum analogue gain absolute value\n  *\n@@ -366,6 +372,8 @@ void AgcMeanLuminance::configure(const SensorConfiguration &config,\n \t\tsensorConfig.lineDuration_ = config.lineDuration;\n \t\tsensorConfig.minExposureTime_ = config.minExposureTime;\n \t\tsensorConfig.maxExposureTime_ = config.maxExposureTime;\n+\t\tsensorConfig.minFrameDuration_ = config.minFrameDuration;\n+\t\tsensorConfig.maxFrameDuration_ = config.maxFrameDuration;\n \t\tsensorConfig.minGain_ = config.minAnalogueGain;\n \t\tsensorConfig.maxGain_ = config.maxAnalogueGain;\n \ndiff --git a/src/ipa/libipa/agc_mean_luminance.h b/src/ipa/libipa/agc_mean_luminance.h\nindex 42ead74b0cdc197bc2b27aee16918e2b42ea3d08..c3c8ce1cdda9229eca400b730f2ee896e9a0af93 100644\n--- a/src/ipa/libipa/agc_mean_luminance.h\n+++ b/src/ipa/libipa/agc_mean_luminance.h\n@@ -46,6 +46,8 @@ public:\n \t\tutils::Duration lineDuration;\n \t\tutils::Duration minExposureTime;\n \t\tutils::Duration maxExposureTime;\n+\t\tutils::Duration minFrameDuration;\n+\t\tutils::Duration maxFrameDuration;\n \t\tdouble minAnalogueGain;\n \t\tdouble maxAnalogueGain;\n \t};\ndiff --git a/src/ipa/mali-c55/algorithms/agc.cpp b/src/ipa/mali-c55/algorithms/agc.cpp\nindex d6a1ff5aaca136c387feb8c948053fc83bb664ee..731b29ced1030ecb3f44b83ad28a0691dd5d2f0d 100644\n--- a/src/ipa/mali-c55/algorithms/agc.cpp\n+++ b/src/ipa/mali-c55/algorithms/agc.cpp\n@@ -168,11 +168,17 @@ int Agc::configure(IPAContext &context,\n \tcontext.activeState.agc.manual.ispGain = kMinDigitalGain;\n \tcontext.activeState.agc.constraintMode = constraintModes().begin()->first;\n \tcontext.activeState.agc.exposureMode = exposureModeHelpers().begin()->first;\n+\tcontext.activeState.agc.minFrameDuration =\n+\t\t\t\tcontext.configuration.sensor.minFrameDuration;\n+\tcontext.activeState.agc.maxFrameDuration =\n+\t\t\t\tcontext.configuration.sensor.maxFrameDuration;\n \n \tAgcMeanLuminance::SensorConfiguration sensorConfig;\n \tsensorConfig.lineDuration = context.configuration.sensor.lineDuration;\n \tsensorConfig.minExposureTime = context.configuration.sensor.minShutterSpeed;\n \tsensorConfig.maxExposureTime = context.configuration.sensor.maxShutterSpeed;\n+\tsensorConfig.minFrameDuration = context.configuration.sensor.minFrameDuration;\n+\tsensorConfig.maxFrameDuration = context.configuration.sensor.maxFrameDuration;\n \tsensorConfig.minAnalogueGain = context.configuration.sensor.minAnalogueGain;\n \tsensorConfig.maxAnalogueGain = context.configuration.sensor.maxAnalogueGain;\n \ndiff --git a/src/ipa/mali-c55/ipa_context.h b/src/ipa/mali-c55/ipa_context.h\nindex fe75590ec93302e61a31e4832f5c497aab80cf4d..3b64cb7571729d4af162def5b2316331b3561af1 100644\n--- a/src/ipa/mali-c55/ipa_context.h\n+++ b/src/ipa/mali-c55/ipa_context.h\n@@ -30,6 +30,8 @@ struct IPASessionConfiguration {\n \t\tuint32_t blackLevel;\n \t\tutils::Duration minShutterSpeed;\n \t\tutils::Duration maxShutterSpeed;\n+\t\tutils::Duration minFrameDuration;\n+\t\tutils::Duration maxFrameDuration;\n \t\tdouble minAnalogueGain;\n \t\tdouble maxAnalogueGain;\n \t} sensor;\n@@ -51,6 +53,8 @@ struct IPAActiveState {\n \t\tuint32_t constraintMode;\n \t\tuint32_t exposureMode;\n \t\tuint32_t temperatureK;\n+\t\tutils::Duration minFrameDuration;\n+\t\tutils::Duration maxFrameDuration;\n \t} agc;\n \n \tstruct {\ndiff --git a/src/ipa/mali-c55/mali-c55.cpp b/src/ipa/mali-c55/mali-c55.cpp\nindex 9375facf7ab559853986f66634d4e36b896361c8..491ae71a06dbede967bfbe1bcdcab25d177ad691 100644\n--- a/src/ipa/mali-c55/mali-c55.cpp\n+++ b/src/ipa/mali-c55/mali-c55.cpp\n@@ -177,16 +177,23 @@ void IPAMaliC55::updateSessionConfiguration(const IPACameraSensorInfo &info,\n \tint32_t minGain = v4l2Gain.min().get<int32_t>();\n \tint32_t maxGain = v4l2Gain.max().get<int32_t>();\n \n+\tconst ControlInfo &v4l2VBlank = sensorControls.find(V4L2_CID_VBLANK)->second;\n+\tstd::array<uint32_t, 2> frameHeights{\n+\t\tv4l2VBlank.min().get<int32_t>() + info.outputSize.height,\n+\t\tv4l2VBlank.max().get<int32_t>() + info.outputSize.height,\n+\t};\n+\n \t/*\n \t * When the AGC computes the new exposure values for a frame, it needs\n \t * to know the limits for shutter speed and analogue gain.\n \t * As it depends on the sensor, update it with the controls.\n-\t *\n-\t * \\todo take VBLANK into account for maximum shutter speed\n \t */\n-\tcontext_.configuration.sensor.lineDuration = info.minLineLength * 1.0s / info.pixelRate;\n-\tcontext_.configuration.sensor.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration;\n-\tcontext_.configuration.sensor.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration;\n+\tutils::Duration lineDuration = info.minLineLength * 1.0s / info.pixelRate;\n+\tcontext_.configuration.sensor.lineDuration = lineDuration;\n+\tcontext_.configuration.sensor.minShutterSpeed = minExposure * lineDuration;\n+\tcontext_.configuration.sensor.maxShutterSpeed = maxExposure * lineDuration;\n+\tcontext_.configuration.sensor.minFrameDuration = frameHeights[0] * lineDuration;\n+\tcontext_.configuration.sensor.maxFrameDuration = frameHeights[1] * lineDuration;\n \tcontext_.configuration.sensor.minAnalogueGain = context_.camHelper->gain(minGain);\n \tcontext_.configuration.sensor.maxAnalogueGain = context_.camHelper->gain(maxGain);\n \ndiff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp\nindex b0c8966eea63901640bbe16af2a5d8a303c63ece..de2980485f2d3a8973f065981f8cdd520e3dfc47 100644\n--- a/src/ipa/rkisp1/algorithms/agc.cpp\n+++ b/src/ipa/rkisp1/algorithms/agc.cpp\n@@ -204,6 +204,8 @@ int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)\n \tsensorConfig.lineDuration = context.configuration.sensor.lineDuration;\n \tsensorConfig.minExposureTime = context.configuration.sensor.minExposureTime;\n \tsensorConfig.maxExposureTime = context.configuration.sensor.maxExposureTime;\n+\tsensorConfig.minFrameDuration = context.configuration.sensor.minFrameDuration;\n+\tsensorConfig.maxFrameDuration = context.configuration.sensor.maxFrameDuration;\n \tsensorConfig.minAnalogueGain = context.configuration.sensor.minAnalogueGain;\n \tsensorConfig.maxAnalogueGain = context.configuration.sensor.maxAnalogueGain;\n \n","prefixes":["v3","11/19"]}