[v2,11/11] ipa: rkisp1: blc: Add support for BLS in compand
diff mbox series

Message ID 20240704162035.15074-12-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • rkisp1: Support BLS on i.MX8MP
Related show

Commit Message

Laurent Pinchart July 4, 2024, 4:20 p.m. UTC
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>
---
 src/ipa/rkisp1/algorithms/blc.cpp | 33 ++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

Comments

Stefan Klug July 5, 2024, 1:41 p.m. UTC | #1
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
>

Patch
diff mbox series

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;
+	}
 }
 
 /**