[{"id":17192,"web_url":"https://patchwork.libcamera.org/comment/17192/","msgid":"<YKuYWw6EOnvRCGdZ@pendragon.ideasonboard.com>","date":"2021-05-24T12:13:15","subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nThank you for the patch.\n\nOn Mon, May 24, 2021 at 06:41:21PM +0900, Paul Elder wrote:\n> We need a separate control to report the nominal frame duration, but\n> it's also useful to report the min/max frame duration values that will\n> be used. Split the FrameDurations control into FrameDuration and\n> FrameDurationLimits respectively to support both of these.\n\nI'm not 100% sure yet it will be useful to report the adjusted\nFrameDurationLimits in metadata, but a separate control for the nominal\nframe duration is certainly less confusing.\n\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  include/libcamera/ipa/raspberrypi.h  | 2 +-\n>  src/android/camera_device.cpp        | 2 +-\n>  src/ipa/raspberrypi/raspberrypi.cpp  | 4 ++--\n>  src/libcamera/control_ids.yaml       | 8 +++++++-\n>  src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +++---\n>  5 files changed, 14 insertions(+), 8 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h\n> index d10c1733..a8790000 100644\n> --- a/include/libcamera/ipa/raspberrypi.h\n> +++ b/include/libcamera/ipa/raspberrypi.h\n> @@ -44,7 +44,7 @@ static const ControlInfoMap Controls = {\n>  \t{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },\n>  \t{ &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },\n>  \t{ &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },\n> -\t{ &controls::FrameDurations, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },\n> +\t{ &controls::FrameDurationLimits, ControlInfo(INT64_C(1000), INT64_C(1000000000)) },\n>  \t{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },\n>  };\n>  \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index b32e8be5..0eea2b95 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -824,7 +824,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \n>  \tint64_t minFrameDurationNsec = -1;\n>  \tint64_t maxFrameDurationNsec = -1;\n> -\tconst auto frameDurationsInfo = controlsInfo.find(&controls::FrameDurations);\n> +\tconst auto frameDurationsInfo = controlsInfo.find(&controls::FrameDurationLimits);\n>  \tif (frameDurationsInfo != controlsInfo.end()) {\n>  \t\tminFrameDurationNsec = frameDurationsInfo->second.min().get<int64_t>() * 1000;\n>  \t\tmaxFrameDurationNsec = frameDurationsInfo->second.max().get<int64_t>() * 1000;\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 52d91db2..79a327e2 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -860,7 +860,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>  \t\t\tbreak;\n>  \t\t}\n>  \n> -\t\tcase controls::FRAME_DURATIONS: {\n> +\t\tcase controls::FRAME_DURATION_LIMITS: {\n>  \t\t\tauto frameDurations = ctrl.second.get<Span<const int64_t>>();\n>  \t\t\tapplyFrameDurations(frameDurations[0], frameDurations[1]);\n>  \t\t\tbreak;\n> @@ -1075,7 +1075,7 @@ void IPARPi::applyFrameDurations(double minFrameDuration, double maxFrameDuratio\n>  \tmaxFrameDuration_ = std::max(maxFrameDuration_, minFrameDuration_);\n>  \n>  \t/* Return the validated limits via metadata. */\n> -\tlibcameraMetadata_.set(controls::FrameDurations,\n> +\tlibcameraMetadata_.set(controls::FrameDurationLimits,\n>  \t\t\t       { static_cast<int64_t>(minFrameDuration_),\n>  \t\t\t\t static_cast<int64_t>(maxFrameDuration_) });\n>  \n> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> index 88d81ac4..338fbdc9 100644\n> --- a/src/libcamera/control_ids.yaml\n> +++ b/src/libcamera/control_ids.yaml\n> @@ -323,7 +323,13 @@ controls:\n>          step to respect the received gain factor and shall report\n>          their total value in the request metadata.\n>  \n> -  - FrameDurations:\n> +  - FrameDuration:\n> +      type: int64_t\n> +      description: |\n> +        The nominal frame duration from start of frame exposure to start of\n> +        next exposure, expressed in microseconds.\n> +\n> +  - FrameDurationLimits:\n>        type: int64_t\n>        description: |\n>          The minimum and maximum (in that order) frame duration,\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index 8ae47c6d..6e17753f 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -980,9 +980,9 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)\n>  \t\tframeDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);\n>  \t}\n>  \n> -\tcontrols[&controls::FrameDurations] = ControlInfo(frameDurations[0],\n> -\t\t\t\t\t\t\t  frameDurations[1],\n> -\t\t\t\t\t\t\t  frameDurations[2]);\n> +\tcontrols[&controls::FrameDuration] = ControlInfo(frameDurations[0],\n> +\t\t\t\t\t\t\t frameDurations[1],\n> +\t\t\t\t\t\t\t frameDurations[2]);\n>  \n>  \t/*\n>  \t * Compute the scaler crop limits.","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 A37FDC3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 12:13:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AE8936891C;\n\tMon, 24 May 2021 14:13:21 +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 E6C33601AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 14:13:19 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 57903ED;\n\tMon, 24 May 2021 14:13:19 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"GEVxOLNu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621858399;\n\tbh=QttlG5kjIRQfeTcCGbLbnkJPILrtX0BtC+bMbjWXwH8=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=GEVxOLNur+6akb7swz+G/zNqNntUjyvZ5CKpAalFl/vMRIA90iSWdjmbgbTIuNdyC\n\tQjexa36I9aswgJS4EfbuV1/5hEYLBq99nbfp7RXbk+s1+a2nya4MqDWexuchOy2DSl\n\tUKCJ0ClBfRt01o1xSmuMvkMK5odZSwJpBZ+++Ruk=","Date":"Mon, 24 May 2021 15:13:15 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<YKuYWw6EOnvRCGdZ@pendragon.ideasonboard.com>","References":"<20210524094123.1187354-1-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210524094123.1187354-1-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17195,"web_url":"https://patchwork.libcamera.org/comment/17195/","msgid":"<20210524122249.p7cbwvexygrsdvdm@uno.localdomain>","date":"2021-05-24T12:22:49","subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul, Laurent,\n\nOn Mon, May 24, 2021 at 03:13:15PM +0300, Laurent Pinchart wrote:\n> Hi Paul,\n>\n> Thank you for the patch.\n>\n> On Mon, May 24, 2021 at 06:41:21PM +0900, Paul Elder wrote:\n> > We need a separate control to report the nominal frame duration, but\n> > it's also useful to report the min/max frame duration values that will\n> > be used. Split the FrameDurations control into FrameDuration and\n> > FrameDurationLimits respectively to support both of these.\n>\n> I'm not 100% sure yet it will be useful to report the adjusted\n> FrameDurationLimits in metadata, but a separate control for the nominal\n> frame duration is certainly less confusing.\n>\n> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> > ---\n\n[snip]\n\n> > diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> > index 88d81ac4..338fbdc9 100644\n> > --- a/src/libcamera/control_ids.yaml\n> > +++ b/src/libcamera/control_ids.yaml\n> > @@ -323,7 +323,13 @@ controls:\n> >          step to respect the received gain factor and shall report\n> >          their total value in the request metadata.\n> >\n> > -  - FrameDurations:\n> > +  - FrameDuration:\n> > +      type: int64_t\n> > +      description: |\n> > +        The nominal frame duration from start of frame exposure to start of\n> > +        next exposure, expressed in microseconds.\n\nIsn't this a bit poor ? Should we at least specify this is meant to be\nreturned in metadata only ?\n\n\n> > +\n> > +  - FrameDurationLimits:\n> >        type: int64_t\n> >        description: |\n> >          The minimum and maximum (in that order) frame duration,\n> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > index 8ae47c6d..6e17753f 100644\n> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > @@ -980,9 +980,9 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)\n> >  \t\tframeDurations[i] = frameSize / (sensorInfo.pixelRate / 1000000U);\n> >  \t}\n> >\n> > -\tcontrols[&controls::FrameDurations] = ControlInfo(frameDurations[0],\n> > -\t\t\t\t\t\t\t  frameDurations[1],\n> > -\t\t\t\t\t\t\t  frameDurations[2]);\n> > +\tcontrols[&controls::FrameDuration] = ControlInfo(frameDurations[0],\n> > +\t\t\t\t\t\t\t frameDurations[1],\n> > +\t\t\t\t\t\t\t frameDurations[2]);\n> >\n> >  \t/*\n> >  \t * Compute the scaler crop limits.\n>\n> --\n> Regards,\n>\n> Laurent Pinchart","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 E5B26C3201\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 12:22:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 70005602B0;\n\tMon, 24 May 2021 14:22:05 +0200 (CEST)","from relay11.mail.gandi.net (relay11.mail.gandi.net\n\t[217.70.178.231])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2DCA2601AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 14:22:04 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay11.mail.gandi.net (Postfix) with ESMTPSA id 6A6A5100003;\n\tMon, 24 May 2021 12:22:03 +0000 (UTC)"],"Date":"Mon, 24 May 2021 14:22:49 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210524122249.p7cbwvexygrsdvdm@uno.localdomain>","References":"<20210524094123.1187354-1-paul.elder@ideasonboard.com>\n\t<YKuYWw6EOnvRCGdZ@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<YKuYWw6EOnvRCGdZ@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17201,"web_url":"https://patchwork.libcamera.org/comment/17201/","msgid":"<CAEmqJPovyc4mmd-q1cR6QSnPnGJ5D4hj3gEmYiaP-+HLd0wUDQ@mail.gmail.com>","date":"2021-05-24T13:04:38","subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Paul,\n\nThank you for your work.\n\nOn Mon, 24 May 2021 at 10:41, Paul Elder <paul.elder@ideasonboard.com>\nwrote:\n\n> We need a separate control to report the nominal frame duration, but\n> it's also useful to report the min/max frame duration values that will\n> be used. Split the FrameDurations control into FrameDuration and\n> FrameDurationLimits respectively to support both of these.\n>\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> ---\n>  include/libcamera/ipa/raspberrypi.h  | 2 +-\n>  src/android/camera_device.cpp        | 2 +-\n>  src/ipa/raspberrypi/raspberrypi.cpp  | 4 ++--\n>  src/libcamera/control_ids.yaml       | 8 +++++++-\n>  src/libcamera/pipeline/ipu3/ipu3.cpp | 6 +++---\n>  5 files changed, 14 insertions(+), 8 deletions(-)\n>\n> diff --git a/include/libcamera/ipa/raspberrypi.h\n> b/include/libcamera/ipa/raspberrypi.h\n> index d10c1733..a8790000 100644\n> --- a/include/libcamera/ipa/raspberrypi.h\n> +++ b/include/libcamera/ipa/raspberrypi.h\n> @@ -44,7 +44,7 @@ static const ControlInfoMap Controls = {\n>         { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },\n>         { &controls::ColourCorrectionMatrix, ControlInfo(-16.0f, 16.0f) },\n>         { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535,\n> 65535, 65535, 65535), Rectangle{}) },\n> -       { &controls::FrameDurations, ControlInfo(INT64_C(1000),\n> INT64_C(1000000000)) },\n> +       { &controls::FrameDurationLimits, ControlInfo(INT64_C(1000),\n> INT64_C(1000000000)) },\n>         { &controls::draft::NoiseReductionMode,\n> ControlInfo(controls::draft::NoiseReductionModeValues) },\n>  };\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index b32e8be5..0eea2b95 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -824,7 +824,7 @@ const camera_metadata_t\n> *CameraDevice::getStaticMetadata()\n>\n>         int64_t minFrameDurationNsec = -1;\n>         int64_t maxFrameDurationNsec = -1;\n> -       const auto frameDurationsInfo =\n> controlsInfo.find(&controls::FrameDurations);\n> +       const auto frameDurationsInfo =\n> controlsInfo.find(&controls::FrameDurationLimits);\n>         if (frameDurationsInfo != controlsInfo.end()) {\n>                 minFrameDurationNsec =\n> frameDurationsInfo->second.min().get<int64_t>() * 1000;\n>                 maxFrameDurationNsec =\n> frameDurationsInfo->second.max().get<int64_t>() * 1000;\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 52d91db2..79a327e2 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -860,7 +860,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>                         break;\n>                 }\n>\n> -               case controls::FRAME_DURATIONS: {\n> +               case controls::FRAME_DURATION_LIMITS: {\n>                         auto frameDurations = ctrl.second.get<Span<const\n> int64_t>>();\n>                         applyFrameDurations(frameDurations[0],\n> frameDurations[1]);\n>                         break;\n> @@ -1075,7 +1075,7 @@ void IPARPi::applyFrameDurations(double\n> minFrameDuration, double maxFrameDuratio\n>         maxFrameDuration_ = std::max(maxFrameDuration_, minFrameDuration_);\n>\n>         /* Return the validated limits via metadata. */\n> -       libcameraMetadata_.set(controls::FrameDurations,\n> +       libcameraMetadata_.set(controls::FrameDurationLimits,\n>                                { static_cast<int64_t>(minFrameDuration_),\n>                                  static_cast<int64_t>(maxFrameDuration_)\n> });\n>\n> diff --git a/src/libcamera/control_ids.yaml\n> b/src/libcamera/control_ids.yaml\n> index 88d81ac4..338fbdc9 100644\n> --- a/src/libcamera/control_ids.yaml\n> +++ b/src/libcamera/control_ids.yaml\n> @@ -323,7 +323,13 @@ controls:\n>          step to respect the received gain factor and shall report\n>          their total value in the request metadata.\n>\n> -  - FrameDurations:\n> +  - FrameDuration:\n> +      type: int64_t\n> +      description: |\n> +        The nominal frame duration from start of frame exposure to start\n> of\n> +        next exposure, expressed in microseconds.\n>\n\nJust a little nit-pick, is nominal the right word here?  If this control\nwere to return\nthe frame duration between frame N and frame N-1 for every frame, would it\nbe\nbetter to replace nominal with instantaneous, as the control value would be\nan\naccurate representation of the inter-frame duration for that particular\nframe.\n\n\n> +\n> +  - FrameDurationLimits:\n>        type: int64_t\n>        description: |\n>          The minimum and maximum (in that order) frame duration,\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index 8ae47c6d..6e17753f 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -980,9 +980,9 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData\n> *data)\n>                 frameDurations[i] = frameSize / (sensorInfo.pixelRate /\n> 1000000U);\n>         }\n>\n> -       controls[&controls::FrameDurations] =\n> ControlInfo(frameDurations[0],\n> -\n>  frameDurations[1],\n> -\n>  frameDurations[2]);\n> +       controls[&controls::FrameDuration] = ControlInfo(frameDurations[0],\n> +                                                        frameDurations[1],\n> +\n> frameDurations[2]);\n>\n>         /*\n>          * Compute the scaler crop limits.\n> --\n> 2.27.0\n>\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 5DE93C3201\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 13:04:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D2851602B0;\n\tMon, 24 May 2021 15:04:57 +0200 (CEST)","from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com\n\t[IPv6:2a00:1450:4864:20::22c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 600BE601AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 15:04:56 +0200 (CEST)","by mail-lj1-x22c.google.com with SMTP id f12so33492386ljp.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 06:04:56 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"ctm2D/29\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=LL9LUkdjOIk32YF70kxoYoBQBmNJ0S3Dwa+Onr0tNZQ=;\n\tb=ctm2D/29lWNzW7Z4vVyb7QuzaHwgRmXaXid0+41muUhTld2c/YZBm6j8h1vPlveKaY\n\tDnAmsVeKqkPNY37N32lRWZUmXfBu0IeEaEM5ApQeTI/8jHofYj4YU7vGOqoR8HrlYeHr\n\txUUJOgg9jH9YwyGdJvk85EWLPC0d1IicUjV588/LcYk+sOMyHmgG9HyBqWj+F8l1WPIE\n\t0k79cELh7wiZSTE8lxYXfBdSZohWp28KXOxwSt6dzvpinhkvCh6LFFkT3G5ZzsJB1IWf\n\tC+9sdYWDHqYmyjz8cXsVHspQOxLt5P31T3A7IxLANIPvkaorBFhVYwVh76oPSbDYd8m9\n\ta7Kg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=LL9LUkdjOIk32YF70kxoYoBQBmNJ0S3Dwa+Onr0tNZQ=;\n\tb=lHAIdX1CmtInmp2uvyFHfWp09xtQ9eReGLIGtmsPMwcwE3aU0qWXax6SlI8WI3jgus\n\tuuJH8miwh6O/iS4SePs/KVkDU/22ajoBwgUibqfLLvT/CBzxtvq62UsVtZwov2gagkiu\n\tTF7NmLFcH3WDYVH1+uclyxi/q0O1q4vfk0VkLYvVw59O38A5EqBocXqAcCiiLuQLxExT\n\tt52xitxYHttbAHiNuLEILxRgtXVhoimdbBn1P4ZOFUOnZTOXUsGOSbcAnA5j/MzjDZRt\n\tAUub3V6VLQeZ0fkDQQSVXjOCQu61ZND6YYlBHEYCjo0T/cohDip25Jpzi+ciOU0SPUwo\n\tQkUg==","X-Gm-Message-State":"AOAM532AuMWMYanryYavhml1GQ3H4bosNdPTxQ5FXv8DXxRSRG8EGTC1\n\tro66WhGo2P18byXuKE6NtAYmtPYH9hzCUlLE84Z2tSl9JtQ=","X-Google-Smtp-Source":"ABdhPJxWlgT++6L41UBgsLvyDcSaBJybo+tXNPYzAPsVjdjXyz9gwERF2TJlbTE8EzXZxpdhaPkkwH6EBwIp1t0PIlo=","X-Received":"by 2002:a2e:7203:: with SMTP id\n\tn3mr15826832ljc.499.1621861494363; \n\tMon, 24 May 2021 06:04:54 -0700 (PDT)","MIME-Version":"1.0","References":"<20210524094123.1187354-1-paul.elder@ideasonboard.com>","In-Reply-To":"<20210524094123.1187354-1-paul.elder@ideasonboard.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Mon, 24 May 2021 14:04:38 +0100","Message-ID":"<CAEmqJPovyc4mmd-q1cR6QSnPnGJ5D4hj3gEmYiaP-+HLd0wUDQ@mail.gmail.com>","To":"Paul Elder <paul.elder@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"0000000000003f262605c3130eea\"","Subject":"Re: [libcamera-devel] [PATCH v2 1/3] controls: Split FrameDurations\n\tinto FrameDuration and FrameDurationLimits","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]