[{"id":14993,"web_url":"https://patchwork.libcamera.org/comment/14993/","msgid":"<YBxpGdO3hSa/OCYh@pendragon.ideasonboard.com>","date":"2021-02-04T21:37:29","subject":"Re: [libcamera-devel] [PATCH v5 5/6] ipa: raspberrypi: Add a\n\tDenoiseAlgorithm class to the Controller","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Fri, Jan 29, 2021 at 03:11:53PM +0000, Naushir Patuck wrote:\n> This denoise algorithm class will be used to pass in the user requested\n> denoise operating mode to the controller. The existing Denoise\n> controller will derive from this new DenoiseAlgorithm class.\n> \n> Add a denoise mode field in the denoise status metadata object for the\n> IPA to use when configuring the ISP.\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> Reviewed-by: David Plowman <david.plowman@raspberrypi.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  .../controller/denoise_algorithm.hpp          | 23 +++++++++++++++++++\n>  .../raspberrypi/controller/denoise_status.h   |  1 +\n>  src/ipa/raspberrypi/controller/rpi/sdn.cpp    | 11 +++++++--\n>  src/ipa/raspberrypi/controller/rpi/sdn.hpp    |  5 +++-\n>  4 files changed, 37 insertions(+), 3 deletions(-)\n>  create mode 100644 src/ipa/raspberrypi/controller/denoise_algorithm.hpp\n> \n> diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.hpp b/src/ipa/raspberrypi/controller/denoise_algorithm.hpp\n> new file mode 100644\n> index 000000000000..39fcd7e94df2\n> --- /dev/null\n> +++ b/src/ipa/raspberrypi/controller/denoise_algorithm.hpp\n> @@ -0,0 +1,23 @@\n> +/* SPDX-License-Identifier: BSD-2-Clause */\n> +/*\n> + * Copyright (C) 2021, Raspberry Pi (Trading) Limited\n> + *\n> + * denoise.hpp - Denoise control algorithm interface\n> + */\n> +#pragma once\n> +\n> +#include \"algorithm.hpp\"\n> +\n> +namespace RPiController {\n> +\n> +enum class DenoiseMode { Off, ColourOff, ColourFast, ColourHighQuality };\n> +\n> +class DenoiseAlgorithm : public Algorithm\n> +{\n> +public:\n> +\tDenoiseAlgorithm(Controller *controller) : Algorithm(controller) {}\n> +\t// A Denoise algorithm must provide the following:\n> +\tvirtual void SetMode(DenoiseMode mode) = 0;\n> +};\n> +\n> +} // namespace RPiController\n> diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/raspberrypi/controller/denoise_status.h\n> index 06d7cfb91ae8..6064cc2c192e 100644\n> --- a/src/ipa/raspberrypi/controller/denoise_status.h\n> +++ b/src/ipa/raspberrypi/controller/denoise_status.h\n> @@ -16,6 +16,7 @@ struct DenoiseStatus {\n>  \tdouble noise_constant;\n>  \tdouble noise_slope;\n>  \tdouble strength;\n> +\tunsigned int mode;\n>  };\n>  \n>  #ifdef __cplusplus\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/raspberrypi/controller/rpi/sdn.cpp\n> index d8c1521a6633..8e66fc7ec8ac 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/sdn.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/sdn.cpp\n> @@ -1,6 +1,6 @@\n>  /* SPDX-License-Identifier: BSD-2-Clause */\n>  /*\n> - * Copyright (C) 2019, Raspberry Pi (Trading) Limited\n> + * Copyright (C) 2019-2021, Raspberry Pi (Trading) Limited\n>   *\n>   * sdn.cpp - SDN (spatial denoise) control algorithm\n>   */\n> @@ -18,7 +18,7 @@ using namespace RPiController;\n>  #define NAME \"rpi.sdn\"\n>  \n>  Sdn::Sdn(Controller *controller)\n> -\t: Algorithm(controller)\n> +\t: DenoiseAlgorithm(controller), mode_(DenoiseMode::ColourOff)\n>  {\n>  }\n>  \n> @@ -48,6 +48,7 @@ void Sdn::Prepare(Metadata *image_metadata)\n>  \tstatus.noise_constant = noise_status.noise_constant * deviation_;\n>  \tstatus.noise_slope = noise_status.noise_slope * deviation_;\n>  \tstatus.strength = strength_;\n> +\tstatus.mode = static_cast<std::underlying_type_t<DenoiseMode>>(mode_);\n>  \timage_metadata->Set(\"denoise.status\", status);\n>  \tRPI_LOG(\"Sdn: programmed constant \" << status.noise_constant\n>  \t\t\t\t\t    << \" slope \" << status.noise_slope\n> @@ -55,6 +56,12 @@ void Sdn::Prepare(Metadata *image_metadata)\n>  \t\t\t\t\t    << status.strength);\n>  }\n>  \n> +void Sdn::SetMode(DenoiseMode mode)\n> +{\n> +\t// We only distinguish between off and all other modes.\n> +\tmode_ = mode;\n> +}\n> +\n>  // Register algorithm with the system.\n>  static Algorithm *Create(Controller *controller)\n>  {\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.hpp b/src/ipa/raspberrypi/controller/rpi/sdn.hpp\n> index 486c000d7b77..2371ce04163f 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/sdn.hpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/sdn.hpp\n> @@ -7,12 +7,13 @@\n>  #pragma once\n>  \n>  #include \"../algorithm.hpp\"\n> +#include \"../denoise_algorithm.hpp\"\n>  \n>  namespace RPiController {\n>  \n>  // Algorithm to calculate correct spatial denoise (SDN) settings.\n>  \n> -class Sdn : public Algorithm\n> +class Sdn : public DenoiseAlgorithm\n>  {\n>  public:\n>  \tSdn(Controller *controller = NULL);\n> @@ -20,10 +21,12 @@ public:\n>  \tvoid Read(boost::property_tree::ptree const &params) override;\n>  \tvoid Initialise() override;\n>  \tvoid Prepare(Metadata *image_metadata) override;\n> +\tvoid SetMode(DenoiseMode mode) override;\n>  \n>  private:\n>  \tdouble deviation_;\n>  \tdouble strength_;\n> +\tDenoiseMode mode_;\n>  };\n>  \n>  } // namespace RPiController","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 31BEDBD160\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  4 Feb 2021 21:37:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F270B6146D;\n\tThu,  4 Feb 2021 22:37:53 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BC84261430\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  4 Feb 2021 22:37:51 +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 4BE4A45D;\n\tThu,  4 Feb 2021 22:37:51 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"RBcF6APh\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1612474671;\n\tbh=74R097tFKDQu1pUqgoGXhXXx303yHFyUkQIo12y3EJw=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=RBcF6APhvjQo1AgNS1gLs8IV2eeYipkEFOi9ycWURaCpyf9SehI6llmcrm1ExP8Ew\n\tmuiHkYmlVaPfrfHtVDQsg6cwpgb/9vQXEmksMoVSRXSlH+BX5iwHZYnr9hyVNQDxuE\n\tYHHTzxap2/nQUF++DyEs5M2zTVSmwh33Z+ErRhWs=","Date":"Thu, 4 Feb 2021 23:37:29 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<YBxpGdO3hSa/OCYh@pendragon.ideasonboard.com>","References":"<20210129151154.1051163-1-naush@raspberrypi.com>\n\t<20210129151154.1051163-6-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20210129151154.1051163-6-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH v5 5/6] ipa: raspberrypi: Add a\n\tDenoiseAlgorithm class to the Controller","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","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]