summaryrefslogtreecommitdiffstats
path: root/src/multimedia/recording/qmediacapturesession.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/recording/qmediacapturesession.cpp')
-rw-r--r--src/multimedia/recording/qmediacapturesession.cpp42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/multimedia/recording/qmediacapturesession.cpp b/src/multimedia/recording/qmediacapturesession.cpp
index f2e2c34f7..f0782457a 100644
--- a/src/multimedia/recording/qmediacapturesession.cpp
+++ b/src/multimedia/recording/qmediacapturesession.cpp
@@ -42,6 +42,7 @@
#include "qcamera.h"
#include "qmediaencoder.h"
#include "qcameraimagecapture.h"
+#include "qvideosink.h"
#include "qplatformmediaintegration_p.h"
#include "qplatformmediacapture_p.h"
@@ -56,6 +57,7 @@ public:
QCamera *camera = nullptr;
QCameraImageCapture *imageCapture = nullptr;
QMediaEncoder *encoder = nullptr;
+ QVariant videoOutput;
};
@@ -199,6 +201,32 @@ void QMediaCaptureSession::setEncoder(QMediaEncoder *recorder)
}
/*!
+ Attach a video \a output to the media player.
+
+ If the media player has already video output attached,
+ it will be replaced with a new one.
+*/
+void QMediaCaptureSession::setVideoOutput(const QVariant &output)
+{
+ QVideoSink *s = output.value<QVideoSink *>();
+ if (s) {
+ setVideoOutput(s);
+ return;
+ }
+ QObject *o = output.value<QObject *>();
+ if (o) {
+ setVideoOutput(o);
+ return;
+ }
+}
+
+QVariant QMediaCaptureSession::videoOutput() const
+{
+ Q_D(const QMediaCaptureSession);
+ return d->videoOutput;
+}
+
+/*!
Sets a QObject based video preview for the capture session.
A QObject based preview is expected to have an invokable videoSink()
@@ -206,18 +234,24 @@ void QMediaCaptureSession::setEncoder(QMediaEncoder *recorder)
The previously set preview is detached.
*/
-void QMediaCaptureSession::setVideoPreview(QObject *preview)
+void QMediaCaptureSession::setVideoOutput(QObject *preview)
{
auto *mo = preview->metaObject();
QVideoSink *sink = nullptr;
if (preview)
mo->invokeMethod(preview, "videoSink", Q_RETURN_ARG(QVideoSink *, sink));
- setVideoPreview(sink);
+ setVideoOutput(sink);
}
-void QMediaCaptureSession::setVideoPreview(QVideoSink *preview)
+void QMediaCaptureSession::setVideoOutput(QVideoSink *sink)
{
- d_ptr->captureSession->setVideoPreview(preview);
+ Q_D(QMediaCaptureSession);
+ QVariant out = QVariant::fromValue(sink);
+ if (d->videoOutput == out)
+ return;
+ d->videoOutput = out;
+ d->captureSession->setVideoPreview(sink);
+ emit videoOutputChanged();
}
QPlatformMediaCaptureSession *QMediaCaptureSession::platformSession() const