[libcamera-devel] [PATCH] libcamera: pipeline: vimc: Support format enumeration

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Oct 25 15:15:49 CEST 2019


Hi Jacopo,

On Fri, Oct 25, 2019 at 01:33:58PM +0200, Jacopo Mondi wrote:
> On Fri, Oct 25, 2019 at 06:20:16AM +0300, Laurent Pinchart wrote:
> > Fill the StreamConfiguration with all supported formats. The list of
> > supported formats is currently hardcoded based on the limits of the vimc
> > driver.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/libcamera/pipeline/vimc.cpp | 33 ++++++++++++++++++++++++---------
> >  1 file changed, 24 insertions(+), 9 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
> > index dcdaef120ad1..c16ae4cb76b5 100644
> > --- a/src/libcamera/pipeline/vimc.cpp
> > +++ b/src/libcamera/pipeline/vimc.cpp
> > @@ -103,6 +103,16 @@ private:
> >  	}
> >  };
> >
> > +namespace {
> > +
> > +constexpr std::array<unsigned int, 3> pixelformats{
> 
> pixelformats {
> 
> Doesn't checkstyle.py complains ?

It doesn't, so I'll fix it :-)

> > +	V4L2_PIX_FMT_BGR24,
> > +	V4L2_PIX_FMT_RGB24,
> > +	V4L2_PIX_FMT_ARGB32,
> > +};
> > +
> > +} /* namespace */
> > +
> >  VimcCameraConfiguration::VimcCameraConfiguration()
> >  	: CameraConfiguration()
> >  {
> > @@ -110,12 +120,6 @@ VimcCameraConfiguration::VimcCameraConfiguration()
> >
> >  CameraConfiguration::Status VimcCameraConfiguration::validate()
> >  {
> > -	static const std::array<unsigned int, 3> formats{
> > -		V4L2_PIX_FMT_BGR24,
> > -		V4L2_PIX_FMT_RGB24,
> > -		V4L2_PIX_FMT_ARGB32,
> > -	};
> > -
> >  	Status status = Valid;
> >
> >  	if (config_.empty())
> > @@ -130,8 +134,8 @@ CameraConfiguration::Status VimcCameraConfiguration::validate()
> >  	StreamConfiguration &cfg = config_[0];
> >
> >  	/* Adjust the pixel format. */
> > -	if (std::find(formats.begin(), formats.end(), cfg.pixelFormat) ==
> > -	    formats.end()) {
> > +	if (std::find(pixelformats.begin(), pixelformats.end(), cfg.pixelFormat) ==
> > +	    pixelformats.end()) {
> >  		LOG(VIMC, Debug) << "Adjusting format to RGB24";
> >  		cfg.pixelFormat = V4L2_PIX_FMT_RGB24;
> >  		status = Adjusted;
> > @@ -170,7 +174,18 @@ CameraConfiguration *PipelineHandlerVimc::generateConfiguration(Camera *camera,
> >  	if (roles.empty())
> >  		return config;
> >
> > -	StreamConfiguration cfg{};
> > +	ImageFormats formats;
> > +
> > +	for (unsigned int pixelformat : pixelformats) {
> > +		/* The scaler hardcodes a x3 scale-up ratio. */
> > +		std::vector<SizeRange> sizes{
> > +			SizeRange{ 48, 48, 4096, 2160 }
> > +		};
> > +		formats.addFormat(pixelformat, sizes);
> > +	}
> > +
> > +	StreamConfiguration cfg(formats.data());
> > +
> 
> Looks good, small detail pointed out above apart
> 
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> 
> >  	cfg.pixelFormat = V4L2_PIX_FMT_RGB24;
> >  	cfg.size = { 1920, 1080 };
> >  	cfg.bufferCount = 4;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list