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

Dan Scally dan.scally at ideasonboard.com
Tue Mar 7 15:09:33 CET 2023


Hi Jacopo

On 29/01/2023 13:58, Jacopo Mondi 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/getYubMediaBusFormat/getYuvMediaBusFormat here

> 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;


More information about the libcamera-devel mailing list