[libcamera-devel] [PATCH 1/7] libcamera: formats: Move isRaw() helper to formats.cpp

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Jul 22 15:40:26 CEST 2020


Hi Kaaira,

Aha, this sounds useful. A few fixups though

On 22/07/2020 14:30, Kaaira Gupta wrote:
> isRaw() helper is used in subsequent patches by VIMC as well. Hence move
> it from raspberrypi pippeline handler to a common place to make it
> reusable.

s/pippeline/pippeline/


> Signed-off-by: Kaaira Gupta <kgupta at es.iitr.ac.in>
> ---
>  include/libcamera/internal/formats.h          |  1 +
>  src/libcamera/formats.cpp                     | 13 +++++++++
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 27 ++++++++-----------
>  3 files changed, 25 insertions(+), 16 deletions(-)
> 
> diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
> index cad41ad..8032fab 100644
> --- a/include/libcamera/internal/formats.h
> +++ b/include/libcamera/internal/formats.h
> @@ -49,6 +49,7 @@ public:
>  	};
>  
>  	bool isValid() const { return format.isValid(); }
> +	bool isRaw(PixelFormat &pixFmt) const;

We need to parse the PixelFormatInfo, and you are adding the method to
that class (which is good), but that makes passing the PixelFormat
redundant.



>  
>  	static const PixelFormatInfo &info(const PixelFormat &format);
>  	static const PixelFormatInfo &info(const V4L2PixelFormat &format);
> diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
> index af3996c..efb7de9 100644
> --- a/src/libcamera/formats.cpp
> +++ b/src/libcamera/formats.cpp
> @@ -853,4 +853,17 @@ PixelFormatInfo::frameSize(const Size &size,
>  	return sum;
>  }
>  
> +/**
> + * \brief Check if given pixel format is RAW or not
> + * \return True if the format is RAW, false otherwise
> + */
> +bool PixelFormatInfo::isRaw(PixelFormat &pixFmt) const
> +{
> +	const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
> +	if (!info.isValid())
> +		return false;

You don't need to 'find' the PixelFormatInfo, because you're already
executing code 'on' a PixelFormatInfo (this member function is a
function on a PixelFormatInfo), so you can directly access it's member
variables.

> +
> +	return info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;


So I believe this could then become:

	return colourEncoding == ColourEncodingRAW;



> +}
> +
>  } /* namespace libcamera */
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index bf1c771..8f35434 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -43,19 +43,6 @@ using V4L2PixFmtMap = std::map<V4L2PixelFormat, std::vector<SizeRange>>;
>  
>  namespace {
>  
> -bool isRaw(PixelFormat &pixFmt)
> -{
> -	/*
> -	 * The isRaw test might be redundant right now the pipeline handler only
> -	 * supports RAW sensors. Leave it in for now, just as a sanity check.
> -	 */
> -	const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt);
> -	if (!info.isValid())
> -		return false;
> -
> -	return info.colourEncoding == PixelFormatInfo::ColourEncodingRAW;
> -}
> -
>  double scoreFormat(double desired, double actual)
>  {
>  	double score = desired - actual;
> @@ -405,7 +392,13 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()
>  	std::pair<int, Size> outSize[2];
>  	Size maxSize;
>  	for (StreamConfiguration &cfg : config_) {
> -		if (isRaw(cfg.pixelFormat)) {
> +		/*
> +		 * The isRaw test might be redundant right now the pipeline handler only
> +		 * supports RAW sensors. Leave it in for now, just as a sanity check.
> +		 */
> +		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
> +
> +		if (info.isRaw(cfg.pixelFormat)) {
>  			/*
>  			 * Calculate the best sensor mode we can use based on
>  			 * the user request.
> @@ -616,8 +609,9 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>  	 */
>  	for (unsigned i = 0; i < config->size(); i++) {
>  		StreamConfiguration &cfg = config->at(i);
> +		const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat);
>  
> -		if (isRaw(cfg.pixelFormat)) {
> +		if (info.isRaw(cfg.pixelFormat)) {
>  			/*
>  			 * If we have been given a RAW stream, use that size
>  			 * for setting up the sensor.
> @@ -661,7 +655,8 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
>  	for (unsigned i = 0; i < config->size(); i++) {
>  		StreamConfiguration &cfg = config->at(i);
>  
> -		if (isRaw(cfg.pixelFormat)) {
> +		const PixelFormatInfo &info = PixelFormatInfo::info(cfg..pixelFormat);
> +		if (info.isRaw(cfg.pixelFormat)) {
>  			cfg.setStream(&data->isp_[Isp::Input]);
>  			data->isp_[Isp::Input].setExternal(true);
>  			continue;
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list