[{"id":17020,"web_url":"https://patchwork.libcamera.org/comment/17020/","msgid":"<CAHW6GYKvmWBm2iQsKiqwKzBbhsbc-0ABdNACqmXcwQqU_PGMFA@mail.gmail.com>","date":"2021-05-19T14:21:20","subject":"Re: [libcamera-devel] [PATCH 3/4] ipa: raspberrypi: Switch\n\tAgcAlgorithm API to use RPiController::Duration","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 this work!\n\nOn Tue, 18 May 2021 at 11:09, Naushir Patuck <naush@raspberrypi.com> wrote:\n>\n> Switch the AgcAlgorithm API functions to use RPiController::Duration\n> for all time based variables.\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n>  src/ipa/raspberrypi/controller/agc_algorithm.hpp |  7 ++++---\n>  src/ipa/raspberrypi/controller/rpi/agc.cpp       | 12 ++++++------\n>  src/ipa/raspberrypi/controller/rpi/agc.hpp       |  6 +++---\n>  src/ipa/raspberrypi/raspberrypi.cpp              |  6 +++---\n>  4 files changed, 16 insertions(+), 15 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.hpp b/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> index f97deb0fca59..668912c47388 100644\n> --- a/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> +++ b/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> @@ -7,6 +7,7 @@\n>  #pragma once\n>\n>  #include \"algorithm.hpp\"\n> +#include \"duration.hpp\"\n>\n>  namespace RPiController {\n>\n> @@ -17,9 +18,9 @@ public:\n>         // An AGC algorithm must provide the following:\n>         virtual unsigned int GetConvergenceFrames() const = 0;\n>         virtual void SetEv(double ev) = 0;\n> -       virtual void SetFlickerPeriod(double flicker_period) = 0;\n> -       virtual void SetFixedShutter(double fixed_shutter) = 0; // microseconds\n> -       virtual void SetMaxShutter(double max_shutter) = 0; // microseconds\n> +       virtual void SetFlickerPeriod(Duration flicker_period) = 0;\n> +       virtual void SetFixedShutter(Duration fixed_shutter) = 0;\n> +       virtual void SetMaxShutter(Duration max_shutter) = 0;\n>         virtual void SetFixedAnalogueGain(double fixed_analogue_gain) = 0;\n>         virtual void SetMeteringMode(std::string const &metering_mode_name) = 0;\n>         virtual void SetExposureMode(std::string const &exposure_mode_name) = 0;\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> index f4cd5d26fb4e..1cb4472b2691 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> @@ -222,19 +222,19 @@ void Agc::SetEv(double ev)\n>         ev_ = ev;\n>  }\n>\n> -void Agc::SetFlickerPeriod(double flicker_period)\n> +void Agc::SetFlickerPeriod(Duration flicker_period)\n>  {\n> -       flicker_period_ = flicker_period;\n> +       flicker_period_ = DurationValue<std::micro>(flicker_period);\n\nI assume these will all get nicer again in the next patch...!\n\n>  }\n>\n> -void Agc::SetMaxShutter(double max_shutter)\n> +void Agc::SetMaxShutter(Duration max_shutter)\n>  {\n> -       max_shutter_ = max_shutter;\n> +       max_shutter_ = DurationValue<std::micro>(max_shutter);\n>  }\n>\n> -void Agc::SetFixedShutter(double fixed_shutter)\n> +void Agc::SetFixedShutter(Duration fixed_shutter)\n>  {\n> -       fixed_shutter_ = fixed_shutter;\n> +       fixed_shutter_ = DurationValue<std::micro>(fixed_shutter);\n>         // Set this in case someone calls Pause() straight after.\n>         status_.shutter_time = clipShutter(fixed_shutter_);\n>  }\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp b/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> index 0427fb59ec1b..cb79bf61ba42 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> @@ -77,9 +77,9 @@ public:\n>         void Resume() override;\n>         unsigned int GetConvergenceFrames() const override;\n>         void SetEv(double ev) override;\n> -       void SetFlickerPeriod(double flicker_period) override;\n> -       void SetMaxShutter(double max_shutter) override; // microseconds\n> -       void SetFixedShutter(double fixed_shutter) override; // microseconds\n> +       void SetFlickerPeriod(Duration flicker_period) override;\n> +       void SetMaxShutter(Duration max_shutter) override;\n> +       void SetFixedShutter(Duration fixed_shutter) override;\n>         void SetFixedAnalogueGain(double fixed_analogue_gain) override;\n>         void SetMeteringMode(std::string const &metering_mode_name) override;\n>         void SetExposureMode(std::string const &exposure_mode_name) override;\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 994fb7e057a9..f080f2e53bac 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -643,8 +643,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n>                                 break;\n>                         }\n>\n> -                       /* This expects units of micro-seconds. */\n> -                       agc->SetFixedShutter(ctrl.second.get<int32_t>());\n> +                       /* The control provides units of microseconds. */\n> +                       agc->SetFixedShutter(ctrl.second.get<int32_t>() * 1.0us);\n\nI suppose I just wanted to ask if this is the \"proper\" way to convert\nto a Duration - it certainly seems quite clear and tidy.\n\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n\nThanks\nDavid\n\n>\n>                         libcameraMetadata_.set(controls::ExposureTime, ctrl.second.get<int32_t>());\n>                         break;\n> @@ -1097,7 +1097,7 @@ void IPARPi::applyFrameDurations(const Duration &minFrameDuration,\n>\n>         RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(\n>                 controller_.GetAlgorithm(\"agc\"));\n> -       agc->SetMaxShutter(DurationValue<std::micro>(maxShutter));\n> +       agc->SetMaxShutter(maxShutter);\n>  }\n>\n>  void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)\n> --\n> 2.25.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 0E4D9C31FF\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 May 2021 14:21:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 631C36891A;\n\tWed, 19 May 2021 16:21:35 +0200 (CEST)","from mail-wr1-x429.google.com (mail-wr1-x429.google.com\n\t[IPv6:2a00:1450:4864:20::429])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AA3D868915\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 May 2021 16:21:33 +0200 (CEST)","by mail-wr1-x429.google.com with SMTP id y14so12141603wrm.13\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 May 2021 07:21:33 -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=\"N4yJqTtO\"; 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=nRx0D2LI3zPMnATxOGdvfk3pCFiM5RMAAFbj9VIU5oM=;\n\tb=N4yJqTtObD2dk1t0x58bW/eSQX/evDbUZaV5CT9KJRu55he8xTZIpNvPz4lArLoK4/\n\tjlXP9Fkx47CDWLHAaJeVtZ05vj1nJ/0QerLK7JMwfQSL4UU8xT/wKTtKce6CyEGzWkrU\n\tIa7u6hI4ksWM66D9g58O/RGmUMAlxDI3xypnrb77gMqzbqATDV9RcPVCH+uB86WcwzIl\n\tDFXM0lKKTwnpFrMJjVOYupIY2G6qEfnFfzzFUGKrx3u2xrLWpNJX2K8VFy2S5z0hj3zw\n\twmxsk2FYdJbv9hMyEopRNu6IRv9jRNqon5h3758Gel2nac3traN9WUAUDS8bbeVTjJzo\n\thMDQ==","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=nRx0D2LI3zPMnATxOGdvfk3pCFiM5RMAAFbj9VIU5oM=;\n\tb=JtIbgXbbGH0e6meQMDcBuC/Ct1VgK0SpoWHyINSpzhlVrpMSNV/lo7Y2FvRV0ft27S\n\tcZOjZjL5N2qN/D1GdO+Ir0HInQoKcyWxP3WLP6sOcSNOLh/mKOv/vGw5g2fCrrYcrxtw\n\tB95BafZtLh0RnicvNYvXQHVTuaCSaccFJFVUo3ueLSA5LY+Jg0x6k1mxOWdQQHQk6H2Y\n\tfIyZD+UIB3Mj1icCUcdmVVhp6LwB17WLgwkpzfBXkMpq5yKdBSVyIDxs70s5wm7frcX0\n\tPH/naEeuOYEPXW+Ib30ZKVKHX47NQNznMOMhk7O7w1nOF7PFGAL7//co+YWBvdSXAAb9\n\tjO+w==","X-Gm-Message-State":"AOAM533lyVdGvV0EEvSGX0aEzVUvavuQeHgfMBpXdBfpRFUhxuBqRm5k\n\tjpe083KKdEkvqi9B9OGTyPKyXLTdli03PkD8cIGLrg==","X-Google-Smtp-Source":"ABdhPJy26GprN9dkQn/NhDUZlhEExYHLdmxJ+kV5YNVmoxjowciL6QrFVIFIOe7gLELjhZxiL8Gv+WHHSrlgc3uqzMA=","X-Received":"by 2002:adf:8b4a:: with SMTP id\n\tv10mr14819073wra.274.1621434093361; \n\tWed, 19 May 2021 07:21:33 -0700 (PDT)","MIME-Version":"1.0","References":"<20210518100706.578526-1-naush@raspberrypi.com>\n\t<20210518100706.578526-4-naush@raspberrypi.com>","In-Reply-To":"<20210518100706.578526-4-naush@raspberrypi.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Wed, 19 May 2021 15:21:20 +0100","Message-ID":"<CAHW6GYKvmWBm2iQsKiqwKzBbhsbc-0ABdNACqmXcwQqU_PGMFA@mail.gmail.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH 3/4] ipa: raspberrypi: Switch\n\tAgcAlgorithm API to use RPiController::Duration","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>"}},{"id":17023,"web_url":"https://patchwork.libcamera.org/comment/17023/","msgid":"<CAEmqJPptF2o8MXEAJ+EA1uUw7UdhwpSX67FRt9uzOKfFaoSRpg@mail.gmail.com>","date":"2021-05-19T14:27:34","subject":"Re: [libcamera-devel] [PATCH 3/4] ipa: raspberrypi: Switch\n\tAgcAlgorithm API to use RPiController::Duration","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi David,\n\nThank you for your feedback.\n\nOn Wed, 19 May 2021 at 15:21, David Plowman <david.plowman@raspberrypi.com>\nwrote:\n\n> Hi Naush\n>\n> Thanks for this work!\n>\n> On Tue, 18 May 2021 at 11:09, Naushir Patuck <naush@raspberrypi.com>\n> wrote:\n> >\n> > Switch the AgcAlgorithm API functions to use RPiController::Duration\n> > for all time based variables.\n> >\n> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> > ---\n> >  src/ipa/raspberrypi/controller/agc_algorithm.hpp |  7 ++++---\n> >  src/ipa/raspberrypi/controller/rpi/agc.cpp       | 12 ++++++------\n> >  src/ipa/raspberrypi/controller/rpi/agc.hpp       |  6 +++---\n> >  src/ipa/raspberrypi/raspberrypi.cpp              |  6 +++---\n> >  4 files changed, 16 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> b/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> > index f97deb0fca59..668912c47388 100644\n> > --- a/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> > +++ b/src/ipa/raspberrypi/controller/agc_algorithm.hpp\n> > @@ -7,6 +7,7 @@\n> >  #pragma once\n> >\n> >  #include \"algorithm.hpp\"\n> > +#include \"duration.hpp\"\n> >\n> >  namespace RPiController {\n> >\n> > @@ -17,9 +18,9 @@ public:\n> >         // An AGC algorithm must provide the following:\n> >         virtual unsigned int GetConvergenceFrames() const = 0;\n> >         virtual void SetEv(double ev) = 0;\n> > -       virtual void SetFlickerPeriod(double flicker_period) = 0;\n> > -       virtual void SetFixedShutter(double fixed_shutter) = 0; //\n> microseconds\n> > -       virtual void SetMaxShutter(double max_shutter) = 0; //\n> microseconds\n> > +       virtual void SetFlickerPeriod(Duration flicker_period) = 0;\n> > +       virtual void SetFixedShutter(Duration fixed_shutter) = 0;\n> > +       virtual void SetMaxShutter(Duration max_shutter) = 0;\n> >         virtual void SetFixedAnalogueGain(double fixed_analogue_gain) =\n> 0;\n> >         virtual void SetMeteringMode(std::string const\n> &metering_mode_name) = 0;\n> >         virtual void SetExposureMode(std::string const\n> &exposure_mode_name) = 0;\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > index f4cd5d26fb4e..1cb4472b2691 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > @@ -222,19 +222,19 @@ void Agc::SetEv(double ev)\n> >         ev_ = ev;\n> >  }\n> >\n> > -void Agc::SetFlickerPeriod(double flicker_period)\n> > +void Agc::SetFlickerPeriod(Duration flicker_period)\n> >  {\n> > -       flicker_period_ = flicker_period;\n> > +       flicker_period_ = DurationValue<std::micro>(flicker_period);\n>\n> I assume these will all get nicer again in the next patch...!\n>\n\nYes!\n\n\n>\n> >  }\n> >\n> > -void Agc::SetMaxShutter(double max_shutter)\n> > +void Agc::SetMaxShutter(Duration max_shutter)\n> >  {\n> > -       max_shutter_ = max_shutter;\n> > +       max_shutter_ = DurationValue<std::micro>(max_shutter);\n> >  }\n> >\n> > -void Agc::SetFixedShutter(double fixed_shutter)\n> > +void Agc::SetFixedShutter(Duration fixed_shutter)\n> >  {\n> > -       fixed_shutter_ = fixed_shutter;\n> > +       fixed_shutter_ = DurationValue<std::micro>(fixed_shutter);\n> >         // Set this in case someone calls Pause() straight after.\n> >         status_.shutter_time = clipShutter(fixed_shutter_);\n> >  }\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> b/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> > index 0427fb59ec1b..cb79bf61ba42 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> > +++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp\n> > @@ -77,9 +77,9 @@ public:\n> >         void Resume() override;\n> >         unsigned int GetConvergenceFrames() const override;\n> >         void SetEv(double ev) override;\n> > -       void SetFlickerPeriod(double flicker_period) override;\n> > -       void SetMaxShutter(double max_shutter) override; // microseconds\n> > -       void SetFixedShutter(double fixed_shutter) override; //\n> microseconds\n> > +       void SetFlickerPeriod(Duration flicker_period) override;\n> > +       void SetMaxShutter(Duration max_shutter) override;\n> > +       void SetFixedShutter(Duration fixed_shutter) override;\n> >         void SetFixedAnalogueGain(double fixed_analogue_gain) override;\n> >         void SetMeteringMode(std::string const &metering_mode_name)\n> override;\n> >         void SetExposureMode(std::string const &exposure_mode_name)\n> override;\n> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> b/src/ipa/raspberrypi/raspberrypi.cpp\n> > index 994fb7e057a9..f080f2e53bac 100644\n> > --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> > +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> > @@ -643,8 +643,8 @@ void IPARPi::queueRequest(const ControlList\n> &controls)\n> >                                 break;\n> >                         }\n> >\n> > -                       /* This expects units of micro-seconds. */\n> > -                       agc->SetFixedShutter(ctrl.second.get<int32_t>());\n> > +                       /* The control provides units of microseconds. */\n> > +                       agc->SetFixedShutter(ctrl.second.get<int32_t>()\n> * 1.0us);\n>\n> I suppose I just wanted to ask if this is the \"proper\" way to convert\n> to a Duration - it certainly seems quite clear and tidy.\n>\n\nYou can either use the above or the constructor form Duration(x).  I find\nthe\nabove a bit more intuitive, as you do not need to know the time units of the\nDuration object.\n\nRegards,\nNaush\n\n\n\n>\n> Reviewed-by: David Plowman <david.plowman@raspberrypi.com>\n>\n> Thanks\n> David\n>\n> >\n> >                         libcameraMetadata_.set(controls::ExposureTime,\n> ctrl.second.get<int32_t>());\n> >                         break;\n> > @@ -1097,7 +1097,7 @@ void IPARPi::applyFrameDurations(const Duration\n> &minFrameDuration,\n> >\n> >         RPiController::AgcAlgorithm *agc =\n> dynamic_cast<RPiController::AgcAlgorithm *>(\n> >                 controller_.GetAlgorithm(\"agc\"));\n> > -       agc->SetMaxShutter(DurationValue<std::micro>(maxShutter));\n> > +       agc->SetMaxShutter(maxShutter);\n> >  }\n> >\n> >  void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList\n> &ctrls)\n> > --\n> > 2.25.1\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 7DCDCC31FB\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 19 May 2021 14:27:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C065A6891A;\n\tWed, 19 May 2021 16:27:52 +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 DEE7468915\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 May 2021 16:27:50 +0200 (CEST)","by mail-lj1-x22c.google.com with SMTP id p20so15871578ljj.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 19 May 2021 07:27:50 -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=\"Io9GrVhV\"; 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=kGlS6fwS8onZLwuanh+EZmwBH/kdp2RUqTOoeVhv6Ws=;\n\tb=Io9GrVhVe/0542YYzfbsNBcSjAN3V15QK4EmmPYCQwWfTQqWtkHzqPfeQH3BUqiE4R\n\twvaRdCLiei/gn/oQlD9wVCQJAtVoATEIiUkCzogIz5VthOepHzII7nqtbIatTVkyS45+\n\tol/EZB79Y1p9wrJrcTvexW5XpgIGk0fzuDm/IEvl64DKJQIJYHu38/E6HrHgtpjH/Eub\n\tnRKEETl4h4uDSyrNNAllYO3YZ8arlepku4Yo8KwMD8gmRtT9kLJCw6uaKHWeqoyUo4dY\n\tXvxx486FZGjlIZy8AeoksCeuOJVvZX8Lv6HiEL7hXH5xM9YvKZGTPfDmeyEj/WcxpYxD\n\tq9RA==","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=kGlS6fwS8onZLwuanh+EZmwBH/kdp2RUqTOoeVhv6Ws=;\n\tb=XZyqsfQ17HPwcYrer1fMjux3mG0pwpF518bTPdqu34h3gohFsap4hrnEEwHcZqj+Ko\n\tOSYVfZSxFsTf0JrqmrZ2HlAAd0+cCI51gkfm2jrf+ikaiAExMOzOBTRqGvwboI82b3dp\n\tOAGlmX7Y6aV5p++rbCENnYCzp0cLQvqjqUMBJ5aQALrjMsKsQefO7u3pEqHhtAWwDwqR\n\tW/8Xzmx7H+KORLPlOk7DPqHLN+WZcF7MKnfJ7sfUDXMYveISTXjU5YaGRC0yOubBImc5\n\t0iMqxNP8rB26dTN3kdjMjLMn+0iExi7i9vzi3KTS5JMhAm4WXyRi6j0LDfXg1HFllnWk\n\tRgjw==","X-Gm-Message-State":"AOAM532ekuqc6rgV/Wdadngg2lf3ZXwEkUD4/9Lg8Ou1cyLn4rznbbJx\n\tLPO/f5V6chldZhPUQRXitsFy/1fjUpC9+1RNSPlfCg==","X-Google-Smtp-Source":"ABdhPJzIAX5nAvRhkzt0SOB0Qoy8YPTo62EINpWjhx38nTEu7Ahz4Iz7l+0dSDGaQu+HJ2NP8bVJeGB7YTRqHSdrvkA=","X-Received":"by 2002:a05:651c:1311:: with SMTP id\n\tu17mr8946621lja.48.1621434470113; \n\tWed, 19 May 2021 07:27:50 -0700 (PDT)","MIME-Version":"1.0","References":"<20210518100706.578526-1-naush@raspberrypi.com>\n\t<20210518100706.578526-4-naush@raspberrypi.com>\n\t<CAHW6GYKvmWBm2iQsKiqwKzBbhsbc-0ABdNACqmXcwQqU_PGMFA@mail.gmail.com>","In-Reply-To":"<CAHW6GYKvmWBm2iQsKiqwKzBbhsbc-0ABdNACqmXcwQqU_PGMFA@mail.gmail.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Wed, 19 May 2021 15:27:34 +0100","Message-ID":"<CAEmqJPptF2o8MXEAJ+EA1uUw7UdhwpSX67FRt9uzOKfFaoSRpg@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"multipart/alternative; boundary=\"0000000000009e381a05c2afa116\"","Subject":"Re: [libcamera-devel] [PATCH 3/4] ipa: raspberrypi: Switch\n\tAgcAlgorithm API to use RPiController::Duration","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>"}}]