ipa: rpi: black_level: Add an initialValues method

This allows the IPA to discover the correct black level values even
before any frames have been processed. This is important on the PiSP
platform where the front end black level blocks must be programmed in
advance.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
David Plowman 2023-12-06 10:38:38 +00:00 committed by Kieran Bingham
parent e71d63ce1b
commit 8892d937c5
3 changed files with 36 additions and 3 deletions

View file

@ -0,0 +1,23 @@
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (C) 2023, Raspberry Pi Ltd
*
* black_level_algorithm.h - black level control algorithm interface
*/
#pragma once
#include "algorithm.h"
namespace RPiController {
class BlackLevelAlgorithm : public Algorithm
{
public:
BlackLevelAlgorithm(Controller *controller)
: Algorithm(controller) {}
/* A black level algorithm must provide the following: */
virtual void initialValues(uint16_t &blackLevelR, uint16_t &blackLevelG,
uint16_t &blackLevelB) = 0;
};
} /* namespace RPiController */

View file

@ -22,7 +22,7 @@ LOG_DEFINE_CATEGORY(RPiBlackLevel)
#define NAME "rpi.black_level"
BlackLevel::BlackLevel(Controller *controller)
: Algorithm(controller)
: BlackLevelAlgorithm(controller)
{
}
@ -45,6 +45,14 @@ int BlackLevel::read(const libcamera::YamlObject &params)
return 0;
}
void BlackLevel::initialValues(uint16_t &blackLevelR, uint16_t &blackLevelG,
uint16_t &blackLevelB)
{
blackLevelR = blackLevelR_;
blackLevelG = blackLevelG_;
blackLevelB = blackLevelB_;
}
void BlackLevel::prepare(Metadata *imageMetadata)
{
/*

View file

@ -6,19 +6,21 @@
*/
#pragma once
#include "../algorithm.h"
#include "../black_level_algorithm.h"
#include "../black_level_status.h"
/* This is our implementation of the "black level algorithm". */
namespace RPiController {
class BlackLevel : public Algorithm
class BlackLevel : public BlackLevelAlgorithm
{
public:
BlackLevel(Controller *controller);
char const *name() const override;
int read(const libcamera::YamlObject &params) override;
void initialValues(uint16_t &blackLevelR, uint16_t &blackLevelG,
uint16_t &blackLevelB) override;
void prepare(Metadata *imageMetadata) override;
private: