diff options
author | Denis Kormalev <kormalev.denis@gmail.com> | 2013-12-16 12:54:17 +0400 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-23 12:17:58 +0100 |
commit | a0df6c38364c87001258fe9f2375a2bd34ce4cfc (patch) | |
tree | 9293770f5b9a1cc7c303278db993ca2a3e2fae5a /src/plugins/android/src/mediacapture/qandroidcamerasession.cpp | |
parent | ecce937a054e4a96597cb13c40d216bddbd45891 (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.cpp | 41 |
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, |