summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
diff options
context:
space:
mode:
authorDenis Kormalev <kormalev.denis@gmail.com>2013-12-16 12:54:17 +0400
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-12-23 12:17:58 +0100
commita0df6c38364c87001258fe9f2375a2bd34ce4cfc (patch)
tree9293770f5b9a1cc7c303278db993ca2a3e2fae5a /src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
parentecce937a054e4a96597cb13c40d216bddbd45891 (diff)
Android: camera moved to a dedicated thread
Actual camera work moved to JCameraWorker which lives in dedicated thread. JCamera now acts as proxy calling JCameraWorker methods with invokeMethod (when it is needed). [ChangeLog][QtMultimedia][Android] camera operations moved to a dedicated thread Task-number: QTBUG-35564 Change-Id: Ie4edcbf0869d56b0fef4ad0c820450cc77657fdd Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
Diffstat (limited to 'src/plugins/android/src/mediacapture/qandroidcamerasession.cpp')
-rw-r--r--src/plugins/android/src/mediacapture/qandroidcamerasession.cpp41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
index 55065cb46..cb5282394 100644
--- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
+++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
@@ -182,7 +182,10 @@ bool QAndroidCameraSession::open()
if (m_camera) {
connect(m_camera, SIGNAL(pictureExposed()), this, SLOT(onCameraPictureExposed()));
+ connect(m_camera, SIGNAL(previewFetched(QByteArray)), this, SLOT(onCameraPreviewFetched(QByteArray)));
connect(m_camera, SIGNAL(pictureCaptured(QByteArray)), this, SLOT(onCameraPictureCaptured(QByteArray)));
+ connect(m_camera, SIGNAL(previewStarted()), this, SLOT(onCameraPreviewStarted()));
+ connect(m_camera, SIGNAL(previewStopped()), this, SLOT(onCameraPreviewStopped()));
m_nativeOrientation = m_camera->getNativeOrientation();
@@ -309,11 +312,6 @@ void QAndroidCameraSession::startPreview()
m_camera->startPreview();
m_previewStarted = true;
-
- m_status = QCamera::ActiveStatus;
- emit statusChanged(m_status);
-
- setReadyForCapture(true);
}
void QAndroidCameraSession::stopPreview()
@@ -331,11 +329,6 @@ void QAndroidCameraSession::stopPreview()
if (m_videoOutput)
m_videoOutput->stop();
m_previewStarted = false;
-
- m_status = QCamera::LoadedStatus;
- emit statusChanged(m_status);
-
- setReadyForCapture(false);
}
void QAndroidCameraSession::setImageSettings(const QImageEncoderSettings &settings)
@@ -507,11 +500,15 @@ void QAndroidCameraSession::onCameraPictureExposed()
return;
emit imageExposed(m_currentImageCaptureId);
- QByteArray lastFrame = m_camera->fetchLastPreviewFrame();
- if (lastFrame.size()) {
+ m_camera->fetchLastPreviewFrame();
+}
+
+void QAndroidCameraSession::onCameraPreviewFetched(const QByteArray &preview)
+{
+ if (preview.size()) {
QtConcurrent::run(this, &QAndroidCameraSession::processPreviewImage,
m_currentImageCaptureId,
- lastFrame,
+ preview,
m_camera->getRotation());
}
}
@@ -532,10 +529,28 @@ void QAndroidCameraSession::onCameraPictureCaptured(const QByteArray &data)
// Preview needs to be restarted after taking a picture
m_camera->startPreview();
+}
+
+void QAndroidCameraSession::onCameraPreviewStarted()
+{
+ if (m_status == QCamera::StartingStatus) {
+ m_status = QCamera::ActiveStatus;
+ emit statusChanged(m_status);
+ }
setReadyForCapture(true);
}
+void QAndroidCameraSession::onCameraPreviewStopped()
+{
+ if (m_status == QCamera::StoppingStatus) {
+ m_status = QCamera::LoadedStatus;
+ emit statusChanged(m_status);
+ }
+
+ setReadyForCapture(false);
+}
+
void QAndroidCameraSession::processCapturedImage(int id,
const QByteArray &data,
const QSize &resolution,