[libcamera-devel] [PATCH v2 3/5] ipa: rkisp1: Add support of Lens Shading Correction control
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sun Jul 24 23:24:34 CEST 2022
Hi Florian,
Thank you for the patch.
On Fri, Jul 22, 2022 at 05:16:33PM +0200, Florian Sylvestre via libcamera-devel wrote:
> The Lens Shading Correction algorithm applies a correction on the pixels based
> on values defined in the YAML tuning file.
Let's make that a but more descriptive:
The Lens Shading Correction algorithm applies multipliers to all pixels
to compensate for the lens shading effect. The coefficients are
specified in a downscaled table in the YAML tuning file.
> Signed-off-by: Florian Sylvestre <fsylvestre at baylibre.com>
> ---
> src/ipa/rkisp1/algorithms/lsc.cpp | 170 ++++++++++++++++++++++++++
> src/ipa/rkisp1/algorithms/lsc.h | 38 ++++++
> src/ipa/rkisp1/algorithms/meson.build | 1 +
> src/ipa/rkisp1/data/ov5640.yaml | 79 ++++++++++++
> src/ipa/rkisp1/ipa_context.h | 1 +
> src/ipa/rkisp1/rkisp1.cpp | 2 +
> 6 files changed, 291 insertions(+)
> create mode 100644 src/ipa/rkisp1/algorithms/lsc.cpp
> create mode 100644 src/ipa/rkisp1/algorithms/lsc.h
>
> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
> new file mode 100644
> index 00000000..8a53bc74
> --- /dev/null
> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp
> @@ -0,0 +1,170 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021-2022, Ideas On Board
> + *
> + * lsc.cpp - RkISP1 Lens Shading Correction control
> + */
> +
> +#include "lsc.h"
> +
> +#include <math.h>
#include <cmath>
as the math functions in std:: use C++ overloads to automatically adjust
to the argument type, which is less error-prone. You'll need to use
std::round() below instead of round().
> +
> +#include <libcamera/base/log.h>
> +
> +#include "libcamera/internal/yaml_parser.h"
> +
> +#include "linux/rkisp1-config.h"
> +
> +/**
> + * \file lsc.h
> + */
> +
> +namespace libcamera {
> +
> +namespace ipa::rkisp1::algorithms {
> +
> +/**
> + * \class LensShadingCorrection
> + * \brief RkISP1 Lens Shading Correction control
> + *
> + * Due to the optical characteristics of the lens, the light intensity received
> + * by the sensor is not uniform.
> + *
> + * The Lens Shading Correction algorithm applies a correction on the pixels for
> + * each component based on measurement done during the camera tuning process.
> + */
> +
> +LOG_DEFINE_CATEGORY(RkISP1Lsc)
> +
> +LensShadingCorrection::LensShadingCorrection()
> + : initialized_(false)
> +{
> +}
> +
> +/**
> + * \copydoc libcamera::ipa::Algorithm::init
> + */
> +int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,
> + const YamlObject &tuningData)
> +{
> + xSize_ = tuningData["x-size"].getList<double>();
> + if (xSize_.size() != RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'x-size'"
> + << "in tuning file (list size:"
> + << xSize_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE << ")";
To match patch 2/5,
<< "Invalid 'x-size' values: expected "
<< RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE
<< " elements, got " << xSize_.size();
Same below.
> + return -EINVAL;
> + }
> +
> + ySize_ = tuningData["y-size"].getList<double>();
> + if (ySize_.size() != RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'y-size'"
> + << "in tuning file (list size:"
> + << ySize_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE << ")";
> + return -EINVAL;
> + }
> +
static constexpr kLscNumSamples = RKISP1_CIF_ISP_LSC_SAMPLES_MAX
* RKISP1_CIF_ISP_LSC_SAMPLES_MAX;
would allow reducing the size of quite a few lines below.
> + rData_ = tuningData["r"].getList<uint16_t>();
> + if (rData_.size() != RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'r'"
> + << "in tuning file (list size:"
> + << rData_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX << ")";
> + return -EINVAL;
> + }
> +
> + grData_ = tuningData["gr"].getList<uint16_t>();
> + if (grData_.size() != RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'gr'"
> + << "in tuning file (list size:"
> + << grData_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX << ")";
> + return -EINVAL;
> + }
> +
> + gbData_ = tuningData["gb"].getList<uint16_t>();
> + if (gbData_.size() != RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'gb'"
> + << "in tuning file (list size:"
> + << gbData_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX << ")";
> + return -EINVAL;
> + }
> +
> + bData_ = tuningData["b"].getList<uint16_t>();
> + if (bData_.size() != RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX) {
> + LOG(RkISP1Lsc, Error)
> + << "Issue while parsing 'b'"
> + << "in tuning file (list size:"
> + << bData_.size() << "/"
> + << RKISP1_CIF_ISP_LSC_SAMPLES_MAX * RKISP1_CIF_ISP_LSC_SAMPLES_MAX << ")";
> + return -EINVAL;
> + }
> +
> + initialized_ = true;
> +
> + return 0;
> +}
> +
> +/**
> + * \copydoc libcamera::ipa::Algorithm::prepare
> + */
> +void LensShadingCorrection::prepare(IPAContext &context,
> + rkisp1_params_cfg *params)
> +{
> + if (context.frameContext.frameCount > 0)
> + return;
> +
> + if (!initialized_)
> + return;
> +
> + Size total_size{};
s/total_size/totalSize/
> +
> + for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE; ++i) {
> + struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> + Size &size = context.configuration.sensor.size;
const
The two variables should be moved outside of the loop as they don't
depend on i.
> +
> + config.x_size_tbl[i] = xSize_[i] * size.width;
> + config.y_size_tbl[i] = ySize_[i] * size.height;
> + total_size.width += config.x_size_tbl[i];
> + total_size.height += config.y_size_tbl[i];
> +
> + /*
> + * To prevent unexpected behavior of the ISP, the sum of x_size_tbl and
> + * y_size_tbl items shall be equal to respectively size.width/2 and
> + * size.height/2. Enforce it by computing the last tables value.
I'd mention that this is done to avoid rouding-related errors (see
below).
> + */
> + if (i == RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE - 1) {
> + config.x_size_tbl[i] += total_size.width - size.width / 2;
> + config.y_size_tbl[i] += total_size.height - size.height / 2;
> + }
Instead of adjusting the value, you could also simply compute it.
config.x_size_tbl[i] = xSize_[i] * size.width;
config.y_size_tbl[i] = ySize_[i] * size.height;
/*
* To prevent unexpected behavior of the ISP, the sum of x_size_tbl and
* y_size_tbl items shall be equal to respectively size.width/2 and
* size.height/2. Enforce it by computing the last tables value to avoid
* rounding-indiced errors.
*/
if (i == RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE - 1) {
config.x_size_tbl[i] = size.width / 2 - total_size.width;
config.y_size_tbl[i] = size.height / 2 - total_size.height;
}
total_size.width += config.x_size_tbl[i];
total_size.height += config.y_size_tbl[i];
which would allow you to add, after the loop, a
ASSERT(size == total_size);
> +
> + config.x_grad_tbl[i] = round(32768 / config.x_size_tbl[i]);
> + config.y_grad_tbl[i] = round(32768 / config.y_size_tbl[i]);
> + }
This should probably be done in configure() later when we'll implement
adaptive lens shading correction support, as the sizes and gradients
won't change per frame, but that's for latter.
> +
> + std::copy(rData_.begin(), rData_.end(),
> + ¶ms->others.lsc_config.r_data_tbl[0][0]);
> + std::copy(grData_.begin(), grData_.end(),
> + ¶ms->others.lsc_config.gr_data_tbl[0][0]);
> + std::copy(gbData_.begin(), gbData_.end(),
> + ¶ms->others.lsc_config.gb_data_tbl[0][0]);
> + std::copy(bData_.begin(), bData_.end(),
> + ¶ms->others.lsc_config.b_data_tbl[0][0]);
> +
> + params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;
> + params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;
> + params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;
> +}
> +
> +REGISTER_IPA_ALGORITHM(LensShadingCorrection, "LensShadingCorrection")
> +
> +} /* namespace ipa::rkisp1::algorithms */
> +
> +} /* namespace libcamera */
> diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h
> new file mode 100644
> index 00000000..fdb2ec1d
> --- /dev/null
> +++ b/src/ipa/rkisp1/algorithms/lsc.h
> @@ -0,0 +1,38 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021-2022, Ideas On Board
> + *
> + * lsc.h - RkISP1 Lens Shading Correction control
> + */
> +
> +#pragma once
> +
> +#include "algorithm.h"
> +
> +namespace libcamera {
> +
> +namespace ipa::rkisp1::algorithms {
> +
> +class LensShadingCorrection : public Algorithm
> +{
> +public:
> + LensShadingCorrection();
> + ~LensShadingCorrection() = default;
> +
> + int init(IPAContext &context, const YamlObject &tuningData) override;
> + void prepare(IPAContext &context, rkisp1_params_cfg *params) override;
> +
> +private:
> + bool initialized_;
> +
> + std::vector<uint16_t> rData_;
> + std::vector<uint16_t> grData_;
> + std::vector<uint16_t> gbData_;
> + std::vector<uint16_t> bData_;
> +
> + std::vector<double> xSize_;
> + std::vector<double> ySize_;
> +};
> +
> +} /* namespace ipa::rkisp1::algorithms */
> +} /* namespace libcamera */
> diff --git a/src/ipa/rkisp1/algorithms/meson.build b/src/ipa/rkisp1/algorithms/meson.build
> index 0597c353..64e11dce 100644
> --- a/src/ipa/rkisp1/algorithms/meson.build
> +++ b/src/ipa/rkisp1/algorithms/meson.build
> @@ -5,4 +5,5 @@ rkisp1_ipa_algorithms = files([
> 'awb.cpp',
> 'blc.cpp',
> 'gsl.cpp',
> + 'lsc.cpp',
> ])
> diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> index 13f76412..fa2ae436 100644
> --- a/src/ipa/rkisp1/data/ov5640.yaml
> +++ b/src/ipa/rkisp1/data/ov5640.yaml
> @@ -16,4 +16,83 @@ algorithms:
> red: [ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4095 ]
> green: [ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4095 ]
> blue: [ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4095 ]
> + - LensShadingCorrection:
> + x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> + y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> + r: [
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + ]
> + gr: [
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + ]
> + gb: [
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + ]
> + b: [
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> + ]
> ...
> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
> index f387cace..3bfb262c 100644
> --- a/src/ipa/rkisp1/ipa_context.h
> +++ b/src/ipa/rkisp1/ipa_context.h
> @@ -33,6 +33,7 @@ struct IPASessionConfiguration {
>
> struct {
> utils::Duration lineDuration;
> + Size size;
This fields need to be documented in src/ipa/rkisp1/ipa_context.cpp.
> } sensor;
>
> struct {
> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> index 1c002939..af0f43f2 100644
> --- a/src/ipa/rkisp1/rkisp1.cpp
> +++ b/src/ipa/rkisp1/rkisp1.cpp
> @@ -32,6 +32,7 @@
> #include "algorithms/awb.h"
> #include "algorithms/blc.h"
> #include "algorithms/gsl.h"
> +#include "algorithms/lsc.h"
I think you can drop this.
> #include "libipa/camera_sensor_helper.h"
>
> #include "ipa_context.h"
> @@ -212,6 +213,7 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,
> /* Set the hardware revision for the algorithms. */
> context_.configuration.hw.revision = hwRevision_;
>
> + context_.configuration.sensor.size = info.outputSize;
> context_.configuration.sensor.lineDuration = info.lineLength * 1.0s / info.pixelRate;
>
> /*
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list