Message ID | 20240704162035.15074-12-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Paul, hi Laurent, Thank you for the patch. On Thu, Jul 04, 2024 at 07:20:35PM +0300, Laurent Pinchart wrote: > From: Paul Elder <paul.elder@ideasonboard.com> > > Extend the RkISP1 BLC algorithm to use the ISP 'companding' block for > versions of the ISP (such as the one on the i.MX8MP) that lack the > dedicated BLS block but implement BLS as part of the companding block. > > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Looks good to me. Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com> Cheers, Stefan > --- > src/ipa/rkisp1/algorithms/blc.cpp | 33 ++++++++++++++++++++++--------- > 1 file changed, 24 insertions(+), 9 deletions(-) > > diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp > index df1a91a413db..9bc10f4ad07f 100644 > --- a/src/ipa/rkisp1/algorithms/blc.cpp > +++ b/src/ipa/rkisp1/algorithms/blc.cpp > @@ -110,7 +110,7 @@ int BlackLevelCorrection::init(IPAContext &context, const YamlObject &tuningData > /** > * \copydoc libcamera::ipa::Algorithm::prepare > */ > -void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context, > +void BlackLevelCorrection::prepare(IPAContext &context, > const uint32_t frame, > [[maybe_unused]] IPAFrameContext &frameContext, > RkISP1Params *params) > @@ -124,15 +124,30 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context, > if (!tuningParameters_) > return; > > - auto config = params->block<Block::Bls>(); > - config.setEnabled(true); > + if (context.hw->compand) { > + auto config = params->block<Block::CompandBls>(); > + config.setEnabled(true); > > - config->enable_auto = 0; > - /* The rkisp1 uses 12bit based black levels. Scale down accordingly. */ > - config->fixed_val.r = blackLevelRed_ >> 4; > - config->fixed_val.gr = blackLevelGreenR_ >> 4; > - config->fixed_val.gb = blackLevelGreenB_ >> 4; > - config->fixed_val.b = blackLevelBlue_ >> 4; > + /* > + * Scale up to the 20-bit black levels used by the companding > + * block. > + */ > + config->r = blackLevelRed_ << 4; > + config->gr = blackLevelGreenR_ << 4; > + config->gb = blackLevelGreenB_ << 4; > + config->b = blackLevelBlue_ << 4; > + } else { > + auto config = params->block<Block::Bls>(); > + config.setEnabled(true); > + > + config->enable_auto = 0; > + > + /* Scale down to the 12-bit black levels used by the BLS block. */ > + config->fixed_val.r = blackLevelRed_ >> 4; > + config->fixed_val.gr = blackLevelGreenR_ >> 4; > + config->fixed_val.gb = blackLevelGreenB_ >> 4; > + config->fixed_val.b = blackLevelBlue_ >> 4; > + } > } > > /** > -- > Regards, > > Laurent Pinchart >
diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp index df1a91a413db..9bc10f4ad07f 100644 --- a/src/ipa/rkisp1/algorithms/blc.cpp +++ b/src/ipa/rkisp1/algorithms/blc.cpp @@ -110,7 +110,7 @@ int BlackLevelCorrection::init(IPAContext &context, const YamlObject &tuningData /** * \copydoc libcamera::ipa::Algorithm::prepare */ -void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context, +void BlackLevelCorrection::prepare(IPAContext &context, const uint32_t frame, [[maybe_unused]] IPAFrameContext &frameContext, RkISP1Params *params) @@ -124,15 +124,30 @@ void BlackLevelCorrection::prepare([[maybe_unused]] IPAContext &context, if (!tuningParameters_) return; - auto config = params->block<Block::Bls>(); - config.setEnabled(true); + if (context.hw->compand) { + auto config = params->block<Block::CompandBls>(); + config.setEnabled(true); - config->enable_auto = 0; - /* The rkisp1 uses 12bit based black levels. Scale down accordingly. */ - config->fixed_val.r = blackLevelRed_ >> 4; - config->fixed_val.gr = blackLevelGreenR_ >> 4; - config->fixed_val.gb = blackLevelGreenB_ >> 4; - config->fixed_val.b = blackLevelBlue_ >> 4; + /* + * Scale up to the 20-bit black levels used by the companding + * block. + */ + config->r = blackLevelRed_ << 4; + config->gr = blackLevelGreenR_ << 4; + config->gb = blackLevelGreenB_ << 4; + config->b = blackLevelBlue_ << 4; + } else { + auto config = params->block<Block::Bls>(); + config.setEnabled(true); + + config->enable_auto = 0; + + /* Scale down to the 12-bit black levels used by the BLS block. */ + config->fixed_val.r = blackLevelRed_ >> 4; + config->fixed_val.gr = blackLevelGreenR_ >> 4; + config->fixed_val.gb = blackLevelGreenB_ >> 4; + config->fixed_val.b = blackLevelBlue_ >> 4; + } } /**