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

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Mar 12 17:35:45 CET 2023


On Tue, Mar 07, 2023 at 02:09:33PM +0000, Dan Scally via libcamera-devel wrote:
> 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

With that fixed,

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

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

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list