[libcamera-devel] [PATCH v5 4/4] qcam: add additional command line option to select the render type

Show Liu show.liu at linaro.org
Fri Sep 4 10:43:16 CEST 2020


Add new option "--render=qt|gles" to select the render type,
"--render=gles" to accelerate format conversion and rendering
"--render=qt" is the original Qt rendering

Signed-off-by: Show Liu <show.liu at linaro.org>
---
 src/qcam/main.cpp        |  3 +++
 src/qcam/main_window.cpp | 29 ++++++++++++++++++++++++-----
 src/qcam/main_window.h   |  6 ++++++
 3 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
index bae358d..19d0559 100644
--- a/src/qcam/main.cpp
+++ b/src/qcam/main.cpp
@@ -35,6 +35,9 @@ OptionsParser::Options parseOptions(int argc, char *argv[])
 			 "help");
 	parser.addOption(OptStream, &streamKeyValue,
 			 "Set configuration of a camera stream", "stream", true);
+	parser.addOption(OptRender, OptionString,
+			 "Choose the render type use qt|gles", "render",
+			 ArgumentRequired, "render");
 
 	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 612d978..467cc74 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -91,7 +91,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), renderType_("qt")
 {
 	int ret;
 
@@ -105,10 +105,29 @@ MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options)
 	setWindowTitle(title_);
 	connect(&titleTimer_, SIGNAL(timeout()), this, SLOT(updateTitle()));
 
-	viewfinder_ = new ViewFinder(this);
-	connect(viewfinder_, &ViewFinder::renderComplete,
-		this, &MainWindow::queueRequest);
-	setCentralWidget(viewfinder_);
+	if (options_.isSet(OptRender))
+		renderType_ = options_[OptRender].toString().c_str();
+
+	if (renderType_ == "qt") {
+		viewfinder_ = new ViewFinderQt(this);
+		ViewFinderQt *vf = dynamic_cast<ViewFinderQt *>(viewfinder_);
+		connect(vf, &ViewFinderQt::renderComplete,
+			this, &MainWindow::queueRequest);
+		setCentralWidget(vf);
+	} else if (renderType_ == "gles") {
+		viewfinder_ = new ViewFinderGL(this);
+		ViewFinderGL *vf = dynamic_cast<ViewFinderGL *>(viewfinder_);
+		connect(vf, &ViewFinderGL::renderComplete,
+			this, &MainWindow::queueRequest);
+		setCentralWidget(vf);
+	} else {
+		qWarning() << "Render Type:"
+			   << QString::fromStdString(renderType_)
+			   << " is not support.";
+		quit();
+		return;
+	}
+
 	adjustSize();
 
 	/* Hotplug/unplug support */
diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
index 3d21779..a69b399 100644
--- a/src/qcam/main_window.h
+++ b/src/qcam/main_window.h
@@ -26,6 +26,8 @@
 
 #include "../cam/stream_options.h"
 #include "viewfinder.h"
+#include "viewfinder_gl.h"
+#include "viewfinder_qt.h"
 
 using namespace libcamera;
 
@@ -38,6 +40,7 @@ enum {
 	OptCamera = 'c',
 	OptHelp = 'h',
 	OptStream = 's',
+	OptRender = 'r',
 };
 
 class CaptureRequest
@@ -134,6 +137,9 @@ private:
 	QElapsedTimer frameRateInterval_;
 	uint32_t previousFrames_;
 	uint32_t framesCaptured_;
+
+	/* Render Type Qt or GLES */
+	std::string renderType_;
 };
 
 #endif /* __QCAM_MAIN_WINDOW__ */
-- 
2.20.1



More information about the libcamera-devel mailing list