ipa: raspberrypi: Add a DenoiseAlgorithm class to the Controller
This denoise algorithm class will be used to pass in the user requested denoise operating mode to the controller. The existing Denoise controller will derive from this new DenoiseAlgorithm class. Add a denoise mode field in the denoise status metadata object for the IPA to use when configuring the ISP. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
44ea5b65c8
commit
c9e1ef7bd2
4 changed files with 37 additions and 3 deletions
23
src/ipa/raspberrypi/controller/denoise_algorithm.hpp
Normal file
23
src/ipa/raspberrypi/controller/denoise_algorithm.hpp
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
/*
|
||||
* Copyright (C) 2021, Raspberry Pi (Trading) Limited
|
||||
*
|
||||
* denoise.hpp - Denoise control algorithm interface
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "algorithm.hpp"
|
||||
|
||||
namespace RPiController {
|
||||
|
||||
enum class DenoiseMode { Off, ColourOff, ColourFast, ColourHighQuality };
|
||||
|
||||
class DenoiseAlgorithm : public Algorithm
|
||||
{
|
||||
public:
|
||||
DenoiseAlgorithm(Controller *controller) : Algorithm(controller) {}
|
||||
// A Denoise algorithm must provide the following:
|
||||
virtual void SetMode(DenoiseMode mode) = 0;
|
||||
};
|
||||
|
||||
} // namespace RPiController
|
|
@ -16,6 +16,7 @@ struct DenoiseStatus {
|
|||
double noise_constant;
|
||||
double noise_slope;
|
||||
double strength;
|
||||
unsigned int mode;
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
/*
|
||||
* Copyright (C) 2019, Raspberry Pi (Trading) Limited
|
||||
* Copyright (C) 2019-2021, Raspberry Pi (Trading) Limited
|
||||
*
|
||||
* sdn.cpp - SDN (spatial denoise) control algorithm
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@ LOG_DEFINE_CATEGORY(RPiSdn)
|
|||
#define NAME "rpi.sdn"
|
||||
|
||||
Sdn::Sdn(Controller *controller)
|
||||
: Algorithm(controller)
|
||||
: DenoiseAlgorithm(controller), mode_(DenoiseMode::ColourOff)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -53,6 +53,7 @@ void Sdn::Prepare(Metadata *image_metadata)
|
|||
status.noise_constant = noise_status.noise_constant * deviation_;
|
||||
status.noise_slope = noise_status.noise_slope * deviation_;
|
||||
status.strength = strength_;
|
||||
status.mode = static_cast<std::underlying_type_t<DenoiseMode>>(mode_);
|
||||
image_metadata->Set("denoise.status", status);
|
||||
LOG(RPiSdn, Debug)
|
||||
<< "programmed constant " << status.noise_constant
|
||||
|
@ -60,6 +61,12 @@ void Sdn::Prepare(Metadata *image_metadata)
|
|||
<< " strength " << status.strength;
|
||||
}
|
||||
|
||||
void Sdn::SetMode(DenoiseMode mode)
|
||||
{
|
||||
// We only distinguish between off and all other modes.
|
||||
mode_ = mode;
|
||||
}
|
||||
|
||||
// Register algorithm with the system.
|
||||
static Algorithm *Create(Controller *controller)
|
||||
{
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "../algorithm.hpp"
|
||||
#include "../denoise_algorithm.hpp"
|
||||
|
||||
namespace RPiController {
|
||||
|
||||
// Algorithm to calculate correct spatial denoise (SDN) settings.
|
||||
|
||||
class Sdn : public Algorithm
|
||||
class Sdn : public DenoiseAlgorithm
|
||||
{
|
||||
public:
|
||||
Sdn(Controller *controller = NULL);
|
||||
|
@ -20,10 +21,12 @@ public:
|
|||
void Read(boost::property_tree::ptree const ¶ms) override;
|
||||
void Initialise() override;
|
||||
void Prepare(Metadata *image_metadata) override;
|
||||
void SetMode(DenoiseMode mode) override;
|
||||
|
||||
private:
|
||||
double deviation_;
|
||||
double strength_;
|
||||
DenoiseMode mode_;
|
||||
};
|
||||
|
||||
} // namespace RPiController
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue