From 260400d37fc6b3542cea8ec6d3815816009811e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Fri, 30 Jul 2021 16:48:49 +0200 Subject: [PATCH] Fix NPE when setting the camera2 stabilization mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fatal Exception: java.lang.NullPointerException: Attempt to get length of null array at org.webrtc.Camera2Session$CaptureSessionCallback.chooseStabilizationMode(Camera2Session.java:234) at org.webrtc.Camera2Session$CaptureSessionCallback.onConfigured(Camera2Session.java:172) at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigured$0(CallbackProxies.java:53) at android.hardware.camera2.impl.-$$Lambda$CallbackProxies$SessionStateCallbackProxy$soW0qC12Osypoky6AfL3P2-TeDw.run(-.java:4) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.os.HandlerThread.run(HandlerThread.java:65) Bug: webrtc:13032 Change-Id: Ifb6ef920b700ca03d37c64803c0b34230785846f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227292 Reviewed-by: Xavier Lepaul‎ Commit-Queue: Xavier Lepaul‎ Cr-Commit-Position: refs/heads/main@{#34874} --- .../src/java/org/webrtc/Camera2Session.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/sdk/android/src/java/org/webrtc/Camera2Session.java b/sdk/android/src/java/org/webrtc/Camera2Session.java index f8675509f8..d0f92be19d 100644 --- a/sdk/android/src/java/org/webrtc/Camera2Session.java +++ b/sdk/android/src/java/org/webrtc/Camera2Session.java @@ -231,14 +231,16 @@ class Camera2Session implements CameraSession { // If no optical mode is available, try software. final int[] availableVideoStabilization = cameraCharacteristics.get( CameraCharacteristics.CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); - for (int mode : availableVideoStabilization) { - if (mode == CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON) { - captureRequestBuilder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, - CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON); - captureRequestBuilder.set(CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE, - CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_OFF); - Logging.d(TAG, "Using video stabilization."); - return; + if (availableVideoStabilization != null) { + for (int mode : availableVideoStabilization) { + if (mode == CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON) { + captureRequestBuilder.set(CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE, + CaptureRequest.CONTROL_VIDEO_STABILIZATION_MODE_ON); + captureRequestBuilder.set(CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE, + CaptureRequest.LENS_OPTICAL_STABILIZATION_MODE_OFF); + Logging.d(TAG, "Using video stabilization."); + return; + } } } Logging.d(TAG, "Stabilization not available.");