diff options
Diffstat (limited to 'src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp')
-rw-r--r-- | src/plugins/multimedia/gstreamer/mediacapture/qgstreamercamera.cpp | 35 |
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); |