[libcamera-devel,v7,8/8] qcam: Add --script to load capture script
diff mbox series

Message ID 20220809205042.344923-9-utkarsh02t@gmail.com
State Superseded
Headers show
Series
  • Introduce capture scripts to qcam
Related show

Commit Message

Utkarsh Tiwari Aug. 9, 2022, 8:50 p.m. UTC
Add --script as an individual option to load capture scripts.
Load the capture script before starting the capture.

If an invalid capture script has been given, display an critical error
QMessageBox and close the application.

Signed-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>
---
Difference:
	1. firstCameraSelect_  newly introduced to keep track if its the
		first time dialog is been opened.
 src/qcam/main.cpp        |  3 +++
 src/qcam/main_window.cpp | 16 ++++++++++++++--
 src/qcam/main_window.h   |  2 ++
 3 files changed, 19 insertions(+), 2 deletions(-)

Comments

Utkarsh Tiwari Aug. 10, 2022, 4:34 a.m. UTC | #1
On Wed, Aug 10, 2022 at 2:23 AM Utkarsh Tiwari <utkarsh02t@gmail.com> wrote:

> Add --script as an individual option to load capture scripts.
> Load the capture script before starting the capture.
>
> If an invalid capture script has been given, display an critical error
> QMessageBox and close the application.
>
> Signed-off-by: Utkarsh Tiwari <utkarsh02t@gmail.com>
> ---
> Difference:
>         1. firstCameraSelect_  newly introduced to keep track if its the
>                 first time dialog is been opened.
>

The firstCameraSelect_ should be done in the patch 3/8


>  src/qcam/main.cpp        |  3 +++
>  src/qcam/main_window.cpp | 16 ++++++++++++++--
>  src/qcam/main_window.h   |  2 ++
>  3 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> index d3f01a85..91166be5 100644
> --- a/src/qcam/main.cpp
> +++ b/src/qcam/main.cpp
> @@ -43,6 +43,9 @@ OptionsParser::Options parseOptions(int argc, char
> *argv[])
>                          "Set configuration of a camera stream", "stream",
> true);
>         parser.addOption(OptVerbose, OptionNone,
>                          "Print verbose log messages", "verbose");
> +       parser.addOption(OptCaptureScript, OptionString,
> +                        "Load a capture session configuration script from
> a file",
> +                        "script", ArgumentRequired, "script");
>
>         OptionsParser::Options options = parser.parse(argc, argv);
>         if (options.isSet(OptHelp))
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index f2e3c576..d6ad0083 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -100,7 +100,7 @@ private:
>
>  MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options
> &options)
>         : saveRaw_(nullptr), options_(options), cm_(cm),
> allocator_(nullptr),
> -         isCapturing_(false), captureRaw_(false)
> +         isCapturing_(false), captureRaw_(false), firstCameraSelect_(true)
>  {
>         int ret;
>
> @@ -146,6 +146,9 @@ MainWindow::MainWindow(CameraManager *cm, const
> OptionsParser::Options &options)
>         cm_->cameraAdded.connect(this, &MainWindow::addCamera);
>         cm_->cameraRemoved.connect(this, &MainWindow::removeCamera);
>
> +       if (options_.isSet(OptCaptureScript))
> +               scriptPath_ = options_[OptCaptureScript].toString();
> +
>         /* Open the camera and start capture. */
>         ret = openCamera();
>         if (ret < 0) {
> @@ -324,6 +327,13 @@ void MainWindow::loadCaptureScript()
>                 QMessageBox::critical(this, "Invalid Script",
>                                       "Couldn't load the capture script");
>
> +               /*
> +                * Close the camera if started by command line and its the
> first capture
> +                * script.
> +                */
> +               if (firstCameraSelect_ && options_.isSet(OptCaptureScript))
> +                       quit();
> +
>         } else
>                 cameraSelectorDialog_->informScriptRunning(scriptPath_);
>
> @@ -347,8 +357,10 @@ std::string MainWindow::chooseCamera()
>          * Use the camera specified on the command line, if any, or
> display the
>          * camera selection dialog box otherwise.
>          */
> -       if (options_.isSet(OptCamera))
> +       if (firstCameraSelect_ && options_.isSet(OptCamera)) {
> +               firstCameraSelect_ = false;
>                 return static_cast<std::string>(options_[OptCamera]);
> +       }
>
>         if (cameraSelectorDialog_->exec() == QDialog::Accepted) {
>                 std::string cameraId =
> cameraSelectorDialog_->getCameraId();
> diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> index 887f1db1..3a264f96 100644
> --- a/src/qcam/main_window.h
> +++ b/src/qcam/main_window.h
> @@ -46,6 +46,7 @@ enum {
>         OptRenderer = 'r',
>         OptStream = 's',
>         OptVerbose = 'v',
> +       OptCaptureScript = 256,
>  };
>
>  class MainWindow : public QMainWindow
> @@ -123,6 +124,7 @@ private:
>         /* Capture state, buffers queue and statistics */
>         bool isCapturing_;
>         bool captureRaw_;
> +       bool firstCameraSelect_;
>         libcamera::Stream *vfStream_;
>         libcamera::Stream *rawStream_;
>         std::map<const libcamera::Stream *, QQueue<libcamera::FrameBuffer
> *>> freeBuffers_;
> --
> 2.25.1
>
>

Patch
diff mbox series

diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
index d3f01a85..91166be5 100644
--- a/src/qcam/main.cpp
+++ b/src/qcam/main.cpp
@@ -43,6 +43,9 @@  OptionsParser::Options parseOptions(int argc, char *argv[])
 			 "Set configuration of a camera stream", "stream", true);
 	parser.addOption(OptVerbose, OptionNone,
 			 "Print verbose log messages", "verbose");
+	parser.addOption(OptCaptureScript, OptionString,
+			 "Load a capture session configuration script from a file",
+			 "script", ArgumentRequired, "script");
 
 	OptionsParser::Options options = parser.parse(argc, argv);
 	if (options.isSet(OptHelp))
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index f2e3c576..d6ad0083 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -100,7 +100,7 @@  private:
 
 MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options)
 	: saveRaw_(nullptr), options_(options), cm_(cm), allocator_(nullptr),
-	  isCapturing_(false), captureRaw_(false)
+	  isCapturing_(false), captureRaw_(false), firstCameraSelect_(true)
 {
 	int ret;
 
@@ -146,6 +146,9 @@  MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options)
 	cm_->cameraAdded.connect(this, &MainWindow::addCamera);
 	cm_->cameraRemoved.connect(this, &MainWindow::removeCamera);
 
+	if (options_.isSet(OptCaptureScript))
+		scriptPath_ = options_[OptCaptureScript].toString();
+
 	/* Open the camera and start capture. */
 	ret = openCamera();
 	if (ret < 0) {
@@ -324,6 +327,13 @@  void MainWindow::loadCaptureScript()
 		QMessageBox::critical(this, "Invalid Script",
 				      "Couldn't load the capture script");
 
+		/*
+		 * Close the camera if started by command line and its the first capture
+		 * script.
+		 */
+		if (firstCameraSelect_ && options_.isSet(OptCaptureScript))
+			quit();
+
 	} else
 		cameraSelectorDialog_->informScriptRunning(scriptPath_);
 
@@ -347,8 +357,10 @@  std::string MainWindow::chooseCamera()
 	 * Use the camera specified on the command line, if any, or display the
 	 * camera selection dialog box otherwise.
 	 */
-	if (options_.isSet(OptCamera))
+	if (firstCameraSelect_ && options_.isSet(OptCamera)) {
+		firstCameraSelect_ = false;
 		return static_cast<std::string>(options_[OptCamera]);
+	}
 
 	if (cameraSelectorDialog_->exec() == QDialog::Accepted) {
 		std::string cameraId = cameraSelectorDialog_->getCameraId();
diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
index 887f1db1..3a264f96 100644
--- a/src/qcam/main_window.h
+++ b/src/qcam/main_window.h
@@ -46,6 +46,7 @@  enum {
 	OptRenderer = 'r',
 	OptStream = 's',
 	OptVerbose = 'v',
+	OptCaptureScript = 256,
 };
 
 class MainWindow : public QMainWindow
@@ -123,6 +124,7 @@  private:
 	/* Capture state, buffers queue and statistics */
 	bool isCapturing_;
 	bool captureRaw_;
+	bool firstCameraSelect_;
 	libcamera::Stream *vfStream_;
 	libcamera::Stream *rawStream_;
 	std::map<const libcamera::Stream *, QQueue<libcamera::FrameBuffer *>> freeBuffers_;