summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2014-05-16 14:17:03 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-06-05 11:42:16 +0200
commita3a66701722c780457b26d3d446b7bf19cf50804 (patch)
tree7cb7b3b981f76a224ef918e03df12c9c6019a51c /src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
parentcf4aba93e4c67395c53bc758138c0c16658093c3 (diff)
Android: don't start camera preview until the viewfinder is ready.
If no video output is set for a camera, don't try to start the camera and report an error. If the video output is not ready, delay starting until it is. Change-Id: Id08e31a4e795b71ac036a6532e9499ca5670d790 Reviewed-by: Christian Stromme <christian.stromme@digia.com>
Diffstat (limited to 'src/plugins/android/src/mediacapture/qandroidcamerasession.cpp')
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerasession.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
index a2eba13f3..963952294 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
@@ -168,10 +168,12 @@ void QAndroidCameraSession::setState(QCamera::State state)
emit error(QCamera::CameraError, QStringLiteral("Failed to open camera"));
return;
}
- if (state == QCamera::ActiveState)
- startPreview();
- else if (state == QCamera::LoadedState)
+ if (state == QCamera::ActiveState) {
+ if (!startPreview())
+ return;
+ } else if (state == QCamera::LoadedState) {
stopPreview();
+ }
break;
}
@@ -316,10 +318,23 @@ void QAndroidCameraSession::adjustViewfinderSize(const QSize &captureSize, bool
}
}
-void QAndroidCameraSession::startPreview()
+bool QAndroidCameraSession::startPreview()
{
- if (!m_camera || m_previewStarted)
- return;
+ if (!m_camera)
+ return false;
+
+ if (!m_videoOutput) {
+ Q_EMIT error(QCamera::InvalidRequestError, tr("Camera cannot be started without a viewfinder."));
+ return false;
+ }
+
+ if (m_previewStarted)
+ return true;
+
+ if (m_videoOutput->isReady())
+ m_camera->setPreviewTexture(m_videoOutput->surfaceTexture());
+ else
+ return true; // delay starting until the video output is ready
m_status = QCamera::StartingStatus;
emit statusChanged(m_status);
@@ -327,13 +342,12 @@ void QAndroidCameraSession::startPreview()
applyImageSettings();
adjustViewfinderSize(m_imageSettings.resolution());
- if (m_videoOutput && m_videoOutput->isReady())
- onVideoOutputReady(true);
-
AndroidMultimediaUtils::enableOrientationListener(true);
m_camera->startPreview();
m_previewStarted = true;
+
+ return true;
}
void QAndroidCameraSession::stopPreview()
@@ -683,8 +697,8 @@ QImage QAndroidCameraSession::prepareImageFromPreviewData(const QByteArray &data
void QAndroidCameraSession::onVideoOutputReady(bool ready)
{
- if (m_camera && m_videoOutput && ready)
- m_camera->setPreviewTexture(m_videoOutput->surfaceTexture());
+ if (ready && m_state == QCamera::ActiveState)
+ startPreview();
}
void QAndroidCameraSession::onApplicationStateChanged(Qt::ApplicationState state)