[libcamera-devel] [PATCH 3/5] libcamera: imx8-isi: Automatically select media bus code

Paul Elder paul.elder at ideasonboard.com
Thu Mar 2 12:36:49 CET 2023


On Sun, Jan 29, 2023 at 02:58:28PM +0100, Jacopo Mondi via libcamera-devel wrote:
> The ISICameraConfiguration::validate() function selects which media
> bus format to configure the sensor with based on the pixel format
> of the first configured stream using the media bus code associated to it
> in the formatsMap_ map.
> 
> In order to remove the PixelFormamt-to-mbus-code association in
> formatsMap_ provide a wrapper function for the newly introduced
> getRawMediaBusFormat() and getYubMediaBusFormat() that automatically

s/Yub/Yub/

> selects what media bus format to use based on the first stream pixel
> format.
> 
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>

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

> ---
>  src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> index 445fad32656c..5976a63d27dd 100644
> --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp
> @@ -61,6 +61,7 @@ public:
>  
>  	unsigned int getRawMediaBusFormat(PixelFormat *pixelFormat) const;
>  	unsigned int getYuvMediaBusFormat(PixelFormat *pixelFormat) const;
> +	unsigned int getMediaBusFormat(PixelFormat *pixelFormat) const;
>  
>  	std::unique_ptr<CameraSensor> sensor_;
>  	std::unique_ptr<V4L2Subdevice> csis_;
> @@ -315,6 +316,15 @@ unsigned int ISICameraData::getYuvMediaBusFormat(PixelFormat *pixelFormat) const
>  	return supportedCodes[0];
>  }
>  
> +unsigned int ISICameraData::getMediaBusFormat(PixelFormat *pixelFormat) const
> +{
> +	if (PixelFormatInfo::info(*pixelFormat).colourEncoding ==
> +	    PixelFormatInfo::ColourEncodingRAW)
> +		return getRawMediaBusFormat(pixelFormat);
> +
> +	return getYuvMediaBusFormat(pixelFormat);
> +}
> +
>  /* -----------------------------------------------------------------------------
>   * Camera Configuration
>   */
> @@ -628,16 +638,16 @@ CameraConfiguration::Status ISICameraConfiguration::validate()
>  	 * image quality in exchange of a usually slower frame rate.
>  	 * Usage of the STILL_CAPTURE role could be consider for this.
>  	 */
> -	const PipeFormat &pipeFmt = formatsMap_.at(config_[0].pixelFormat);
> -
>  	Size maxSize;
>  	for (const auto &cfg : config_) {
>  		if (cfg.size > maxSize)
>  			maxSize = cfg.size;
>  	}
>  
> +	PixelFormat pixelFormat = config_[0].pixelFormat;
> +
>  	V4L2SubdeviceFormat sensorFormat{};
> -	sensorFormat.mbus_code = pipeFmt.sensorCode;
> +	sensorFormat.mbus_code = data_->getMediaBusFormat(&pixelFormat);
>  	sensorFormat.size = maxSize;
>  
>  	LOG(ISI, Debug) << "Computed sensor configuration: " << sensorFormat;
> -- 
> 2.39.0
> 


More information about the libcamera-devel mailing list