[{"id":26767,"web_url":"https://patchwork.libcamera.org/comment/26767/","msgid":"<CAHW6GY+E5b=b9E8+3j_ka5_Jb0R4wz=c47WEf=VvhpRE4xvNrg@mail.gmail.com>","date":"2023-03-27T13:23:58","subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: raspberrypi: Use the new\n\tsensor limits fields in CameraMode","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Naush\n\nThanks for the patch.\n\nOn Mon, 27 Mar 2023 at 10:34, Naushir Patuck via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> Use the new analogue gain and shutter speed limit fields in the ipa\n> code when reporting back the control value limits and calculating the\n> analogue gain code to use. This also replaces the now unused (and\n> removed) maxSensorGainCode_ field.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nLGTM.\n\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n\nThanks!\nDavid\n\n> ---\n>  src/ipa/raspberrypi/raspberrypi.cpp | 37 +++++++++--------------------\n>  1 file changed, 11 insertions(+), 26 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 3f1afb846420..c10e57e07ab0 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -224,9 +224,6 @@ private:\n>         Duration minFrameDuration_;\n>         Duration maxFrameDuration_;\n>\n> -       /* Maximum gain code for the sensor. */\n> -       uint32_t maxSensorGainCode_;\n> -\n>         /* Track the frame length times over FrameLengthsQueueSize frames. */\n>         std::deque<Duration> frameLengths_;\n>         Duration lastTimeout_;\n> @@ -455,8 +452,6 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo, const IPAConfig &ip\n>                 }\n>         }\n>\n> -       maxSensorGainCode_ = sensorCtrls_.at(V4L2_CID_ANALOGUE_GAIN).max().get<int32_t>();\n> -\n>         /* Setup a metadata ControlList to output metadata. */\n>         libcameraMetadata_ = ControlList(controls::controls);\n>\n> @@ -517,26 +512,17 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo, const IPAConfig &ip\n>          * based on the current sensor mode.\n>          */\n>         ControlInfoMap::Map ctrlMap = ipaControls;\n> -       const Duration minSensorFrameDuration = mode_.minFrameLength * mode_.minLineLength;\n> -       const Duration maxSensorFrameDuration = mode_.maxFrameLength * mode_.maxLineLength;\n>         ctrlMap[&controls::FrameDurationLimits] =\n> -               ControlInfo(static_cast<int64_t>(minSensorFrameDuration.get<std::micro>()),\n> -                           static_cast<int64_t>(maxSensorFrameDuration.get<std::micro>()));\n> +               ControlInfo(static_cast<int64_t>(mode_.minFrameDuration.get<std::micro>()),\n> +                           static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()));\n>\n>         ctrlMap[&controls::AnalogueGain] =\n> -               ControlInfo(1.0f, static_cast<float>(helper_->gain(maxSensorGainCode_)));\n> -\n> -       /*\n> -        * Calculate the max exposure limit from the frame duration limit as V4L2\n> -        * will limit the maximum control value based on the current VBLANK value.\n> -        */\n> -       Duration maxShutter = Duration::max();\n> -       helper_->getBlanking(maxShutter, minSensorFrameDuration, maxSensorFrameDuration);\n> -       const uint32_t exposureMin = sensorCtrls_.at(V4L2_CID_EXPOSURE).min().get<int32_t>();\n> +               ControlInfo(static_cast<float>(mode_.minAnalogueGain),\n> +                           static_cast<float>(mode_.maxAnalogueGain));\n>\n>         ctrlMap[&controls::ExposureTime] =\n> -               ControlInfo(static_cast<int32_t>(helper_->exposure(exposureMin, mode_.minLineLength).get<std::micro>()),\n> -                           static_cast<int32_t>(maxShutter.get<std::micro>()));\n> +               ControlInfo(static_cast<int32_t>(mode_.minShutter.get<std::micro>()),\n> +                           static_cast<int32_t>(mode_.maxShutter.get<std::micro>()));\n>\n>         /* Declare Autofocus controls, only if we have a controllable lens */\n>         if (lensPresent_)\n> @@ -1496,9 +1482,6 @@ void IPARPi::applyAWB(const struct AwbStatus *awbStatus, ControlList &ctrls)\n>\n>  void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDuration)\n>  {\n> -       const Duration minSensorFrameDuration = mode_.minFrameLength * mode_.minLineLength;\n> -       const Duration maxSensorFrameDuration = mode_.maxFrameLength * mode_.maxLineLength;\n> -\n>         /*\n>          * This will only be applied once AGC recalculations occur.\n>          * The values may be clamped based on the sensor mode capabilities as well.\n> @@ -1506,9 +1489,9 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>         minFrameDuration_ = minFrameDuration ? minFrameDuration : defaultMaxFrameDuration;\n>         maxFrameDuration_ = maxFrameDuration ? maxFrameDuration : defaultMinFrameDuration;\n>         minFrameDuration_ = std::clamp(minFrameDuration_,\n> -                                      minSensorFrameDuration, maxSensorFrameDuration);\n> +                                      mode_.minFrameDuration, mode_.maxFrameDuration);\n>         maxFrameDuration_ = std::clamp(maxFrameDuration_,\n> -                                      minSensorFrameDuration, maxSensorFrameDuration);\n> +                                      mode_.minFrameDuration, mode_.maxFrameDuration);\n>         maxFrameDuration_ = std::max(maxFrameDuration_, minFrameDuration_);\n>\n>         /* Return the validated limits via metadata. */\n> @@ -1531,6 +1514,8 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>\n>  void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)\n>  {\n> +       const int32_t minGainCode = helper_->gainCode(mode_.minAnalogueGain);\n> +       const int32_t maxGainCode = helper_->gainCode(mode_.maxAnalogueGain);\n>         int32_t gainCode = helper_->gainCode(agcStatus->analogueGain);\n>\n>         /*\n> @@ -1538,7 +1523,7 @@ void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)\n>          * DelayedControls. The AGC will correctly handle a lower gain returned\n>          * by the sensor, provided it knows the actual gain used.\n>          */\n> -       gainCode = std::min<int32_t>(gainCode, maxSensorGainCode_);\n> +       gainCode = std::clamp<int32_t>(gainCode, minGainCode, maxGainCode);\n>\n>         /* getBlanking might clip exposure time to the fps limits. */\n>         Duration exposure = agcStatus->shutterTime;\n> --\n> 2.34.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 2491EC0F2A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 27 Mar 2023 13:24:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 74090626D7;\n\tMon, 27 Mar 2023 15:24:12 +0200 (CEST)","from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com\n\t[IPv6:2607:f8b0:4864:20::32d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 01412626D7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Mar 2023 15:24:10 +0200 (CEST)","by mail-ot1-x32d.google.com with SMTP id\n\to25-20020a9d4119000000b006a11eb19f8eso3329910ote.5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Mar 2023 06:24:10 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1679923452;\n\tbh=YVyu4925tG+Kv13RY+wBN/ll3zCmEM/vXzNFNhb1bgU=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=wHlJ/3SM4JOvyX5ZCUU3AbIgpUsC/4UcVCYQmCr97if+d54zlmkbLAP8rfa9T+IFn\n\tsU6ifFw60O9kHja75FcN396dd1A4YLQw7V6GcryCa7OicpNFA7I2cEnVhMcq2qwDSP\n\tBr5G6/RvvkI1O/N8rMk75dOpSX3uOetUE7DqJ+BmlRpxH0vYhcfUYsIT0Alnq7qCPB\n\td1mX9Nf02GvAhowTplWONblfmCGrjM9wHv9Q228hhIOMU5BuaelWJqJn4MdVUlJAVO\n\t4UYEmA048MV3ffMUz+5uYOF9VpNLpJhYNsEktVzken3JYCi/zdnb5DdNPUviC2MrJd\n\tUTauoLb8atx9g==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1679923449;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=VxjhkGIDwbDDTpv1k2aLcXxAHWFjqBwXTXi0CjlH4TY=;\n\tb=is029q9dGdzy9bb2/+w8REUneEc7xf/JgEjhC9VravdE2MM46Vr7eco5RY32KvquPS\n\t8z1O4Jey6kp7ubm0CnhkImZ3Pg2wrF+0d4KuV1V687w3NKd3yIX24oroYKjvp95/FV1A\n\tBTEy/x0CFD5rZ6pEuHGPmsGntBULdzrebPZYmS+sKWhAR5VYKj1PevfCKv4LX32Qme5h\n\tJwHuzl96j9DuFsCnLbn1pF0t+3/nO7PM4FYqBPKkxhXZCSOcWn5OwprSp3nIor9vQgR2\n\tfpLsbvYJvlIBH8bBa+ngLDeECTubTxbWuwbA4V6McxHKYkNXgBcSvv6kRPm5z61/yS7V\n\t1ipQ=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"is029q9d\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112; t=1679923449;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=VxjhkGIDwbDDTpv1k2aLcXxAHWFjqBwXTXi0CjlH4TY=;\n\tb=hmEUELktDMZSgpLZSzO0LLlW5x0wkqklJAC58Xx4b3rvGnIZFDq6+R02c24iGUokbv\n\t6NgRheSwcPheCpn6bc3UfFSLp48Yi6FVr+VpfB6hdb63I3Cf8lLHc+HmQYttxz9qfDpZ\n\t46ip5kMwpCg4JE+6PX+Bfo3l4PHnS/+e31k4dhVGNeIcSPczV1pJvSlHbInhadcIgqTx\n\tm2UbEZ2P51nZu2vWAlGxXNX4cMJu5n8+jE722ASVmMivEfidIRJV86ePDIpAbtJCZM/L\n\t/9F73L85GapVR4d9pek29vzYVpxK2RHbR83OOxOaCs53QwJSq7nb/ioxR2K2O3x88dxX\n\tWW+Q==","X-Gm-Message-State":"AO0yUKXsFlF9YWMQVJBaFMGdwgO+Bz3CLcrmsxRacahuZVVDIaTi683N\n\teoiWBqSwZrBeNqKFMOCDuK0QeONQC116dPa5iewyryJt21dDLBhzI0w=","X-Google-Smtp-Source":"AK7set/eSbgj1RyhB1qoIX9tUqD3uI8Gsk4T4GkYWlzp76WQrXZvwvI322g83M10YCU+wRR3h9XVV5iURhUADOsYJBk=","X-Received":"by 2002:a9d:6c10:0:b0:688:cf52:6e18 with SMTP id\n\tf16-20020a9d6c10000000b00688cf526e18mr3825391otq.4.1679923449650;\n\tMon, 27 Mar 2023 06:24:09 -0700 (PDT)","MIME-Version":"1.0","References":"<20230327093439.24670-1-naush@raspberrypi.com>\n\t<20230327093439.24670-3-naush@raspberrypi.com>","In-Reply-To":"<20230327093439.24670-3-naush@raspberrypi.com>","Date":"Mon, 27 Mar 2023 14:23:58 +0100","Message-ID":"<CAHW6GY+E5b=b9E8+3j_ka5_Jb0R4wz=c47WEf=VvhpRE4xvNrg@mail.gmail.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: raspberrypi: Use the new\n\tsensor limits fields in CameraMode","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":"David Plowman via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26775,"web_url":"https://patchwork.libcamera.org/comment/26775/","msgid":"<20230327135221.pcdrcwkfpft4v5aw@uno.localdomain>","date":"2023-03-27T13:52:21","subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: raspberrypi: Use the new\n\tsensor limits fields in CameraMode","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Naush\n\nOn Mon, Mar 27, 2023 at 10:34:37AM +0100, Naushir Patuck via libcamera-devel wrote:\n> Use the new analogue gain and shutter speed limit fields in the ipa\n> code when reporting back the control value limits and calculating the\n> analogue gain code to use. This also replaces the now unused (and\n> removed) maxSensorGainCode_ field.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n>  src/ipa/raspberrypi/raspberrypi.cpp | 37 +++++++++--------------------\n>  1 file changed, 11 insertions(+), 26 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 3f1afb846420..c10e57e07ab0 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -224,9 +224,6 @@ private:\n>  \tDuration minFrameDuration_;\n>  \tDuration maxFrameDuration_;\n>\n> -\t/* Maximum gain code for the sensor. */\n> -\tuint32_t maxSensorGainCode_;\n> -\n>  \t/* Track the frame length times over FrameLengthsQueueSize frames. */\n>  \tstd::deque<Duration> frameLengths_;\n>  \tDuration lastTimeout_;\n> @@ -455,8 +452,6 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo, const IPAConfig &ip\n>  \t\t}\n>  \t}\n>\n> -\tmaxSensorGainCode_ = sensorCtrls_.at(V4L2_CID_ANALOGUE_GAIN).max().get<int32_t>();\n> -\n>  \t/* Setup a metadata ControlList to output metadata. */\n>  \tlibcameraMetadata_ = ControlList(controls::controls);\n>\n> @@ -517,26 +512,17 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo, const IPAConfig &ip\n>  \t * based on the current sensor mode.\n>  \t */\n>  \tControlInfoMap::Map ctrlMap = ipaControls;\n> -\tconst Duration minSensorFrameDuration = mode_.minFrameLength * mode_.minLineLength;\n> -\tconst Duration maxSensorFrameDuration = mode_.maxFrameLength * mode_.maxLineLength;\n>  \tctrlMap[&controls::FrameDurationLimits] =\n> -\t\tControlInfo(static_cast<int64_t>(minSensorFrameDuration.get<std::micro>()),\n> -\t\t\t    static_cast<int64_t>(maxSensorFrameDuration.get<std::micro>()));\n> +\t\tControlInfo(static_cast<int64_t>(mode_.minFrameDuration.get<std::micro>()),\n> +\t\t\t    static_cast<int64_t>(mode_.maxFrameDuration.get<std::micro>()));\n>\n>  \tctrlMap[&controls::AnalogueGain] =\n> -\t\tControlInfo(1.0f, static_cast<float>(helper_->gain(maxSensorGainCode_)));\n> -\n> -\t/*\n> -\t * Calculate the max exposure limit from the frame duration limit as V4L2\n> -\t * will limit the maximum control value based on the current VBLANK value.\n> -\t */\n> -\tDuration maxShutter = Duration::max();\n> -\thelper_->getBlanking(maxShutter, minSensorFrameDuration, maxSensorFrameDuration);\n> -\tconst uint32_t exposureMin = sensorCtrls_.at(V4L2_CID_EXPOSURE).min().get<int32_t>();\n> +\t\tControlInfo(static_cast<float>(mode_.minAnalogueGain),\n> +\t\t\t    static_cast<float>(mode_.maxAnalogueGain));\n>\n>  \tctrlMap[&controls::ExposureTime] =\n> -\t\tControlInfo(static_cast<int32_t>(helper_->exposure(exposureMin, mode_.minLineLength).get<std::micro>()),\n> -\t\t\t    static_cast<int32_t>(maxShutter.get<std::micro>()));\n> +\t\tControlInfo(static_cast<int32_t>(mode_.minShutter.get<std::micro>()),\n> +\t\t\t    static_cast<int32_t>(mode_.maxShutter.get<std::micro>()));\n>\n>  \t/* Declare Autofocus controls, only if we have a controllable lens */\n>  \tif (lensPresent_)\n> @@ -1496,9 +1482,6 @@ void IPARPi::applyAWB(const struct AwbStatus *awbStatus, ControlList &ctrls)\n>\n>  void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDuration)\n>  {\n> -\tconst Duration minSensorFrameDuration = mode_.minFrameLength * mode_.minLineLength;\n> -\tconst Duration maxSensorFrameDuration = mode_.maxFrameLength * mode_.maxLineLength;\n> -\n>  \t/*\n>  \t * This will only be applied once AGC recalculations occur.\n>  \t * The values may be clamped based on the sensor mode capabilities as well.\n> @@ -1506,9 +1489,9 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>  \tminFrameDuration_ = minFrameDuration ? minFrameDuration : defaultMaxFrameDuration;\n>  \tmaxFrameDuration_ = maxFrameDuration ? maxFrameDuration : defaultMinFrameDuration;\n>  \tminFrameDuration_ = std::clamp(minFrameDuration_,\n> -\t\t\t\t       minSensorFrameDuration, maxSensorFrameDuration);\n> +\t\t\t\t       mode_.minFrameDuration, mode_.maxFrameDuration);\n>  \tmaxFrameDuration_ = std::clamp(maxFrameDuration_,\n> -\t\t\t\t       minSensorFrameDuration, maxSensorFrameDuration);\n> +\t\t\t\t       mode_.minFrameDuration, mode_.maxFrameDuration);\n>  \tmaxFrameDuration_ = std::max(maxFrameDuration_, minFrameDuration_);\n>\n>  \t/* Return the validated limits via metadata. */\n> @@ -1531,6 +1514,8 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>\n>  void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)\n>  {\n> +\tconst int32_t minGainCode = helper_->gainCode(mode_.minAnalogueGain);\n> +\tconst int32_t maxGainCode = helper_->gainCode(mode_.maxAnalogueGain);\n>  \tint32_t gainCode = helper_->gainCode(agcStatus->analogueGain);\n>\n>  \t/*\n> @@ -1538,7 +1523,7 @@ void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)\n>  \t * DelayedControls. The AGC will correctly handle a lower gain returned\n>  \t * by the sensor, provided it knows the actual gain used.\n>  \t */\n> -\tgainCode = std::min<int32_t>(gainCode, maxSensorGainCode_);\n> +\tgainCode = std::clamp<int32_t>(gainCode, minGainCode, maxGainCode);\n>\n>  \t/* getBlanking might clip exposure time to the fps limits. */\n>  \tDuration exposure = agcStatus->shutterTime;\n> --\n> 2.34.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 77A2FC0F2A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 27 Mar 2023 13:52:28 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CD1DC62722;\n\tMon, 27 Mar 2023 15:52:27 +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 D10AD626D7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 27 Mar 2023 15:52:25 +0200 (CEST)","from ideasonboard.com (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 5C1677FA;\n\tMon, 27 Mar 2023 15:52:25 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1679925147;\n\tbh=ca44nTdIe10NChL7RKSL34bwD9ujF7B6T/Qfn3QJrkY=;\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=VuL6CbKbV+eWVfR6iiwUuNkIWQ/OZTndn20mI2oD5Q7JOM3wOKoWy1hWMc9QLwdla\n\teykZMBQMzW0K/Q5tn9VEOPnHF2C5smnjUs1tJKp4XUoyHwVJT72FVTPHWaG/jkdyTt\n\t2i3ZtRFVrdbN6JWD/OC0wCjEP+IKDweKrG6O3BwQKfdQPvAmtkCDdfr6V4+V6mmBS9\n\t+g6BsgeGmWuB4L9d7ZZme2W7j2oLQ8jQPX+5Rqie4GIYpzvhsysjNq1n93uENpyC+4\n\trMiaOjuJNz0l+mcKiYltSXy8s0Upi6rumit6vT1hOKiYUdwUxkam3rL5Z7jEwo+bId\n\tnhKBnOFq9cXWw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1679925145;\n\tbh=ca44nTdIe10NChL7RKSL34bwD9ujF7B6T/Qfn3QJrkY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=cer0KhHxSwcn0PTGJuXcs2RMdXWDpHXI0J+0bbS+uLRcEPZa3+1u3dMWEwKxSjEgi\n\t2/aTjEA9Wn/rH0hJDZWtCe5NXEc7UdPxaD7lZ/N/UdSiPK0l3sq+6H6gQiOXiKrMnv\n\te7LuPgn8sGyAykWoW1tTF/P5Ugkrw73brXs69edw="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"cer0KhHx\"; dkim-atps=neutral","Date":"Mon, 27 Mar 2023 15:52:21 +0200","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<20230327135221.pcdrcwkfpft4v5aw@uno.localdomain>","References":"<20230327093439.24670-1-naush@raspberrypi.com>\n\t<20230327093439.24670-3-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230327093439.24670-3-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v2 2/4] ipa: raspberrypi: Use the new\n\tsensor limits fields in CameraMode","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.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]