[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