qcam: Add additional command line option to select the renderer type

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

Signed-off-by: Show Liu <show.liu@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Show Liu 2020-09-11 16:55:14 +08:00 committed by Laurent Pinchart
parent 9db6ce0ba4
commit 219cbfe76b
3 changed files with 33 additions and 5 deletions

View file

@ -33,6 +33,9 @@ OptionsParser::Options parseOptions(int argc, char *argv[])
ArgumentRequired, "camera");
parser.addOption(OptHelp, OptionNone, "Display this help message",
"help");
parser.addOption(OptRenderer, OptionString,
"Choose the renderer type {qt,gles} (default: qt)",
"renderer", ArgumentRequired, "renderer");
parser.addOption(OptStream, &streamKeyValue,
"Set configuration of a camera stream", "stream", true);

View file

@ -28,6 +28,9 @@
#include <libcamera/version.h>
#include "dng_writer.h"
#ifndef QT_NO_OPENGL
#include "viewfinder_gl.h"
#endif
#include "viewfinder_qt.h"
using namespace libcamera;
@ -106,11 +109,32 @@ MainWindow::MainWindow(CameraManager *cm, const OptionsParser::Options &options)
setWindowTitle(title_);
connect(&titleTimer_, SIGNAL(timeout()), this, SLOT(updateTitle()));
ViewFinderQt *viewfinder = new ViewFinderQt(this);
connect(viewfinder, &ViewFinderQt::renderComplete,
this, &MainWindow::queueRequest);
viewfinder_ = viewfinder;
setCentralWidget(viewfinder);
/* Renderer type Qt or GLES, select Qt by default. */
std::string renderType = "qt";
if (options_.isSet(OptRenderer))
renderType = options_[OptRenderer].toString();
if (renderType == "qt") {
ViewFinderQt *viewfinder = new ViewFinderQt(this);
connect(viewfinder, &ViewFinderQt::renderComplete,
this, &MainWindow::queueRequest);
viewfinder_ = viewfinder;
setCentralWidget(viewfinder);
#ifndef QT_NO_OPENGL
} else if (renderType == "gles") {
ViewFinderGL *viewfinder = new ViewFinderGL(this);
connect(viewfinder, &ViewFinderGL::renderComplete,
this, &MainWindow::queueRequest);
viewfinder_ = viewfinder;
setCentralWidget(viewfinder);
#endif
} else {
qWarning() << "Invalid render type"
<< QString::fromStdString(renderType);
quit();
return;
}
adjustSize();
/* Hotplug/unplug support */

View file

@ -37,6 +37,7 @@ class HotplugEvent;
enum {
OptCamera = 'c',
OptHelp = 'h',
OptRenderer = 'r',
OptStream = 's',
};