[libcamera-devel] [PATCH 1/2] ipa: rpi: black_level: Add an initialValues method
Naushir Patuck
naush at raspberrypi.com
Thu Dec 7 11:43:53 CET 2023
Hi David,
Thank you for your work.
On Wed, 6 Dec 2023 at 10:38, David Plowman via libcamera-devel
<libcamera-devel at lists.libcamera.org> wrote:
>
> 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 at raspberrypi.com>
Looks reasonable to me!
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> .../rpi/controller/black_level_algorithm.h | 23 +++++++++++++++++++
> src/ipa/rpi/controller/rpi/black_level.cpp | 10 +++++++-
> src/ipa/rpi/controller/rpi/black_level.h | 6 +++--
> 3 files changed, 36 insertions(+), 3 deletions(-)
> create mode 100644 src/ipa/rpi/controller/black_level_algorithm.h
>
> diff --git a/src/ipa/rpi/controller/black_level_algorithm.h b/src/ipa/rpi/controller/black_level_algorithm.h
> new file mode 100644
> index 00000000..c2cff2f5
> --- /dev/null
> +++ b/src/ipa/rpi/controller/black_level_algorithm.h
> @@ -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 */
> diff --git a/src/ipa/rpi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp
> index 85baec3f..2e3db51f 100644
> --- a/src/ipa/rpi/controller/rpi/black_level.cpp
> +++ b/src/ipa/rpi/controller/rpi/black_level.cpp
> @@ -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 ¶ms)
> 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)
> {
> /*
> diff --git a/src/ipa/rpi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h
> index 2403f7f7..d8c41c62 100644
> --- a/src/ipa/rpi/controller/rpi/black_level.h
> +++ b/src/ipa/rpi/controller/rpi/black_level.h
> @@ -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 ¶ms) override;
> + void initialValues(uint16_t &blackLevelR, uint16_t &blackLevelG,
> + uint16_t &blackLevelB) override;
> void prepare(Metadata *imageMetadata) override;
>
> private:
> --
> 2.39.2
>
More information about the libcamera-devel
mailing list