From 30cf028fb158f08bc01357476f73426c43c35b4e Mon Sep 17 00:00:00 2001 From: Yoann Lopes Date: Fri, 25 Oct 2013 15:07:02 +0200 Subject: [PATCH] Android: fix camera preview showing black frames after restarting it. Clear the camera preview size when stopping the preview in order to force it to be reset when starting it again. Task-number: QTBUG-34346 Change-Id: I0edf8d996348745b9aa7cf0790c16b6cd813b33b Reviewed-by: Christian Stromme --- .../android/src/mediacapture/qandroidcamerafocuscontrol.cpp | 4 ++++ .../android/src/mediacapture/qandroidcamerasession.cpp | 6 +++++- src/plugins/android/src/wrappers/jcamera.cpp | 6 ++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp index 899a3a49..345a2917 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp @@ -238,6 +238,10 @@ void QAndroidCameraFocusControl::updateFocusZones(QCameraFocusZone::FocusZoneSta return; QSize viewportSize = m_session->camera()->previewSize(); + + if (!viewportSize.isValid()) + return; + QSizeF focusSize(50.f / viewportSize.width(), 50.f / viewportSize.height()); float x = qBound(qreal(0), m_actualFocusPoint.x() - (focusSize.width() / 2), diff --git a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp index 75b0c5e9..075fe78e 100644 --- a/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp +++ b/src/plugins/android/src/mediacapture/qandroidcamerasession.cpp @@ -205,8 +205,11 @@ void QAndroidCameraSession::adjustViewfinderSize(const QSize &captureSize, bool QSize viewfinderResolution = m_camera->previewSize(); const qreal aspectRatio = qreal(captureSize.width()) / qreal(captureSize.height()); - if (qFuzzyCompare(aspectRatio, qreal(viewfinderResolution.width()) / qreal(viewfinderResolution.height()))) + if (viewfinderResolution.isValid() && + qFuzzyCompare(aspectRatio, + qreal(viewfinderResolution.width()) / viewfinderResolution.height())) { return; + } QList previewSizes = m_camera->getSupportedPreviewSizes(); for (int i = previewSizes.count() - 1; i >= 0; --i) { @@ -270,6 +273,7 @@ void QAndroidCameraSession::stopPreview() JMultimediaUtils::enableOrientationListener(false); m_camera->stopPreview(); + m_camera->setPreviewSize(QSize()); if (m_videoOutput) m_videoOutput->stop(); m_previewStarted = false; diff --git a/src/plugins/android/src/wrappers/jcamera.cpp b/src/plugins/android/src/wrappers/jcamera.cpp index f858f470..fc9b1806 100644 --- a/src/plugins/android/src/wrappers/jcamera.cpp +++ b/src/plugins/android/src/wrappers/jcamera.cpp @@ -261,8 +261,10 @@ void JCamera::setPreviewSize(const QSize &size) m_previewSize = size; - m_parameters.callMethod("setPreviewSize", "(II)V", size.width(), size.height()); - applyParameters(); + if (m_previewSize.isValid()) { + m_parameters.callMethod("setPreviewSize", "(II)V", size.width(), size.height()); + applyParameters(); + } emit previewSizeChanged(); }