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

Message ID 20200724174827.757493-2-niklas.soderlund@ragnatech.se
State Superseded
Headers show
Series
  • cam: Add options to make batch testing with cam easier
Related show

Commit Message

Niklas Söderlund July 24, 2020, 5:48 p.m. UTC
Add a '--strict-formats' option which fails the camera configuration
step if the format is adjusted,

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
* Changes since v1
- Fix spelling in comment and log outputs.
---
 src/cam/main.cpp | 17 ++++++++++++++++-
 src/cam/main.h   |  1 +
 2 files changed, 17 insertions(+), 1 deletion(-)

Comments

Laurent Pinchart July 24, 2020, 5:56 p.m. UTC | #1
Hi Niklas,

Thank you for the patch.

On Fri, Jul 24, 2020 at 07:48:25PM +0200, Niklas Söderlund wrote:
> Add a '--strict-formats' option which fails the camera configuration
> step if the format is adjusted,
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
> * Changes since v1
> - Fix spelling in comment and log outputs.
> ---
>  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..2009f11b6c336f2c 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 << "Adjusting camera configuration not allowed"

Maybe "Adjusting camera configuration disallowed by --strict-formats argument" ?

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

> +				  << std::endl;
> +			config_.reset();
> +			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__ */

Patch

diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index 2512fe9da782165b..2009f11b6c336f2c 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 << "Adjusting camera configuration not allowed"
+				  << std::endl;
+			config_.reset();
+			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__ */