Android: fix camera preview showing black frames after restarting it.
authorYoann Lopes <yoann.lopes@digia.com>
Fri, 25 Oct 2013 13:07:02 +0000 (15:07 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 29 Oct 2013 19:26:24 +0000 (20:26 +0100)
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 <christian.stromme@digia.com>
src/plugins/android/src/mediacapture/qandroidcamerafocuscontrol.cpp
src/plugins/android/src/mediacapture/qandroidcamerasession.cpp
src/plugins/android/src/wrappers/jcamera.cpp

index 899a3a4..345a291 100644 (file)
@@ -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),
index 75b0c5e..075fe78 100644 (file)
@@ -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<QSize> 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;
index f858f47..fc9b180 100644 (file)
@@ -261,8 +261,10 @@ void JCamera::setPreviewSize(const QSize &size)
 
     m_previewSize = size;
 
-    m_parameters.callMethod<void>("setPreviewSize", "(II)V", size.width(), size.height());
-    applyParameters();
+    if (m_previewSize.isValid()) {
+        m_parameters.callMethod<void>("setPreviewSize", "(II)V", size.width(), size.height());
+        applyParameters();
+    }
 
     emit previewSizeChanged();
 }