summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp')
-rw-r--r--src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp
index bfb3bdf8d..f55038932 100644
--- a/src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp
+++ b/src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp
@@ -16,14 +16,37 @@
#include <QtCore/qdebug.h>
-QGstreamerCamera::QGstreamerCamera(QCamera *camera)
- : QPlatformCamera(camera)
+QMaybe<QPlatformCamera *> QGstreamerCamera::create(QCamera *camera)
+{
+ QGstElement videotestsrc("videotestsrc");
+ if (!videotestsrc)
+ return errorMessageCannotFindElement("videotestsrc");
+
+ QGstElement capsFilter("capsfilter", "videoCapsFilter");
+ if (!capsFilter)
+ return errorMessageCannotFindElement("capsfilter");
+
+ QGstElement videoconvert("videoconvert", "videoConvert");
+ if (!videoconvert)
+ return errorMessageCannotFindElement("videoconvert");
+
+ QGstElement videoscale("videoscale", "videoScale");
+ if (!videoscale)
+ return errorMessageCannotFindElement("videoscale");
+
+ return new QGstreamerCamera(videotestsrc, capsFilter, videoconvert, videoscale, camera);
+}
+
+QGstreamerCamera::QGstreamerCamera(QGstElement videotestsrc, QGstElement capsFilter,
+ QGstElement videoconvert, QGstElement videoscale,
+ QCamera *camera)
+ : QPlatformCamera(camera),
+ gstCamera(std::move(videotestsrc)),
+ gstCapsFilter(std::move(capsFilter)),
+ gstVideoConvert(std::move(videoconvert)),
+ gstVideoScale(std::move(videoscale))
{
- gstCamera = QGstElement("videotestsrc");
- gstCapsFilter = QGstElement("capsfilter", "videoCapsFilter");
gstDecode = QGstElement("identity");
- gstVideoConvert = QGstElement("videoconvert", "videoConvert");
- gstVideoScale = QGstElement("videoscale", "videoScale");
gstCameraBin = QGstBin("camerabin");
gstCameraBin.add(gstCamera, gstCapsFilter, gstDecode, gstVideoConvert, gstVideoScale);
gstCamera.link(gstCapsFilter, gstDecode, gstVideoConvert, gstVideoScale);