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 <christian.stromme@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
acbd998749
commit
30cf028fb1
@@ -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),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user