[v7,18/18] libcamera: software_isp: Update black level only on exposure changes
diff mbox series

Message ID 20240920183143.1674117-19-mzamazal@redhat.com
State Superseded
Headers show
Series
  • Software ISP refactoring
Related show

Commit Message

Milan Zamazal Sept. 20, 2024, 6:31 p.m. UTC
The black level is likely to get updated, if ever, only after exposure
or gain changes.  Don't compute its possible updates if exposure and
gain are unchanged.

It's probably not worth trying to implement something more
sophisticated.  Better to spend the effort on supporting tuning files.

Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 src/ipa/simple/algorithms/blc.cpp | 9 ++++++++-
 src/ipa/simple/algorithms/blc.h   | 4 ++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Comments

Umang Jain Sept. 26, 2024, 7:27 p.m. UTC | #1
Hi Milan

Thank you for the patch

On 21/09/24 12:01 am, Milan Zamazal wrote:
> The black level is likely to get updated, if ever, only after exposure
> or gain changes.  Don't compute its possible updates if exposure and
> gain are unchanged.
>
> It's probably not worth trying to implement something more
> sophisticated.  Better to spend the effort on supporting tuning files.
>
> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
> ---
>   src/ipa/simple/algorithms/blc.cpp | 9 ++++++++-
>   src/ipa/simple/algorithms/blc.h   | 4 ++++
>   2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
> index 755108b0..b9f2aaa6 100644
> --- a/src/ipa/simple/algorithms/blc.cpp
> +++ b/src/ipa/simple/algorithms/blc.cpp
> @@ -30,10 +30,15 @@ int BlackLevel::configure(IPAContext &context,
>   
>   void BlackLevel::process(IPAContext &context,
>   			 [[maybe_unused]] const uint32_t frame,
> -			 [[maybe_unused]] IPAFrameContext &frameContext,
> +			 IPAFrameContext &frameContext,
>   			 const SwIspStats *stats,
>   			 [[maybe_unused]] ControlList &metadata)
>   {
> +	if (frameContext.sensor.exposure == exposure_ &&
> +	    frameContext.sensor.gain == gain_) {
> +		return;
> +	}
> +
>   	const SwIspStats::Histogram &histogram = stats->yHistogram;
>   
>   	/*
> @@ -54,6 +59,8 @@ void BlackLevel::process(IPAContext &context,
>   		seen += histogram[i];
>   		if (seen >= pixelThreshold) {
>   			context.activeState.blc.level = i * histogramRatio;
> +			exposure_ = frameContext.sensor.exposure;
> +			gain_ = frameContext.sensor.gain;
>   			LOG(IPASoftBL, Debug)
>   				<< "Auto-set black level: "
>   				<< i << "/" << SwIspStats::kYHistogramSize
> diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
> index 49bdcc61..828ad8b1 100644
> --- a/src/ipa/simple/algorithms/blc.h
> +++ b/src/ipa/simple/algorithms/blc.h
> @@ -24,6 +24,10 @@ public:
>   		     IPAFrameContext &frameContext,
>   		     const SwIspStats *stats,
>   		     ControlList &metadata) override;
> +
> +private:
> +	uint32_t exposure_;
> +	double gain_;
>   };
>   
>   } /* namespace ipa::soft::algorithms */

Patch
diff mbox series

diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp
index 755108b0..b9f2aaa6 100644
--- a/src/ipa/simple/algorithms/blc.cpp
+++ b/src/ipa/simple/algorithms/blc.cpp
@@ -30,10 +30,15 @@  int BlackLevel::configure(IPAContext &context,
 
 void BlackLevel::process(IPAContext &context,
 			 [[maybe_unused]] const uint32_t frame,
-			 [[maybe_unused]] IPAFrameContext &frameContext,
+			 IPAFrameContext &frameContext,
 			 const SwIspStats *stats,
 			 [[maybe_unused]] ControlList &metadata)
 {
+	if (frameContext.sensor.exposure == exposure_ &&
+	    frameContext.sensor.gain == gain_) {
+		return;
+	}
+
 	const SwIspStats::Histogram &histogram = stats->yHistogram;
 
 	/*
@@ -54,6 +59,8 @@  void BlackLevel::process(IPAContext &context,
 		seen += histogram[i];
 		if (seen >= pixelThreshold) {
 			context.activeState.blc.level = i * histogramRatio;
+			exposure_ = frameContext.sensor.exposure;
+			gain_ = frameContext.sensor.gain;
 			LOG(IPASoftBL, Debug)
 				<< "Auto-set black level: "
 				<< i << "/" << SwIspStats::kYHistogramSize
diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h
index 49bdcc61..828ad8b1 100644
--- a/src/ipa/simple/algorithms/blc.h
+++ b/src/ipa/simple/algorithms/blc.h
@@ -24,6 +24,10 @@  public:
 		     IPAFrameContext &frameContext,
 		     const SwIspStats *stats,
 		     ControlList &metadata) override;
+
+private:
+	uint32_t exposure_;
+	double gain_;
 };
 
 } /* namespace ipa::soft::algorithms */