Android: fix freeze when taking pictures on some devices
On some devices and on the emulator, the preview callback must be cleared before taking a picture to avoid a camera server freeze. Task-number: QTBUG-54709 Change-Id: I9e4ad417fa08cddea7edfd232f5b5df40ada59ee Reviewed-by: Christian Stromme <christian.stromme@qt.io>
This commit is contained in:
@@ -104,11 +104,16 @@ public class QtCameraListener implements Camera.ShutterCallback,
|
|||||||
return m_previewBytesPerLine;
|
return m_previewBytesPerLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearPreviewCallback(Camera camera)
|
||||||
|
{
|
||||||
|
camera.setPreviewCallbackWithBuffer(null);
|
||||||
|
}
|
||||||
|
|
||||||
public void setupPreviewCallback(Camera camera)
|
public void setupPreviewCallback(Camera camera)
|
||||||
{
|
{
|
||||||
// Clear previous callback (also clears added buffers)
|
// Clear previous callback (also clears added buffers)
|
||||||
|
clearPreviewCallback(camera);
|
||||||
m_lastPreviewBuffer = null;
|
m_lastPreviewBuffer = null;
|
||||||
camera.setPreviewCallbackWithBuffer(null);
|
|
||||||
|
|
||||||
final Camera.Parameters params = camera.getParameters();
|
final Camera.Parameters params = camera.getParameters();
|
||||||
m_previewSize = params.getPreviewSize();
|
m_previewSize = params.getPreviewSize();
|
||||||
|
|||||||
@@ -1436,6 +1436,11 @@ void AndroidCameraPrivate::takePicture()
|
|||||||
{
|
{
|
||||||
QJNIEnvironmentPrivate env;
|
QJNIEnvironmentPrivate env;
|
||||||
|
|
||||||
|
// We must clear the preview callback before calling takePicture(), otherwise the call will
|
||||||
|
// block and the camera server will be frozen until the next device restart...
|
||||||
|
// That problem only happens on some devices and on the emulator
|
||||||
|
m_cameraListener.callMethod<void>("clearPreviewCallback", "(Landroid/hardware/Camera;)V", m_camera.object());
|
||||||
|
|
||||||
m_camera.callMethod<void>("takePicture", "(Landroid/hardware/Camera$ShutterCallback;"
|
m_camera.callMethod<void>("takePicture", "(Landroid/hardware/Camera$ShutterCallback;"
|
||||||
"Landroid/hardware/Camera$PictureCallback;"
|
"Landroid/hardware/Camera$PictureCallback;"
|
||||||
"Landroid/hardware/Camera$PictureCallback;)V",
|
"Landroid/hardware/Camera$PictureCallback;)V",
|
||||||
|
|||||||
Reference in New Issue
Block a user