[PATCH v1 06/11] ipa: rkisp1: Use the new ISP parameters abstraction
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jul 4 15:38:34 CEST 2024
On Thu, Jul 04, 2024 at 02:33:19PM +0200, Jacopo Mondi wrote:
> Hi Laurent
>
> only one comment on dpf which is the only one with a more convoluted
> handling. The rest looks very nice!
>
> On Thu, Jul 04, 2024 at 01:52:25AM GMT, Laurent Pinchart wrote:
> > Use the new ISP parameters abstraction class RkISP1Params to access the
> > ISP parameters in the IPA algorithms. The class replaces the pointer to
> > the rkisp1_params_cfg structure passed to the algorithms' prepare()
> > function, and is used to access individual parameters blocks.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > src/ipa/rkisp1/algorithms/agc.cpp | 46 +++++++++++------------
> > src/ipa/rkisp1/algorithms/agc.h | 2 +-
> > src/ipa/rkisp1/algorithms/awb.cpp | 56 ++++++++++++----------------
> > src/ipa/rkisp1/algorithms/awb.h | 2 +-
> > src/ipa/rkisp1/algorithms/blc.cpp | 18 ++++-----
> > src/ipa/rkisp1/algorithms/blc.h | 3 +-
> > src/ipa/rkisp1/algorithms/ccm.cpp | 14 ++-----
> > src/ipa/rkisp1/algorithms/ccm.h | 4 +-
> > src/ipa/rkisp1/algorithms/cproc.cpp | 13 +++----
> > src/ipa/rkisp1/algorithms/cproc.h | 2 +-
> > src/ipa/rkisp1/algorithms/dpcc.cpp | 9 ++---
> > src/ipa/rkisp1/algorithms/dpcc.h | 2 +-
> > src/ipa/rkisp1/algorithms/dpf.cpp | 28 +++++++-------
> > src/ipa/rkisp1/algorithms/dpf.h | 2 +-
> > src/ipa/rkisp1/algorithms/filter.cpp | 51 ++++++++++++-------------
> > src/ipa/rkisp1/algorithms/filter.h | 2 +-
> > src/ipa/rkisp1/algorithms/goc.cpp | 15 ++++----
> > src/ipa/rkisp1/algorithms/goc.h | 2 +-
> > src/ipa/rkisp1/algorithms/gsl.cpp | 20 ++++------
> > src/ipa/rkisp1/algorithms/gsl.h | 2 +-
> > src/ipa/rkisp1/algorithms/lsc.cpp | 27 ++++++--------
> > src/ipa/rkisp1/algorithms/lsc.h | 4 +-
> > src/ipa/rkisp1/module.h | 3 +-
> > src/ipa/rkisp1/rkisp1.cpp | 12 ++----
> > 24 files changed, 148 insertions(+), 191 deletions(-)
> >
> > diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
>
> [snip]
>
> > diff --git a/src/ipa/rkisp1/algorithms/dpf.cpp b/src/ipa/rkisp1/algorithms/dpf.cpp
> > index abf957288550..b3f4446631fc 100644
> > --- a/src/ipa/rkisp1/algorithms/dpf.cpp
> > +++ b/src/ipa/rkisp1/algorithms/dpf.cpp
> > @@ -215,15 +215,26 @@ void Dpf::queueRequest(IPAContext &context,
> > * \copydoc libcamera::ipa::Algorithm::prepare
> > */
> > void Dpf::prepare(IPAContext &context, const uint32_t frame,
> > - IPAFrameContext &frameContext, rkisp1_params_cfg *params)
> > + IPAFrameContext &frameContext, RkISP1Params *params)
> > {
> > + if (!frameContext.dpf.update && frame > 0)
> > + return;
> > +
> > + RkISP1Params::State state = frameContext.dpf.denoise
> > + ? RkISP1Params::State::Enable
> > + : RkISP1Params::State::Disable;
> > + auto config = params->block<Block::Dpf>(state);
> > +
> > if (frame == 0) {
> > - params->others.dpf_config = config_;
> > - params->others.dpf_strength_config = strengthConfig_;
> > + auto strengthConfig = params->block<Block::DpfStrength>(state);
>
> The dpf strength handler in the kernel ignores the enable state, and
> strengths are configured only when frame == 0, so I would use Enable
> here for clarity (even if it has not practical differences).
OK.
> > + *strengthConfig = strengthConfig_;
> > +
> > + *config = config_;
>
> This, however needs to be done everytime we enable the block. The
> driver sees that state == enable and programs the dpf block with the
> content of the config structure. If frame > 0 &&
> frameContext.dpf.denoise == true, the kernel will program the block
> with 0-initialized data if I read it right.
>
> I would set *config = config_ for all frames if dpf.update &&
> dpf.denoise ?
Yes there's an issue indeed.
This leads to an annoying question: do we need the ability to
enable/disable blocks without reconfiguring them ?
> >
> > const auto &awb = context.configuration.awb;
> > const auto &lsc = context.configuration.lsc;
> > - auto &mode = params->others.dpf_config.gain.mode;
> > +
> > + auto &mode = config->gain.mode;
> >
> > /*
> > * The DPF needs to take into account the total amount of
> > @@ -241,15 +252,6 @@ void Dpf::prepare(IPAContext &context, const uint32_t frame,
> > mode = RKISP1_CIF_ISP_DPF_GAIN_USAGE_LSC_GAINS;
> > else
> > mode = RKISP1_CIF_ISP_DPF_GAIN_USAGE_DISABLED;
> > -
> > - params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_DPF |
> > - RKISP1_CIF_ISP_MODULE_DPF_STRENGTH;
> > - }
> > -
> > - if (frameContext.dpf.update) {
> > - params->module_en_update |= RKISP1_CIF_ISP_MODULE_DPF;
> > - if (frameContext.dpf.denoise)
> > - params->module_ens |= RKISP1_CIF_ISP_MODULE_DPF;
> > }
> > }
> >
[snip]
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list