[libcamera-devel] [PATCH 1/3] cam: Add option to disallow adjusting of requested formats

Niklas Söderlund niklas.soderlund at ragnatech.se
Fri Jul 24 19:22:40 CEST 2020


Hi Kieran,

Thanks for your feedback.

On 2020-07-24 14:57:28 +0100, Kieran Bingham wrote:
> Hi Niklas,
> 
> I can see some definite value in this option!
> 
> On 24/07/2020 14:43, Niklas Söderlund wrote:
> > Add an '--strict-formats' option which fails the camera configuration
> 
> s/an/a/
> 
> > step if the format is adjusted,
> > 
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> >  src/cam/main.cpp | 17 ++++++++++++++++-
> >  src/cam/main.h   |  1 +
> >  2 files changed, 17 insertions(+), 1 deletion(-)
> > 
> > diff --git a/src/cam/main.cpp b/src/cam/main.cpp
> > index 2512fe9da782165b..a223563ad37e9fe5 100644
> > --- a/src/cam/main.cpp
> > +++ b/src/cam/main.cpp
> > @@ -49,12 +49,15 @@ private:
> >  	std::shared_ptr<Camera> camera_;
> >  	std::unique_ptr<libcamera::CameraConfiguration> config_;
> >  	EventLoop *loop_;
> > +
> > +	bool strictFormats_;
> >  };
> >  
> >  CamApp *CamApp::app_ = nullptr;
> >  
> >  CamApp::CamApp()
> > -	: cm_(nullptr), camera_(nullptr), config_(nullptr), loop_(nullptr)
> > +	: cm_(nullptr), camera_(nullptr), config_(nullptr), loop_(nullptr),
> > +	  strictFormats_(false)
> >  {
> >  	CamApp::app_ = this;
> >  }
> > @@ -77,6 +80,9 @@ int CamApp::init(int argc, char **argv)
> >  	if (ret < 0)
> >  		return ret;
> >  
> > +	if (options_.isSet(OptStrictFormats))
> > +		strictFormats_ = true;
> > +
> >  	cm_ = new CameraManager();
> >  
> >  	ret = cm_->start();
> > @@ -179,6 +185,9 @@ int CamApp::parseOptions(int argc, char *argv[])
> >  			 "list-controls");
> >  	parser.addOption(OptListProperties, OptionNone, "List cameras properties",
> >  			 "list-properties");
> > +	parser.addOption(OptStrictFormats, OptionNone,
> > +			 "Do not allow requested stream format(s) to be adjusted",
> > +			 "strict-formats");
> >  
> >  	options_ = parser.parse(argc, argv);
> >  	if (!options_.valid())
> > @@ -214,6 +223,12 @@ int CamApp::prepareConfig()
> >  	case CameraConfiguration::Valid:
> >  		break;
> >  	case CameraConfiguration::Adjusted:
> > +		if (strictFormats_) {
> > +			std::cout << "Adjustng camera configuration not allowed"
> 
> s/Adjustng/Adjusting/
> 
> 
> Could/should we print here what the stream configurations were adjusted
> /to/ to help debugging?

We could, but there are other places we could do this and don't. I think 
we should add this to core at the Debug level so no matter the 
application we could get this information out.

I know you have added something like this in your HAL JPEG work so I 
think we should address this at a common point.

> 
> 
> Otherwise,
> 
> > +				  << std::endl;
> > +			config_.reset();
> 
> Is this (reset) essential?

Yes, we need to reset the config_ variable if we don't want to proceed.  
We do the same here for CameraConfiguration::Invalid (that is not shown 
in the context for this patch).

> 
> Otherwise,
> 
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

Thanks!

> 
> 
> 
> > +			return -EINVAL;
> > +		}
> >  		std::cout << "Camera configuration adjusted" << std::endl;
> >  		break;
> >  	case CameraConfiguration::Invalid:
> > diff --git a/src/cam/main.h b/src/cam/main.h
> > index 4a130d8dd2906ad4..6f95add31a6341cf 100644
> > --- a/src/cam/main.h
> > +++ b/src/cam/main.h
> > @@ -17,6 +17,7 @@ enum {
> >  	OptListProperties = 'p',
> >  	OptStream = 's',
> >  	OptListControls = 256,
> > +	OptStrictFormats = 257,
> >  };
> >  
> >  #endif /* __CAM_MAIN_H__ */
> > 
> 
> -- 
> Regards
> --
> Kieran

-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list