Merge remote-tracking branch 'origin/5.4' into 5.5
Conflicts: qtmultimedia.pro src/gsttools/qgstreamervideowidget.cpp src/plugins/gstreamer/camerabin/camerabinservice.cpp Change-Id: I883f20dc17924ab42514a1aa00d16675a0f13d99
This commit is contained in:
@@ -15,8 +15,8 @@ win32 {
|
||||
} else:qnx {
|
||||
qtCompileTest(mmrenderer)
|
||||
} else {
|
||||
qtCompileTest(alsa)
|
||||
qtCompileTest(pulseaudio)
|
||||
contains(QT_CONFIG, alsa):qtCompileTest(alsa)
|
||||
contains(QT_CONFIG, pulseaudio):qtCompileTest(pulseaudio)
|
||||
|
||||
isEmpty(GST_VERSION) {
|
||||
contains(QT_CONFIG, gstreamer-0.10) {
|
||||
|
||||
@@ -98,6 +98,22 @@ QGstreamerVideoWidgetControl::QGstreamerVideoWidgetControl(QObject *parent)
|
||||
, m_widget(0)
|
||||
, m_fullScreen(false)
|
||||
{
|
||||
m_videoSink = gst_element_factory_make ("xvimagesink", NULL);
|
||||
|
||||
if (!m_videoSink)
|
||||
m_videoSink = gst_element_factory_make ("ximagesink", NULL);
|
||||
|
||||
if (m_videoSink) {
|
||||
// Check if the xv sink is usable
|
||||
if (gst_element_set_state(m_videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) {
|
||||
gst_object_unref(GST_OBJECT(m_videoSink));
|
||||
m_videoSink = 0;
|
||||
} else {
|
||||
gst_element_set_state(m_videoSink, GST_STATE_NULL);
|
||||
g_object_set(G_OBJECT(m_videoSink), "force-aspect-ratio", 1, (const char*)NULL);
|
||||
qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QGstreamerVideoWidgetControl::~QGstreamerVideoWidgetControl()
|
||||
@@ -110,36 +126,17 @@ QGstreamerVideoWidgetControl::~QGstreamerVideoWidgetControl()
|
||||
|
||||
void QGstreamerVideoWidgetControl::createVideoWidget()
|
||||
{
|
||||
if (m_widget)
|
||||
if (!m_videoSink || m_widget)
|
||||
return;
|
||||
|
||||
m_widget = new QGstreamerVideoWidget;
|
||||
|
||||
m_widget->installEventFilter(this);
|
||||
m_windowId = m_widget->winId();
|
||||
|
||||
m_videoSink = gst_element_factory_make ("xvimagesink", NULL);
|
||||
if (m_videoSink) {
|
||||
// Check if the xv sink is usable
|
||||
if (gst_element_set_state(m_videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) {
|
||||
gst_object_unref(GST_OBJECT(m_videoSink));
|
||||
m_videoSink = 0;
|
||||
} else {
|
||||
gst_element_set_state(m_videoSink, GST_STATE_NULL);
|
||||
|
||||
g_object_set(G_OBJECT(m_videoSink), "force-aspect-ratio", 1, (const char*)NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_videoSink)
|
||||
m_videoSink = gst_element_factory_make ("ximagesink", NULL);
|
||||
|
||||
qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership
|
||||
}
|
||||
|
||||
GstElement *QGstreamerVideoWidgetControl::videoSink()
|
||||
{
|
||||
createVideoWidget();
|
||||
return m_videoSink;
|
||||
}
|
||||
|
||||
|
||||
@@ -124,8 +124,22 @@ 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);
|
||||
|
||||
@@ -48,6 +48,7 @@ class CameraBinControl;
|
||||
class QGstreamerMessage;
|
||||
class QGstreamerBusHelper;
|
||||
class QGstreamerVideoRenderer;
|
||||
class QGstreamerVideoWindow;
|
||||
class QGstreamerVideoWidgetControl;
|
||||
class QGstreamerElementFactory;
|
||||
class CameraBinMetaData;
|
||||
@@ -81,7 +82,7 @@ private:
|
||||
QMediaControl *m_videoOutput;
|
||||
|
||||
QMediaControl *m_videoRenderer;
|
||||
QMediaControl *m_videoWindow;
|
||||
QGstreamerVideoWindow *m_videoWindow;
|
||||
#if defined(HAVE_WIDGETS)
|
||||
QGstreamerVideoWidgetControl *m_videoWidgetControl;
|
||||
#endif
|
||||
|
||||
@@ -100,10 +100,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);
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ class QGstreamerCameraControl;
|
||||
class QGstreamerMessage;
|
||||
class QGstreamerBusHelper;
|
||||
class QGstreamerVideoRenderer;
|
||||
class QGstreamerVideoWindow;
|
||||
class QGstreamerVideoWidgetControl;
|
||||
class QGstreamerElementFactory;
|
||||
class QGstreamerCaptureMetaDataControl;
|
||||
@@ -82,9 +83,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;
|
||||
|
||||
|
||||
@@ -99,9 +99,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
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ class QGstreamerPlayerSession;
|
||||
class QGstreamerMetaDataProvider;
|
||||
class QGstreamerStreamsControl;
|
||||
class QGstreamerVideoRenderer;
|
||||
class QGstreamerVideoWindow;
|
||||
class QGstreamerVideoWidgetControl;
|
||||
class QGStreamerAvailabilityControl;
|
||||
class QGstreamerAudioProbeControl;
|
||||
@@ -77,9 +78,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();
|
||||
|
||||
Reference in New Issue
Block a user