From 322d66490767504890ba175f57d299fe10eee6ff Mon Sep 17 00:00:00 2001 From: panmari Date: Fri, 26 Jun 2020 10:47:52 +0200 Subject: [PATCH] [camera] Adding check for null before creating capture session. Occasionally leads to NullPointerException (potentially due to some race condition, hard to reproduce deterministically). Example stack trace: E/AndroidRuntime( 5679): java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Surface android.media.ImageReader.getSurface()' on a null object reference E/AndroidRuntime( 5679): at io.flutter.plugins.camera.Camera.startPreview(Camera.java:424) E/AndroidRuntime( 5679): at io.flutter.plugins.camera.Camera$2.onOpened(Camera.java:160) E/AndroidRuntime( 5679): at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:145) E/AndroidRuntime( 5679): at android.os.Handler.handleCallback(Handler.java:883) E/AndroidRuntime( 5679): at android.os.Handler.dispatchMessage(Handler.java:100) E/AndroidRuntime( 5679): at android.os.Looper.loop(Looper.java:214) E/AndroidRuntime( 5679): at android.app.ActivityThread.main(ActivityThread.java:7356) E/AndroidRuntime( 5679): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 5679): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) E/AndroidRuntime( 5679): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) --- packages/camera/CHANGELOG.md | 4 ++++ .../src/main/java/io/flutter/plugins/camera/Camera.java | 4 +++- packages/camera/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index d405812bce6a..f9e8f9b0a322 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.9 + +* Fix rare nullptr exception on Android. + ## 0.5.8+6 * Avoiding uses or overrides a deprecated API in CameraPlugin.java. diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java index 0fcda278d836..9fbae5187ac4 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/Camera.java @@ -421,7 +421,9 @@ public void resumeVideoRecording(@NonNull final Result result) { } public void startPreview() throws CameraAccessException { - createCaptureSession(CameraDevice.TEMPLATE_PREVIEW, pictureImageReader.getSurface()); + if (pictureImageReader != null) { + createCaptureSession(CameraDevice.TEMPLATE_PREVIEW, pictureImageReader.getSurface()); + } } public void startPreviewWithImageStream(EventChannel imageStreamChannel) diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 9d1f7880df2d..2678569faf9a 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.5.8+6 +version: 0.5.9 homepage: https://github.com/flutter/plugins/tree/master/packages/camera