[{"id":25837,"web_url":"https://patchwork.libcamera.org/comment/25837/","msgid":"<Y3uLZmTkWyGVmnCW@pendragon.ideasonboard.com>","date":"2022-11-21T14:29:58","subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Nick,\n\nThank you for the patch.\n\nOn Mon, Nov 21, 2022 at 02:21:05PM +0000, Nick Hollinghurst via libcamera-devel wrote:\n> No existing Algorithm used the base pause(), resume() functions\n> or the paused_ flag, nor is there a need or a generic pause API.\n> Remove these. The AGC and AWB algorithms now have methods named\n> disableAuto(), enableAuto() which better describe their functionality.\n> \n> Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>\n> ---\n>  src/ipa/raspberrypi/controller/agc_algorithm.h |  2 ++\n>  src/ipa/raspberrypi/controller/algorithm.h     |  6 +-----\n>  src/ipa/raspberrypi/controller/awb_algorithm.h |  2 ++\n>  src/ipa/raspberrypi/controller/controller.cpp  |  6 ++----\n>  src/ipa/raspberrypi/controller/rpi/agc.cpp     | 13 ++++---------\n>  src/ipa/raspberrypi/controller/rpi/agc.h       |  6 ++----\n>  src/ipa/raspberrypi/controller/rpi/awb.cpp     | 11 +++--------\n>  src/ipa/raspberrypi/controller/rpi/awb.h       |  6 ++----\n>  src/ipa/raspberrypi/raspberrypi.cpp            | 14 ++++++++------\n>  9 files changed, 26 insertions(+), 40 deletions(-)\n> \n> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> index 3a91444c..36e6c110 100644\n> --- a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> @@ -26,6 +26,8 @@ public:\n>   virtual void setMeteringMode(std::string const &meteringModeName) = 0;\n>   virtual void setExposureMode(std::string const &exposureModeName) = 0;\n>   virtual void setConstraintMode(std::string const &contraintModeName) = 0;\n> + virtual void enableAuto() = 0;\n> + virtual void disableAuto() = 0;\n\nIt looks like your mail client and/or server mess up with white space. I\nrecommend using git-send-email to send patches, you will avoid lots of\ntrouble.\n\n>  };\n> \n>  } /* namespace RPiController */\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.h\n> b/src/ipa/raspberrypi/controller/algorithm.h\n> index cbbb13ba..4f327598 100644\n> --- a/src/ipa/raspberrypi/controller/algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/algorithm.h\n> @@ -27,14 +27,11 @@ class Algorithm\n>  {\n>  public:\n>   Algorithm(Controller *controller)\n> - : controller_(controller), paused_(false)\n> + : controller_(controller)\n>   {\n>   }\n>   virtual ~Algorithm() = default;\n>   virtual char const *name() const = 0;\n> - virtual bool isPaused() const { return paused_; }\n> - virtual void pause() { paused_ = true; }\n> - virtual void resume() { paused_ = false; }\n>   virtual int read(const libcamera::YamlObject &params);\n>   virtual void initialise();\n>   virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata);\n> @@ -47,7 +44,6 @@ public:\n> \n>  private:\n>   Controller *controller_;\n> - bool paused_;\n>  };\n> \n>  /*\n> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> index 48e08b60..8462c4db 100644\n> --- a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> @@ -18,6 +18,8 @@ public:\n>   virtual unsigned int getConvergenceFrames() const = 0;\n>   virtual void setMode(std::string const &modeName) = 0;\n>   virtual void setManualGains(double manualR, double manualB) = 0;\n> + virtual void enableAuto() = 0;\n> + virtual void disableAuto() = 0;\n>  };\n> \n>  } /* namespace RPiController */\n> diff --git a/src/ipa/raspberrypi/controller/controller.cpp\n> b/src/ipa/raspberrypi/controller/controller.cpp\n> index f4892786..e9156785 100644\n> --- a/src/ipa/raspberrypi/controller/controller.cpp\n> +++ b/src/ipa/raspberrypi/controller/controller.cpp\n> @@ -108,16 +108,14 @@ void Controller::prepare(Metadata *imageMetadata)\n>  {\n>   assert(switchModeCalled_);\n>   for (auto &algo : algorithms_)\n> - if (!algo->isPaused())\n> - algo->prepare(imageMetadata);\n> + algo->prepare(imageMetadata);\n>  }\n> \n>  void Controller::process(StatisticsPtr stats, Metadata *imageMetadata)\n>  {\n>   assert(switchModeCalled_);\n>   for (auto &algo : algorithms_)\n> - if (!algo->isPaused())\n> - algo->process(stats, imageMetadata);\n> + algo->process(stats, imageMetadata);\n>  }\n> \n>  Metadata &Controller::getGlobalMetadata()\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> index bd54a639..a30e50c1 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> @@ -270,18 +270,13 @@ int Agc::read(const libcamera::YamlObject &params)\n>   return 0;\n>  }\n> \n> -bool Agc::isPaused() const\n> -{\n> - return false;\n> -}\n> -\n> -void Agc::pause()\n> +void Agc::disableAuto()\n>  {\n>   fixedShutter_ = status_.shutterTime;\n>   fixedAnalogueGain_ = status_.analogueGain;\n>  }\n> \n> -void Agc::resume()\n> +void Agc::enableAuto()\n>  {\n>   fixedShutter_ = 0s;\n>   fixedAnalogueGain_ = 0;\n> @@ -317,14 +312,14 @@ void Agc::setMaxShutter(Duration maxShutter)\n>  void Agc::setFixedShutter(Duration fixedShutter)\n>  {\n>   fixedShutter_ = fixedShutter;\n> - /* Set this in case someone calls Pause() straight after. */\n> + /* Set this in case someone calls disableAuto() straight after. */\n>   status_.shutterTime = clipShutter(fixedShutter_);\n>  }\n> \n>  void Agc::setFixedAnalogueGain(double fixedAnalogueGain)\n>  {\n>   fixedAnalogueGain_ = fixedAnalogueGain;\n> - /* Set this in case someone calls Pause() straight after. */\n> + /* Set this in case someone calls disableAuto() straight after. */\n>   status_.analogueGain = fixedAnalogueGain;\n>  }\n> \n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h\n> b/src/ipa/raspberrypi/controller/rpi/agc.h\n> index 6d6b0e5a..cf04da19 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.h\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.h\n> @@ -75,10 +75,6 @@ public:\n>   Agc(Controller *controller);\n>   char const *name() const override;\n>   int read(const libcamera::YamlObject &params) override;\n> - /* AGC handles \"pausing\" for itself. */\n> - bool isPaused() const override;\n> - void pause() override;\n> - void resume() override;\n>   unsigned int getConvergenceFrames() const override;\n>   void setEv(double ev) override;\n>   void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;\n> @@ -88,6 +84,8 @@ public:\n>   void setMeteringMode(std::string const &meteringModeName) override;\n>   void setExposureMode(std::string const &exposureModeName) override;\n>   void setConstraintMode(std::string const &contraintModeName) override;\n> + void enableAuto() override;\n> + void disableAuto() override;\n>   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n>   void prepare(Metadata *imageMetadata) override;\n>   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> index 8d8ddf09..4f6af4ba 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> @@ -222,21 +222,16 @@ void Awb::initialise()\n>   asyncResults_ = syncResults_;\n>  }\n> \n> -bool Awb::isPaused() const\n> +void Awb::disableAuto()\n>  {\n> - return false;\n> -}\n> -\n> -void Awb::pause()\n> -{\n> - /* \"Pause\" by fixing everything to the most recent values. */\n> + /* Freeze the most recent values, and treat them as manual gains */\n>   manualR_ = syncResults_.gainR = prevSyncResults_.gainR;\n>   manualB_ = syncResults_.gainB = prevSyncResults_.gainB;\n>   syncResults_.gainG = prevSyncResults_.gainG;\n>   syncResults_.temperatureK = prevSyncResults_.temperatureK;\n>  }\n> \n> -void Awb::resume()\n> +void Awb::enableAuto()\n>  {\n>   manualR_ = 0.0;\n>   manualB_ = 0.0;\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h\n> b/src/ipa/raspberrypi/controller/rpi/awb.h\n> index 30acd89d..2254c3ed 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.h\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.h\n> @@ -93,13 +93,11 @@ public:\n>   char const *name() const override;\n>   void initialise() override;\n>   int read(const libcamera::YamlObject &params) override;\n> - /* AWB handles \"pausing\" for itself. */\n> - bool isPaused() const override;\n> - void pause() override;\n> - void resume() override;\n>   unsigned int getConvergenceFrames() const override;\n>   void setMode(std::string const &name) override;\n>   void setManualGains(double manualR, double manualB) override;\n> + void enableAuto() override;\n> + void disableAuto() override;\n>   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n>   void prepare(Metadata *imageMetadata) override;\n>   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> b/src/ipa/raspberrypi/raspberrypi.cpp\n> index b74f1ecf..beb076dc 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -706,7 +706,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n> \n>   switch (ctrl.first) {\n>   case controls::AE_ENABLE: {\n> - RPiController::Algorithm *agc = controller_.getAlgorithm(\"agc\");\n> + RPiController::AgcAlgorithm *agc =\n> dynamic_cast<RPiController::AgcAlgorithm *>(\n> + controller_.getAlgorithm(\"agc\"));\n>   if (!agc) {\n>   LOG(IPARPI, Warning)\n>   << \"Could not set AE_ENABLE - no AGC algorithm\";\n> @@ -714,9 +715,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n> \n>   if (ctrl.second.get<bool>() == false)\n> - agc->pause();\n> + agc->disableAuto();\n>   else\n> - agc->resume();\n> + agc->enableAuto();\n> \n>   libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>());\n>   break;\n> @@ -835,7 +836,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n> \n>   case controls::AWB_ENABLE: {\n> - RPiController::Algorithm *awb = controller_.getAlgorithm(\"awb\");\n> + RPiController::AwbAlgorithm *awb =\n> dynamic_cast<RPiController::AwbAlgorithm *>(\n> + controller_.getAlgorithm(\"awb\"));\n>   if (!awb) {\n>   LOG(IPARPI, Warning)\n>   << \"Could not set AWB_ENABLE - no AWB algorithm\";\n> @@ -843,9 +845,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n> \n>   if (ctrl.second.get<bool>() == false)\n> - awb->pause();\n> + awb->disableAuto();\n>   else\n> - awb->resume();\n> + awb->enableAuto();\n> \n>   libcameraMetadata_.set(controls::AwbEnable,\n>          ctrl.second.get<bool>());","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 AEDF4BE08B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 21 Nov 2022 14:30:15 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0A59063311;\n\tMon, 21 Nov 2022 15:30:15 +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 00ED663097\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Nov 2022 15:30:13 +0100 (CET)","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 6B2BD2D9;\n\tMon, 21 Nov 2022 15:30:13 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669041015;\n\tbh=yPpTQMjQd6ohOn7gmUA+MMhhwk0kCIvPjJmddgQakjo=;\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=DuR/nYJ8Q6v4mmSgsJDgY9nxzm4B4fiI8aiwSYXhyHXjUPWcV/svzOZasQZXdZmKH\n\tX75zdrCt7VKy8ir4n3K/QvkNyd7cLziCtnkALu11vkzrriCUWhvh5fQPsQLjMovdg8\n\t1r/Ns1XkReXOcU4umN/cZb0IN/w74Ek21fPbFPAz/HN7A8cymDdmzDAPQiAcTCTHQj\n\tWgob+ci9Hby6qC0hcnp/XLB1kYf16L5n4/tOZxNwsw9vpprgRtALRDzP36MCwPY1of\n\t1OXhB3GgDRTZNXJvmhgswuEVbU6rFgB53aNKofXJJyoKMsFM+4IGgLiQXrRdfYjR57\n\tyOgexP7USthBQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1669041013;\n\tbh=yPpTQMjQd6ohOn7gmUA+MMhhwk0kCIvPjJmddgQakjo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=TTxgF7GtRW+tql6uFrDjklLIMyNFH9CNqonv91JblqwoMXqEPP1vBJLa0+fMceFCx\n\tDvoJimKWquDzlx4NgjUm5S5Bv6av7pIxOyxXQgalHlxlkLXHw0wVMnigdZM//pS344\n\tM/JWm7/0CvRHyBTus5iO6UP5bHmciJsHDmaFELBg="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"TTxgF7Gt\"; dkim-atps=neutral","Date":"Mon, 21 Nov 2022 16:29:58 +0200","To":"Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>","Message-ID":"<Y3uLZmTkWyGVmnCW@pendragon.ideasonboard.com>","References":"<CAPhyPA6Wm-kdAm8LVoO3Mz+88=P3-0FiAa0VZi9qLVmNei9KBQ@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CAPhyPA6Wm-kdAm8LVoO3Mz+88=P3-0FiAa0VZi9qLVmNei9KBQ@mail.gmail.com>","Subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@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>"}},{"id":25838,"web_url":"https://patchwork.libcamera.org/comment/25838/","msgid":"<CAHW6GYJsHKVTmx9nSes7bObVtfaN3bcN8BGgPq4dKDsC+3myJg@mail.gmail.com>","date":"2022-11-21T14:31:27","subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Nick\n\nThanks for the patch! Just a couple of nit-picks... (sorry!)\n\nFirstly, the first line of the commit message would normally be \"ipa:\nraspberrypi: ...\" to follow the established pattern.\n\nSecondly, the indentation doesn't look the same as other patches. Not\nsure what's happened there or if it's a problem? But the content all\nlooks fine to me.\n\nThanks!\nDavid\n\nOn Mon, 21 Nov 2022 at 14:21, Nick Hollinghurst via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> No existing Algorithm used the base pause(), resume() functions\n> or the paused_ flag, nor is there a need or a generic pause API.\n> Remove these. The AGC and AWB algorithms now have methods named\n> disableAuto(), enableAuto() which better describe their functionality.\n>\n> Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>\n> ---\n>  src/ipa/raspberrypi/controller/agc_algorithm.h |  2 ++\n>  src/ipa/raspberrypi/controller/algorithm.h     |  6 +-----\n>  src/ipa/raspberrypi/controller/awb_algorithm.h |  2 ++\n>  src/ipa/raspberrypi/controller/controller.cpp  |  6 ++----\n>  src/ipa/raspberrypi/controller/rpi/agc.cpp     | 13 ++++---------\n>  src/ipa/raspberrypi/controller/rpi/agc.h       |  6 ++----\n>  src/ipa/raspberrypi/controller/rpi/awb.cpp     | 11 +++--------\n>  src/ipa/raspberrypi/controller/rpi/awb.h       |  6 ++----\n>  src/ipa/raspberrypi/raspberrypi.cpp            | 14 ++++++++------\n>  9 files changed, 26 insertions(+), 40 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> index 3a91444c..36e6c110 100644\n> --- a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> @@ -26,6 +26,8 @@ public:\n>   virtual void setMeteringMode(std::string const &meteringModeName) = 0;\n>   virtual void setExposureMode(std::string const &exposureModeName) = 0;\n>   virtual void setConstraintMode(std::string const &contraintModeName) = 0;\n> + virtual void enableAuto() = 0;\n> + virtual void disableAuto() = 0;\n>  };\n>\n>  } /* namespace RPiController */\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.h\n> b/src/ipa/raspberrypi/controller/algorithm.h\n> index cbbb13ba..4f327598 100644\n> --- a/src/ipa/raspberrypi/controller/algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/algorithm.h\n> @@ -27,14 +27,11 @@ class Algorithm\n>  {\n>  public:\n>   Algorithm(Controller *controller)\n> - : controller_(controller), paused_(false)\n> + : controller_(controller)\n>   {\n>   }\n>   virtual ~Algorithm() = default;\n>   virtual char const *name() const = 0;\n> - virtual bool isPaused() const { return paused_; }\n> - virtual void pause() { paused_ = true; }\n> - virtual void resume() { paused_ = false; }\n>   virtual int read(const libcamera::YamlObject &params);\n>   virtual void initialise();\n>   virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata);\n> @@ -47,7 +44,6 @@ public:\n>\n>  private:\n>   Controller *controller_;\n> - bool paused_;\n>  };\n>\n>  /*\n> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> index 48e08b60..8462c4db 100644\n> --- a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> +++ b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> @@ -18,6 +18,8 @@ public:\n>   virtual unsigned int getConvergenceFrames() const = 0;\n>   virtual void setMode(std::string const &modeName) = 0;\n>   virtual void setManualGains(double manualR, double manualB) = 0;\n> + virtual void enableAuto() = 0;\n> + virtual void disableAuto() = 0;\n>  };\n>\n>  } /* namespace RPiController */\n> diff --git a/src/ipa/raspberrypi/controller/controller.cpp\n> b/src/ipa/raspberrypi/controller/controller.cpp\n> index f4892786..e9156785 100644\n> --- a/src/ipa/raspberrypi/controller/controller.cpp\n> +++ b/src/ipa/raspberrypi/controller/controller.cpp\n> @@ -108,16 +108,14 @@ void Controller::prepare(Metadata *imageMetadata)\n>  {\n>   assert(switchModeCalled_);\n>   for (auto &algo : algorithms_)\n> - if (!algo->isPaused())\n> - algo->prepare(imageMetadata);\n> + algo->prepare(imageMetadata);\n>  }\n>\n>  void Controller::process(StatisticsPtr stats, Metadata *imageMetadata)\n>  {\n>   assert(switchModeCalled_);\n>   for (auto &algo : algorithms_)\n> - if (!algo->isPaused())\n> - algo->process(stats, imageMetadata);\n> + algo->process(stats, imageMetadata);\n>  }\n>\n>  Metadata &Controller::getGlobalMetadata()\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> index bd54a639..a30e50c1 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> @@ -270,18 +270,13 @@ int Agc::read(const libcamera::YamlObject &params)\n>   return 0;\n>  }\n>\n> -bool Agc::isPaused() const\n> -{\n> - return false;\n> -}\n> -\n> -void Agc::pause()\n> +void Agc::disableAuto()\n>  {\n>   fixedShutter_ = status_.shutterTime;\n>   fixedAnalogueGain_ = status_.analogueGain;\n>  }\n>\n> -void Agc::resume()\n> +void Agc::enableAuto()\n>  {\n>   fixedShutter_ = 0s;\n>   fixedAnalogueGain_ = 0;\n> @@ -317,14 +312,14 @@ void Agc::setMaxShutter(Duration maxShutter)\n>  void Agc::setFixedShutter(Duration fixedShutter)\n>  {\n>   fixedShutter_ = fixedShutter;\n> - /* Set this in case someone calls Pause() straight after. */\n> + /* Set this in case someone calls disableAuto() straight after. */\n>   status_.shutterTime = clipShutter(fixedShutter_);\n>  }\n>\n>  void Agc::setFixedAnalogueGain(double fixedAnalogueGain)\n>  {\n>   fixedAnalogueGain_ = fixedAnalogueGain;\n> - /* Set this in case someone calls Pause() straight after. */\n> + /* Set this in case someone calls disableAuto() straight after. */\n>   status_.analogueGain = fixedAnalogueGain;\n>  }\n>\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h\n> b/src/ipa/raspberrypi/controller/rpi/agc.h\n> index 6d6b0e5a..cf04da19 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.h\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.h\n> @@ -75,10 +75,6 @@ public:\n>   Agc(Controller *controller);\n>   char const *name() const override;\n>   int read(const libcamera::YamlObject &params) override;\n> - /* AGC handles \"pausing\" for itself. */\n> - bool isPaused() const override;\n> - void pause() override;\n> - void resume() override;\n>   unsigned int getConvergenceFrames() const override;\n>   void setEv(double ev) override;\n>   void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;\n> @@ -88,6 +84,8 @@ public:\n>   void setMeteringMode(std::string const &meteringModeName) override;\n>   void setExposureMode(std::string const &exposureModeName) override;\n>   void setConstraintMode(std::string const &contraintModeName) override;\n> + void enableAuto() override;\n> + void disableAuto() override;\n>   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n>   void prepare(Metadata *imageMetadata) override;\n>   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> index 8d8ddf09..4f6af4ba 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> @@ -222,21 +222,16 @@ void Awb::initialise()\n>   asyncResults_ = syncResults_;\n>  }\n>\n> -bool Awb::isPaused() const\n> +void Awb::disableAuto()\n>  {\n> - return false;\n> -}\n> -\n> -void Awb::pause()\n> -{\n> - /* \"Pause\" by fixing everything to the most recent values. */\n> + /* Freeze the most recent values, and treat them as manual gains */\n>   manualR_ = syncResults_.gainR = prevSyncResults_.gainR;\n>   manualB_ = syncResults_.gainB = prevSyncResults_.gainB;\n>   syncResults_.gainG = prevSyncResults_.gainG;\n>   syncResults_.temperatureK = prevSyncResults_.temperatureK;\n>  }\n>\n> -void Awb::resume()\n> +void Awb::enableAuto()\n>  {\n>   manualR_ = 0.0;\n>   manualB_ = 0.0;\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h\n> b/src/ipa/raspberrypi/controller/rpi/awb.h\n> index 30acd89d..2254c3ed 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.h\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.h\n> @@ -93,13 +93,11 @@ public:\n>   char const *name() const override;\n>   void initialise() override;\n>   int read(const libcamera::YamlObject &params) override;\n> - /* AWB handles \"pausing\" for itself. */\n> - bool isPaused() const override;\n> - void pause() override;\n> - void resume() override;\n>   unsigned int getConvergenceFrames() const override;\n>   void setMode(std::string const &name) override;\n>   void setManualGains(double manualR, double manualB) override;\n> + void enableAuto() override;\n> + void disableAuto() override;\n>   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n>   void prepare(Metadata *imageMetadata) override;\n>   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> b/src/ipa/raspberrypi/raspberrypi.cpp\n> index b74f1ecf..beb076dc 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -706,7 +706,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n>\n>   switch (ctrl.first) {\n>   case controls::AE_ENABLE: {\n> - RPiController::Algorithm *agc = controller_.getAlgorithm(\"agc\");\n> + RPiController::AgcAlgorithm *agc =\n> dynamic_cast<RPiController::AgcAlgorithm *>(\n> + controller_.getAlgorithm(\"agc\"));\n>   if (!agc) {\n>   LOG(IPARPI, Warning)\n>   << \"Could not set AE_ENABLE - no AGC algorithm\";\n> @@ -714,9 +715,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n>\n>   if (ctrl.second.get<bool>() == false)\n> - agc->pause();\n> + agc->disableAuto();\n>   else\n> - agc->resume();\n> + agc->enableAuto();\n>\n>   libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>());\n>   break;\n> @@ -835,7 +836,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n>\n>   case controls::AWB_ENABLE: {\n> - RPiController::Algorithm *awb = controller_.getAlgorithm(\"awb\");\n> + RPiController::AwbAlgorithm *awb =\n> dynamic_cast<RPiController::AwbAlgorithm *>(\n> + controller_.getAlgorithm(\"awb\"));\n>   if (!awb) {\n>   LOG(IPARPI, Warning)\n>   << \"Could not set AWB_ENABLE - no AWB algorithm\";\n> @@ -843,9 +845,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n>   }\n>\n>   if (ctrl.second.get<bool>() == false)\n> - awb->pause();\n> + awb->disableAuto();\n>   else\n> - awb->resume();\n> + awb->enableAuto();\n>\n>   libcameraMetadata_.set(controls::AwbEnable,\n>          ctrl.second.get<bool>());\n> --\n> 2.20.1","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 E0C8EBE08B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 21 Nov 2022 14:31:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AC26763311;\n\tMon, 21 Nov 2022 15:31:42 +0100 (CET)","from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com\n\t[IPv6:2607:f8b0:4864:20::62a])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8642663097\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Nov 2022 15:31:40 +0100 (CET)","by mail-pl1-x62a.google.com with SMTP id p21so10737796plr.7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Nov 2022 06:31:40 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669041102;\n\tbh=FtMIua6MjR+210hcu+6wrzJiV3LE3WT+OJ260Uh8R4I=;\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=d1bM/uGalJYGPyg85LlA4db0SCSDTgCgw1cXwmwLNnX3F4mDteXLRs3kP/OisHYdG\n\tXeqkX27LEr5MFAylUcOnalIOBnuBP7O4WuoXUouiGbMOOk0ieYr+heYrphysrjQhsP\n\toZDrzKin8iWYqv3nfsOU1vX+teOgansMJzYu8W/PZu+9yKfMAmKq2Xjh4F1whM3Gp7\n\taRnR37J0I0tI27Kl/fMBl7QDhG2NGpO0C8nX2S6XXXv5Wy3F/2qjuJ51xwXtIIDPOa\n\tVO0tDD/GG4XP9liP6eTKKFPsK8VueA+56WMxToUGWBer/68nuQxbJVejnh7Qh3N2c5\n\tLV3z5YpglCkWg==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\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=1g61R2CS5mcns9QJEOU/Hrgk3F0kQgcF47dCWVxGHlw=;\n\tb=AZfPhgvwgtM8vCdae4DBDQzoJjqYoghwrYdjMjX8fm8uKMwUA8XvaXIu5YebBg/9gj\n\tTwNlfcha1YwKwQeFhDLYXvva/S4w6GcqA30mYxFg3OvWHpNtWBeSGUt4LYP4AW47Imni\n\twTdiWt+cN1eK7AHTkMlkjs0GK2nhbjBID8B4fBRng0LuH5OSe/bh7XJZPGA7SFe5XVKA\n\tdWtMD6SNdU5uqalB34JbvhHhBXrmQyai0x3DHSNFZI58i2BFylw1rZTxfIs+Rj+7aIak\n\tFgWgwTUgcCvzyAEHtuDxV/mFnNhes7MtVm+fkVb2+tWspDxwHFnB0igtCOUpcTQyTOcb\n\tQlmw=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"AZfPhgvw\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\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=1g61R2CS5mcns9QJEOU/Hrgk3F0kQgcF47dCWVxGHlw=;\n\tb=olO+Y1y2UkD0MZM2fT+TpIpCHuPMaMvVBf3RY+sMQ0jbXMHtByAoQ/jcME8JxMurtt\n\tgP3XwJ0+Z8eH9VCvmX2HOVQ1xM5i8UDh29yBf8nS7Sieq/EBJg99XUlhNUngCuqQDiE6\n\tnz1H+MOFKMiMs3XUmTkVF0DNgcy+1AG1Sqkz/hPTwfWjI/9LLNbPZ9/Hsk10v3Bc6UcT\n\t/1TxmC+6HyN9IT3LAJcTVoMoRo5ASn8DUDw1jYOzPS6wSiIhj+G4vj/vscF9OS0Kjoox\n\tEGlFYkrxDcvh3SkL/1fLalirFOf8/Ww2z1BvL1cjlzwKrejBBPQ9dhx/ZZHlxQYfmIc5\n\tby5w==","X-Gm-Message-State":"ANoB5pkl9f4zmc9lbl1IHO+cm1pFcWRfvDhcSsaFAEBJFtXE0LRcrHh3\n\tf/c7jrKa2GFWsAF3/emIQ5+cXex5+qATa4Vi3mpAmiXCFOA=","X-Google-Smtp-Source":"AA0mqf6Q9qt3xdPFhNzkxd0+A+ZOYsFWPs0vVr93HkL3FJ4TyTQ+rR6k2B/1oOQ4L89Z7ce37Kxkjm6uFetfeQSGKgQ=","X-Received":"by 2002:a17:902:b20f:b0:188:d4ea:251f with SMTP id\n\tt15-20020a170902b20f00b00188d4ea251fmr12074075plr.36.1669041098799;\n\tMon, 21 Nov 2022 06:31:38 -0800 (PST)","MIME-Version":"1.0","References":"<CAPhyPA6Wm-kdAm8LVoO3Mz+88=P3-0FiAa0VZi9qLVmNei9KBQ@mail.gmail.com>","In-Reply-To":"<CAPhyPA6Wm-kdAm8LVoO3Mz+88=P3-0FiAa0VZi9qLVmNei9KBQ@mail.gmail.com>","Date":"Mon, 21 Nov 2022 14:31:27 +0000","Message-ID":"<CAHW6GYJsHKVTmx9nSes7bObVtfaN3bcN8BGgPq4dKDsC+3myJg@mail.gmail.com>","To":"Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","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":25839,"web_url":"https://patchwork.libcamera.org/comment/25839/","msgid":"<CAPhyPA6y9WD4_zcYV_WtKDU-wLZPZETb6FHf7GQHccrSUTe9vg@mail.gmail.com>","date":"2022-11-21T14:38:03","subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","submitter":{"id":130,"url":"https://patchwork.libcamera.org/api/people/130/","name":"Nick Hollinghurst","email":"nick.hollinghurst@raspberrypi.com"},"content":"Whoops. I will try that again...\n\nThanks,\n\n Nick\n\nOn Mon, 21 Nov 2022 at 14:30, Laurent Pinchart\n<laurent.pinchart@ideasonboard.com> wrote:\n>\n> Hi Nick,\n>\n> Thank you for the patch.\n>\n> On Mon, Nov 21, 2022 at 02:21:05PM +0000, Nick Hollinghurst via libcamera-devel wrote:\n> > No existing Algorithm used the base pause(), resume() functions\n> > or the paused_ flag, nor is there a need or a generic pause API.\n> > Remove these. The AGC and AWB algorithms now have methods named\n> > disableAuto(), enableAuto() which better describe their functionality.\n> >\n> > Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>\n> > ---\n> >  src/ipa/raspberrypi/controller/agc_algorithm.h |  2 ++\n> >  src/ipa/raspberrypi/controller/algorithm.h     |  6 +-----\n> >  src/ipa/raspberrypi/controller/awb_algorithm.h |  2 ++\n> >  src/ipa/raspberrypi/controller/controller.cpp  |  6 ++----\n> >  src/ipa/raspberrypi/controller/rpi/agc.cpp     | 13 ++++---------\n> >  src/ipa/raspberrypi/controller/rpi/agc.h       |  6 ++----\n> >  src/ipa/raspberrypi/controller/rpi/awb.cpp     | 11 +++--------\n> >  src/ipa/raspberrypi/controller/rpi/awb.h       |  6 ++----\n> >  src/ipa/raspberrypi/raspberrypi.cpp            | 14 ++++++++------\n> >  9 files changed, 26 insertions(+), 40 deletions(-)\n> >\n> > diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> > b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> > index 3a91444c..36e6c110 100644\n> > --- a/src/ipa/raspberrypi/controller/agc_algorithm.h\n> > +++ b/src/ipa/raspberrypi/controller/agc_algorithm.h\n> > @@ -26,6 +26,8 @@ public:\n> >   virtual void setMeteringMode(std::string const &meteringModeName) = 0;\n> >   virtual void setExposureMode(std::string const &exposureModeName) = 0;\n> >   virtual void setConstraintMode(std::string const &contraintModeName) = 0;\n> > + virtual void enableAuto() = 0;\n> > + virtual void disableAuto() = 0;\n>\n> It looks like your mail client and/or server mess up with white space. I\n> recommend using git-send-email to send patches, you will avoid lots of\n> trouble.\n>\n> >  };\n> >\n> >  } /* namespace RPiController */\n> > diff --git a/src/ipa/raspberrypi/controller/algorithm.h\n> > b/src/ipa/raspberrypi/controller/algorithm.h\n> > index cbbb13ba..4f327598 100644\n> > --- a/src/ipa/raspberrypi/controller/algorithm.h\n> > +++ b/src/ipa/raspberrypi/controller/algorithm.h\n> > @@ -27,14 +27,11 @@ class Algorithm\n> >  {\n> >  public:\n> >   Algorithm(Controller *controller)\n> > - : controller_(controller), paused_(false)\n> > + : controller_(controller)\n> >   {\n> >   }\n> >   virtual ~Algorithm() = default;\n> >   virtual char const *name() const = 0;\n> > - virtual bool isPaused() const { return paused_; }\n> > - virtual void pause() { paused_ = true; }\n> > - virtual void resume() { paused_ = false; }\n> >   virtual int read(const libcamera::YamlObject &params);\n> >   virtual void initialise();\n> >   virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata);\n> > @@ -47,7 +44,6 @@ public:\n> >\n> >  private:\n> >   Controller *controller_;\n> > - bool paused_;\n> >  };\n> >\n> >  /*\n> > diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> > b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> > index 48e08b60..8462c4db 100644\n> > --- a/src/ipa/raspberrypi/controller/awb_algorithm.h\n> > +++ b/src/ipa/raspberrypi/controller/awb_algorithm.h\n> > @@ -18,6 +18,8 @@ public:\n> >   virtual unsigned int getConvergenceFrames() const = 0;\n> >   virtual void setMode(std::string const &modeName) = 0;\n> >   virtual void setManualGains(double manualR, double manualB) = 0;\n> > + virtual void enableAuto() = 0;\n> > + virtual void disableAuto() = 0;\n> >  };\n> >\n> >  } /* namespace RPiController */\n> > diff --git a/src/ipa/raspberrypi/controller/controller.cpp\n> > b/src/ipa/raspberrypi/controller/controller.cpp\n> > index f4892786..e9156785 100644\n> > --- a/src/ipa/raspberrypi/controller/controller.cpp\n> > +++ b/src/ipa/raspberrypi/controller/controller.cpp\n> > @@ -108,16 +108,14 @@ void Controller::prepare(Metadata *imageMetadata)\n> >  {\n> >   assert(switchModeCalled_);\n> >   for (auto &algo : algorithms_)\n> > - if (!algo->isPaused())\n> > - algo->prepare(imageMetadata);\n> > + algo->prepare(imageMetadata);\n> >  }\n> >\n> >  void Controller::process(StatisticsPtr stats, Metadata *imageMetadata)\n> >  {\n> >   assert(switchModeCalled_);\n> >   for (auto &algo : algorithms_)\n> > - if (!algo->isPaused())\n> > - algo->process(stats, imageMetadata);\n> > + algo->process(stats, imageMetadata);\n> >  }\n> >\n> >  Metadata &Controller::getGlobalMetadata()\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > index bd54a639..a30e50c1 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> > @@ -270,18 +270,13 @@ int Agc::read(const libcamera::YamlObject &params)\n> >   return 0;\n> >  }\n> >\n> > -bool Agc::isPaused() const\n> > -{\n> > - return false;\n> > -}\n> > -\n> > -void Agc::pause()\n> > +void Agc::disableAuto()\n> >  {\n> >   fixedShutter_ = status_.shutterTime;\n> >   fixedAnalogueGain_ = status_.analogueGain;\n> >  }\n> >\n> > -void Agc::resume()\n> > +void Agc::enableAuto()\n> >  {\n> >   fixedShutter_ = 0s;\n> >   fixedAnalogueGain_ = 0;\n> > @@ -317,14 +312,14 @@ void Agc::setMaxShutter(Duration maxShutter)\n> >  void Agc::setFixedShutter(Duration fixedShutter)\n> >  {\n> >   fixedShutter_ = fixedShutter;\n> > - /* Set this in case someone calls Pause() straight after. */\n> > + /* Set this in case someone calls disableAuto() straight after. */\n> >   status_.shutterTime = clipShutter(fixedShutter_);\n> >  }\n> >\n> >  void Agc::setFixedAnalogueGain(double fixedAnalogueGain)\n> >  {\n> >   fixedAnalogueGain_ = fixedAnalogueGain;\n> > - /* Set this in case someone calls Pause() straight after. */\n> > + /* Set this in case someone calls disableAuto() straight after. */\n> >   status_.analogueGain = fixedAnalogueGain;\n> >  }\n> >\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h\n> > b/src/ipa/raspberrypi/controller/rpi/agc.h\n> > index 6d6b0e5a..cf04da19 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/agc.h\n> > +++ b/src/ipa/raspberrypi/controller/rpi/agc.h\n> > @@ -75,10 +75,6 @@ public:\n> >   Agc(Controller *controller);\n> >   char const *name() const override;\n> >   int read(const libcamera::YamlObject &params) override;\n> > - /* AGC handles \"pausing\" for itself. */\n> > - bool isPaused() const override;\n> > - void pause() override;\n> > - void resume() override;\n> >   unsigned int getConvergenceFrames() const override;\n> >   void setEv(double ev) override;\n> >   void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;\n> > @@ -88,6 +84,8 @@ public:\n> >   void setMeteringMode(std::string const &meteringModeName) override;\n> >   void setExposureMode(std::string const &exposureModeName) override;\n> >   void setConstraintMode(std::string const &contraintModeName) override;\n> > + void enableAuto() override;\n> > + void disableAuto() override;\n> >   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n> >   void prepare(Metadata *imageMetadata) override;\n> >   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > index 8d8ddf09..4f6af4ba 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > @@ -222,21 +222,16 @@ void Awb::initialise()\n> >   asyncResults_ = syncResults_;\n> >  }\n> >\n> > -bool Awb::isPaused() const\n> > +void Awb::disableAuto()\n> >  {\n> > - return false;\n> > -}\n> > -\n> > -void Awb::pause()\n> > -{\n> > - /* \"Pause\" by fixing everything to the most recent values. */\n> > + /* Freeze the most recent values, and treat them as manual gains */\n> >   manualR_ = syncResults_.gainR = prevSyncResults_.gainR;\n> >   manualB_ = syncResults_.gainB = prevSyncResults_.gainB;\n> >   syncResults_.gainG = prevSyncResults_.gainG;\n> >   syncResults_.temperatureK = prevSyncResults_.temperatureK;\n> >  }\n> >\n> > -void Awb::resume()\n> > +void Awb::enableAuto()\n> >  {\n> >   manualR_ = 0.0;\n> >   manualB_ = 0.0;\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h\n> > b/src/ipa/raspberrypi/controller/rpi/awb.h\n> > index 30acd89d..2254c3ed 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/awb.h\n> > +++ b/src/ipa/raspberrypi/controller/rpi/awb.h\n> > @@ -93,13 +93,11 @@ public:\n> >   char const *name() const override;\n> >   void initialise() override;\n> >   int read(const libcamera::YamlObject &params) override;\n> > - /* AWB handles \"pausing\" for itself. */\n> > - bool isPaused() const override;\n> > - void pause() override;\n> > - void resume() override;\n> >   unsigned int getConvergenceFrames() const override;\n> >   void setMode(std::string const &name) override;\n> >   void setManualGains(double manualR, double manualB) override;\n> > + void enableAuto() override;\n> > + void disableAuto() override;\n> >   void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;\n> >   void prepare(Metadata *imageMetadata) override;\n> >   void process(StatisticsPtr &stats, Metadata *imageMetadata) override;\n> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> > b/src/ipa/raspberrypi/raspberrypi.cpp\n> > index b74f1ecf..beb076dc 100644\n> > --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> > +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> > @@ -706,7 +706,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n> >\n> >   switch (ctrl.first) {\n> >   case controls::AE_ENABLE: {\n> > - RPiController::Algorithm *agc = controller_.getAlgorithm(\"agc\");\n> > + RPiController::AgcAlgorithm *agc =\n> > dynamic_cast<RPiController::AgcAlgorithm *>(\n> > + controller_.getAlgorithm(\"agc\"));\n> >   if (!agc) {\n> >   LOG(IPARPI, Warning)\n> >   << \"Could not set AE_ENABLE - no AGC algorithm\";\n> > @@ -714,9 +715,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n> >   }\n> >\n> >   if (ctrl.second.get<bool>() == false)\n> > - agc->pause();\n> > + agc->disableAuto();\n> >   else\n> > - agc->resume();\n> > + agc->enableAuto();\n> >\n> >   libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>());\n> >   break;\n> > @@ -835,7 +836,8 @@ void IPARPi::queueRequest(const ControlList &controls)\n> >   }\n> >\n> >   case controls::AWB_ENABLE: {\n> > - RPiController::Algorithm *awb = controller_.getAlgorithm(\"awb\");\n> > + RPiController::AwbAlgorithm *awb =\n> > dynamic_cast<RPiController::AwbAlgorithm *>(\n> > + controller_.getAlgorithm(\"awb\"));\n> >   if (!awb) {\n> >   LOG(IPARPI, Warning)\n> >   << \"Could not set AWB_ENABLE - no AWB algorithm\";\n> > @@ -843,9 +845,9 @@ void IPARPi::queueRequest(const ControlList &controls)\n> >   }\n> >\n> >   if (ctrl.second.get<bool>() == false)\n> > - awb->pause();\n> > + awb->disableAuto();\n> >   else\n> > - awb->resume();\n> > + awb->enableAuto();\n> >\n> >   libcameraMetadata_.set(controls::AwbEnable,\n> >          ctrl.second.get<bool>());\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 4E7D5BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 21 Nov 2022 14:38:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A47DA6331A;\n\tMon, 21 Nov 2022 15:38:16 +0100 (CET)","from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com\n\t[IPv6:2607:f8b0:4864:20::b2f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9A06063097\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Nov 2022 15:38:15 +0100 (CET)","by mail-yb1-xb2f.google.com with SMTP id y83so5691502yby.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 21 Nov 2022 06:38:15 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1669041496;\n\tbh=5EzYBwD0bsWLy/qoXHC2iG3BWaLG/na2DdBKKIeJYTM=;\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=L9rpU0vtpkumDRQthgKV4AUWYdBsQSCwAUkQAFT/lHzUs9awUpag9X29qiwl5EmuY\n\tGbk/NJAbhrH/8UN8+xbvlTir7CahDyVMbRbNxm+VWdTxUYCo4KEyzVuNOQVs1aQgpa\n\tnEDnOBz+0G5kULP6xgqCRLJAdGSyp3hBLXKYEM/wQUUZMmfhWmzE4ajGx/QFSR4Xii\n\twFnTw4a56uY+v07LAjcGq2DAmukQ3iJIHwh3Zqp9bsORk9o1pu2uo9dt2JEpK39ScN\n\tOZdX4PZugo+DQeWTxO+FhjeA/Gwg7nuv9PhYU2knIwErfGdc3kLc737D2XHpZ6pSin\n\tWhvpQ5bsQI5Aw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\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=D4ZAxiQC4vy/69qCJHhrRimY3TkSeoI9XOoKTFVamhk=;\n\tb=sSLo//T2TJhhPNOh1DKdSW3HW53qINC+Wm46xbgzfAkKF45zwNZVJrNWcvSO5nu29A\n\tsrObqhjgN+7qI++kknMVZRVIXQv8Q73AEwQPvoeYONbHIaOtLyC30cOlJjWHMCtGla5C\n\tPGVsp0r9zyQZyrgV2YCtriigRXas7BarESq6gqwVDnsi8Ka1agQpy+c2MaAbFO8oGpHd\n\tzBRX7WvELYavrzRyX3NUk27jR6lnHyL9d0IfEttNjWvEY52Fapw3SX0LByzhqf75boAx\n\t2e/G8fxnkO1jQvK5SczFq+0grtusMp06TqTTXtTFr0k4WBt9TQ8s6NlRBuLkwpkH2Im/\n\tf2yw=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"sSLo//T2\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\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=D4ZAxiQC4vy/69qCJHhrRimY3TkSeoI9XOoKTFVamhk=;\n\tb=zs7q5ur/a9ZI7omiENkCo1uoG/Z1lY0/GQ+sIF8jYLMNu0LvqsrMSx6hLlZxABp7M0\n\tD9iIDSeQZ+Ow5e2olN1KcD3CIqSu1XjAhfFuYOlDW7ef71yyPKaQt88hpRVeNYTBeeeq\n\tfdW1Zy8Ha7A2wgic408YbSBrvVVp7/+1gZecZflF+irzN6Rk0IYQwzSXUwHB747AqYWM\n\t7aXPAAhfAWzF398pKR8oKXaMbTcHDagKuj3lE1iLTWkZXIbxdPqlDvt2ykYNOt+b+0MQ\n\tYyuy9JIOED4r0ZASXLrBfDzkCdHKcmgTgK5vnFl91zJjgF1c75ferLtUW4faShg2bles\n\tcuwA==","X-Gm-Message-State":"ANoB5pmgokjUs3or2H0z9Knegdwau2uanVftiu7p5g3LDxw5Q/tEein1\n\tfyQokSMgvhHaIbgHqxfjwx+InkOiiEBJOPchwPQmkrH63zE=","X-Google-Smtp-Source":"AA0mqf6Sx89G+J7GomkXAjvNG2vyJOMsXlNBwiQ+LYaiqaxKx0aQuNK6uP2qK4nS5w49+EtWRITzdWYxlL2PWdkXwrM=","X-Received":"by 2002:a25:ae12:0:b0:6d0:704:f19f with SMTP id\n\ta18-20020a25ae12000000b006d00704f19fmr1758064ybj.191.1669041494192;\n\tMon, 21 Nov 2022 06:38:14 -0800 (PST)","MIME-Version":"1.0","References":"<CAPhyPA6Wm-kdAm8LVoO3Mz+88=P3-0FiAa0VZi9qLVmNei9KBQ@mail.gmail.com>\n\t<Y3uLZmTkWyGVmnCW@pendragon.ideasonboard.com>","In-Reply-To":"<Y3uLZmTkWyGVmnCW@pendragon.ideasonboard.com>","Date":"Mon, 21 Nov 2022 14:38:03 +0000","Message-ID":"<CAPhyPA6y9WD4_zcYV_WtKDU-wLZPZETb6FHf7GQHccrSUTe9vg@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH 1/1] ipa/raspberrypi: Remove generic\n\t\"pause\" mechanism from Algorithm","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":"Nick Hollinghurst via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Nick Hollinghurst <nick.hollinghurst@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>"}}]