summaryrefslogtreecommitdiffstats
path: root/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2014-12-03 13:10:34 +0100
committerYoann Lopes <yoann.lopes@theqtcompany.com>2014-12-03 14:27:35 +0100
commit3443517265cbe432ada3b857f68ad981af6cd152 (patch)
tree90adbd12e1af0d3d099bc73b6aef7874b59802a9 /src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
parent59f2bf186400241c62a02044265d9ecab81c1749 (diff)
Fix VideoOutput autoOrientation when switching cameras.
The VideoOutput's camera info was not updated when switching cameras. Change-Id: I23537ce98b08009898eaa26ef14d5b9a746ab5f7 Reviewed-by: Andrew Knight <andrew.knight@theqtcompany.com>
Diffstat (limited to 'src/qtmultimediaquicktools/qdeclarativevideooutput.cpp')
-rw-r--r--src/qtmultimediaquicktools/qdeclarativevideooutput.cpp51
1 files changed, 40 insertions, 11 deletions
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
index f94e0e5f4..d7aab6915 100644
--- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
+++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp
@@ -161,8 +161,10 @@ void QDeclarativeVideoOutput::setSource(QObject *source)
if (source == m_source.data())
return;
- if (m_source && m_sourceType == MediaObjectSource)
+ if (m_source && m_sourceType == MediaObjectSource) {
disconnect(m_source.data(), 0, this, SLOT(_q_updateMediaObject()));
+ disconnect(m_source.data(), 0, this, SLOT(_q_updateCameraInfo()));
+ }
if (m_backend)
m_backend->releaseSource();
@@ -183,6 +185,20 @@ void QDeclarativeVideoOutput::setSource(QObject *source)
Qt::DirectConnection, 0);
}
+
+ int deviceIdPropertyIndex = metaObject->indexOfProperty("deviceId");
+ if (deviceIdPropertyIndex != -1) { // Camera source
+ const QMetaProperty deviceIdProperty = metaObject->property(deviceIdPropertyIndex);
+
+ if (deviceIdProperty.hasNotifySignal()) {
+ QMetaMethod method = deviceIdProperty.notifySignal();
+ QMetaObject::connect(m_source.data(), method.methodIndex(),
+ this, this->metaObject()->indexOfSlot("_q_updateCameraInfo()"),
+ Qt::DirectConnection, 0);
+
+ }
+ }
+
m_sourceType = MediaObjectSource;
} else if (metaObject->indexOfProperty("videoSurface") != -1) {
// Make sure our backend is a QDeclarativeVideoRendererBackend
@@ -269,25 +285,38 @@ void QDeclarativeVideoOutput::_q_updateMediaObject()
m_mediaObject.clear();
m_service.clear();
- m_cameraInfo = QCameraInfo();
if (mediaObject) {
if (QMediaService *service = mediaObject->service()) {
if (createBackend(service)) {
m_service = service;
m_mediaObject = mediaObject;
- const QCamera *camera = qobject_cast<const QCamera *>(mediaObject);
- if (camera) {
- m_cameraInfo = QCameraInfo(*camera);
-
- // The camera position and orientation need to be taken into account for
- // the viewport auto orientation
- if (m_autoOrientation)
- _q_screenOrientationChanged(m_screenOrientationHandler->currentOrientation());
- }
}
}
}
+
+ _q_updateCameraInfo();
+}
+
+void QDeclarativeVideoOutput::_q_updateCameraInfo()
+{
+ if (m_mediaObject) {
+ const QCamera *camera = qobject_cast<const QCamera *>(m_mediaObject);
+ if (camera) {
+ QCameraInfo info(*camera);
+
+ if (m_cameraInfo != info) {
+ m_cameraInfo = info;
+
+ // The camera position and orientation need to be taken into account for
+ // the viewport auto orientation
+ if (m_autoOrientation)
+ _q_screenOrientationChanged(m_screenOrientationHandler->currentOrientation());
+ }
+ }
+ } else {
+ m_cameraInfo = QCameraInfo();
+ }
}
/*!