pipeline: rkisp1: Move ControlInfoMap to IPA module

Currently the pipeline handler advertises controls handled by the IPA
from a ControlInfoMap it manually constructs. This is wrong, as the IPA
module is the component that knows what controls it supports. Fix this
by moving the ControlInfoMap construction to the IPA module, and pass it
to the pipeline handler as a return value from the IPA init() function.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Florian Sylvestre <fsylvestre@baylibre.com>
This commit is contained in:
Laurent Pinchart 2022-08-02 02:28:44 +03:00
parent 502ab9a146
commit 961a6cf7ca
3 changed files with 30 additions and 33 deletions

View file

@ -46,7 +46,8 @@ namespace ipa::rkisp1 {
class IPARkISP1 : public IPARkISP1Interface, public Module
{
public:
int init(const IPASettings &settings, unsigned int hwRevision) override;
int init(const IPASettings &settings, unsigned int hwRevision,
ControlInfoMap *ipaControls) override;
int start() override;
void stop() override {}
@ -89,12 +90,27 @@ private:
struct IPAContext context_;
};
namespace {
/* List of controls handled by the RkISP1 IPA */
const ControlInfoMap::Map rkisp1Controls{
{ &controls::AeEnable, ControlInfo(false, true) },
{ &controls::Brightness, ControlInfo(-1.0f, 0.993f) },
{ &controls::Contrast, ControlInfo(0.0f, 1.993f) },
{ &controls::Saturation, ControlInfo(0.0f, 1.993f) },
{ &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) },
{ &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) },
};
} /* namespace */
std::string IPARkISP1::logPrefix() const
{
return "rkisp1";
}
int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision)
int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision,
ControlInfoMap *ipaControls)
{
/* \todo Add support for other revisions */
switch (hwRevision) {
@ -155,7 +171,15 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision)
return -EINVAL;
}
return createAlgorithms(context_, (*data)["algorithms"]);
int ret = createAlgorithms(context_, (*data)["algorithms"]);
if (ret)
return ret;
/* Return the controls handled by the IPA. */
ControlInfoMap::Map ctrlMap = rkisp1Controls;
*ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls);
return 0;
}
int IPARkISP1::start()