summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinservice.cpp14
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinservice.h3
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp15
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h5
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp14
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h5
6 files changed, 51 insertions, 5 deletions
diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.cpp b/src/plugins/gstreamer/camerabin/camerabinservice.cpp
index 969955f8a..e4aa594d5 100644
--- a/src/plugins/gstreamer/camerabin/camerabinservice.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinservice.cpp
@@ -121,9 +121,23 @@ CameraBinService::CameraBinService(GstElementFactory *sourceFactory, QObject *pa
#else
m_videoWindow = new QGstreamerVideoWindow(this);
#endif
+ // If the GStreamer sink element is not available (xvimagesink), don't provide
+ // the video window control since it won't work anyway.
+ if (!m_videoWindow->videoSink()) {
+ delete m_videoWindow;
+ m_videoWindow = 0;
+ }
#if defined(HAVE_WIDGETS)
m_videoWidgetControl = new QGstreamerVideoWidgetControl(this);
+
+ // If the GStreamer sink element is not available (xvimagesink or ximagesink), don't provide
+ // the video widget control since it won't work anyway.
+ // QVideoWidget will fall back to QVideoRendererControl in that case.
+ if (!m_videoWidgetControl->videoSink()) {
+ delete m_videoWidgetControl;
+ m_videoWidgetControl = 0;
+ }
#endif
m_audioInputSelector = new QGstreamerAudioInputSelector(this);
diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.h b/src/plugins/gstreamer/camerabin/camerabinservice.h
index cadae6e88..a38e36034 100644
--- a/src/plugins/gstreamer/camerabin/camerabinservice.h
+++ b/src/plugins/gstreamer/camerabin/camerabinservice.h
@@ -48,6 +48,7 @@ class CameraBinControl;
class QGstreamerMessage;
class QGstreamerBusHelper;
class QGstreamerVideoRenderer;
+class QGstreamerVideoWindow;
class QGstreamerVideoWidgetControl;
class QGstreamerElementFactory;
class CameraBinMetaData;
@@ -79,7 +80,7 @@ private:
QMediaControl *m_videoOutput;
QMediaControl *m_videoRenderer;
- QMediaControl *m_videoWindow;
+ QGstreamerVideoWindow *m_videoWindow;
#if defined(HAVE_WIDGETS)
QGstreamerVideoWidgetControl *m_videoWidgetControl;
#endif
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
index 97a165dca..e77feebc5 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
@@ -102,10 +102,25 @@ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObje
m_videoInput->setDevice(m_videoInputDevice->deviceName(m_videoInputDevice->selectedDevice()));
m_videoRenderer = new QGstreamerVideoRenderer(this);
+
m_videoWindow = new QGstreamerVideoWindow(this);
+ // If the GStreamer sink element is not available (xvimagesink), don't provide
+ // the video window control since it won't work anyway.
+ if (!m_videoWindow->videoSink()) {
+ delete m_videoWindow;
+ m_videoWindow = 0;
+ }
#if defined(HAVE_WIDGETS)
m_videoWidgetControl = new QGstreamerVideoWidgetControl(this);
+
+ // If the GStreamer sink element is not available (xvimagesink or ximagesink), don't provide
+ // the video widget control since it won't work anyway.
+ // QVideoWidget will fall back to QVideoRendererControl in that case.
+ if (!m_videoWidgetControl->videoSink()) {
+ delete m_videoWidgetControl;
+ m_videoWidgetControl = 0;
+ }
#endif
m_imageCaptureControl = new QGstreamerImageCaptureControl(m_captureSession);
}
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
index 7ff8ce253..e5166d13b 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
+++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.h
@@ -48,6 +48,7 @@ class QGstreamerCameraControl;
class QGstreamerMessage;
class QGstreamerBusHelper;
class QGstreamerVideoRenderer;
+class QGstreamerVideoWindow;
class QGstreamerVideoWidgetControl;
class QGstreamerElementFactory;
class QGstreamerCaptureMetaDataControl;
@@ -81,9 +82,9 @@ private:
QMediaControl *m_videoOutput;
QGstreamerVideoRenderer *m_videoRenderer;
- QMediaControl *m_videoWindow;
+ QGstreamerVideoWindow *m_videoWindow;
#if defined(HAVE_WIDGETS)
- QMediaControl *m_videoWidgetControl;
+ QGstreamerVideoWidgetControl *m_videoWidgetControl;
#endif
QGstreamerImageCaptureControl *m_imageCaptureControl;
};
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index ce267d737..ddc828eb2 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -91,9 +91,23 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
#else
m_videoWindow = new QGstreamerVideoWindow(this);
#endif
+ // If the GStreamer sink element is not available (xvimagesink), don't provide
+ // the video window control since it won't work anyway.
+ if (!m_videoWindow->videoSink()) {
+ delete m_videoWindow;
+ m_videoWindow = 0;
+ }
#if defined(HAVE_WIDGETS)
m_videoWidget = new QGstreamerVideoWidgetControl(this);
+
+ // If the GStreamer sink element is not available (xvimagesink or ximagesink), don't provide
+ // the video widget control since it won't work anyway.
+ // QVideoWidget will fall back to QVideoRendererControl in that case.
+ if (!m_videoWidget->videoSink()) {
+ delete m_videoWidget;
+ m_videoWidget = 0;
+ }
#endif
}
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
index f3081e986..0c5b40641 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.h
@@ -50,6 +50,7 @@ class QGstreamerPlayerSession;
class QGstreamerMetaDataProvider;
class QGstreamerStreamsControl;
class QGstreamerVideoRenderer;
+class QGstreamerVideoWindow;
class QGstreamerVideoWidgetControl;
class QGStreamerAvailabilityControl;
@@ -72,9 +73,9 @@ private:
QMediaControl *m_videoOutput;
QMediaControl *m_videoRenderer;
- QMediaControl *m_videoWindow;
+ QGstreamerVideoWindow *m_videoWindow;
#if defined(HAVE_WIDGETS)
- QMediaControl *m_videoWidget;
+ QGstreamerVideoWidgetControl *m_videoWidget;
#endif
void increaseVideoRef();