[libcamera-devel] [PATCH 3/3] libcamera: raspberrypi: plumb the libcamera sharpness control through to the Raspberry Pi implementation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jun 22 04:38:46 CEST 2020


Hi David,

Thank you for the patch.

On Fri, Jun 19, 2020 at 10:27:25AM +0100, David Plowman wrote:
> This simply wires up the libcamera sharpness control in the Raspberry
> Pi IPAs so that it controls the strength of the Raspberry Pi sharpness
> control algorithm.
> 
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> ---
>  include/libcamera/ipa/raspberrypi.h |  1 +
>  src/ipa/raspberrypi/raspberrypi.cpp | 12 ++++++++++++
>  2 files changed, 13 insertions(+)
> 
> diff --git a/include/libcamera/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h
> index c109469..a18ce9a 100644
> --- a/include/libcamera/ipa/raspberrypi.h
> +++ b/include/libcamera/ipa/raspberrypi.h
> @@ -51,6 +51,7 @@ static const ControlInfoMap RPiControls = {
>  	{ &controls::Brightness, ControlInfo(-1.0f, 1.0f) },
>  	{ &controls::Contrast, ControlInfo(0.0f, 32.0f) },
>  	{ &controls::Saturation, ControlInfo(0.0f, 32.0f) },
> +	{ &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },

In patch 2/3, status.threshold is computed with a division by the user
strength. Dividing by 0 doesn't seem like a very good idea. That's
something to be fixed in 2/3 though. For this patch,

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

>  };
>  
>  } /* namespace libcamera */
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> index 9669f21..2f2550e 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -47,6 +47,7 @@
>  #include "metadata.hpp"
>  #include "noise_status.h"
>  #include "sdn_status.h"
> +#include "sharpen_algorithm.hpp"
>  #include "sharpen_status.h"
>  
>  namespace libcamera {
> @@ -631,6 +632,17 @@ void IPARPi::queueRequest(const ControlList &controls)
>  			break;
>  		}
>  
> +		case controls::SHARPNESS: {
> +			RPi::SharpenAlgorithm *sharpen = dynamic_cast<RPi::SharpenAlgorithm *>(
> +				controller_.GetAlgorithm("sharpen"));
> +			ASSERT(sharpen);
> +
> +			sharpen->SetStrength(ctrl.second.get<float>());
> +			libcameraMetadata_.set(controls::Sharpness,
> +					       ctrl.second.get<float>());
> +			break;
> +		}
> +
>  		default:
>  			LOG(IPARPI, Warning)
>  				<< "Ctrl " << controls::controls.at(ctrl.first)->name()

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list