[libcamera-devel] [PATCH] ipa: rkisp1: lsc: Fix integer division error

Paul Elder paul.elder at ideasonboard.com
Fri Mar 3 06:57:55 CET 2023


On Thu, Mar 02, 2023 at 04:38:52PM +0100, Jacopo Mondi via libcamera-devel wrote:
> The RkISP1 implementation of the LensShadinCorrection algorithm has been

s/Shadin/Shading/

> made adaptive to the scene color temperature in commit 14c869c00fdd ("ipa:
> rkisp1: Take into account color temperature during LSC algorithm").
> 
> The LSC algorithm interpolates the correction factors using the
> table's reference color temperatures. When calculating the interpolation
> coefficients, an unintended integer division makes both coefficient
> zeros resulting in a completely black image.
> 
> Fix this by type casting to double one of the division operands.
> 
> Fixes: 14c869c00fdd ("ipa: rkisp1: Take into account color temperature during LSC algorithm")
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
>  src/ipa/rkisp1/algorithms/lsc.cpp | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
> index 3a443e776a53..a7ccedb1ed3b 100644
> --- a/src/ipa/rkisp1/algorithms/lsc.cpp
> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp
> @@ -216,8 +216,8 @@ void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,
>  					     const Components &set1,
>  					     const uint32_t ct)
>  {
> -	double coeff0 = (set1.ct - ct) / (set1.ct - set0.ct);
> -	double coeff1 = (ct - set0.ct) / (set1.ct - set0.ct);
> +	double coeff0 = (set1.ct - ct) / static_cast<double>(set1.ct - set0.ct);
> +	double coeff1 = (ct - set0.ct) / static_cast<double>(set1.ct - set0.ct);
> 
>  	for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {
>  		for (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {
> --
> 2.39.0
> 


More information about the libcamera-devel mailing list