From 1460e15a45525a2d2f5b6957b79c8a84dd94d4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Thu, 26 Aug 2021 11:11:23 +0200 Subject: [PATCH] Fix NPE when converting camera2 supported sizes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StreamConfigurationMap.getOutputSizes() may return null: https://developer.android.com/reference/android/hardware/camera2/params/StreamConfigurationMap#getOutputSizes(java.lang.Class%3CT%3E) Fixes: Fatal Exception: java.lang.NullPointerException: Attempt to get length of null array at org.webrtc.Camera2Enumerator.convertSizes(Camera2Enumerator.java:234) at org.webrtc.Camera2Enumerator.getSupportedSizes(Camera2Enumerator.java:147) at org.webrtc.Camera2Session.findCaptureFormat(Camera2Session.java:325) at org.webrtc.Camera2Session.start(Camera2Session.java:313) at org.webrtc.Camera2Session.(Camera2Session.java:296) at org.webrtc.Camera2Session.create(Camera2Session.java:274) at org.webrtc.Camera2Capturer.createCameraSession(Camera2Capturer.java:35) at org.webrtc.CameraCapturer$5.run(CameraCapturer.java:272) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:237) at android.os.HandlerThread.run(HandlerThread.java:67) Bug: webrtc:13032 Change-Id: I9154be567cd12c066087818ba22e9cd69e75a22f Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227291 Reviewed-by: Xavier Lepaul‎ Commit-Queue: Xavier Lepaul‎ Cr-Commit-Position: refs/heads/main@{#34872} --- sdk/android/api/org/webrtc/Camera2Enumerator.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/android/api/org/webrtc/Camera2Enumerator.java b/sdk/android/api/org/webrtc/Camera2Enumerator.java index 8823c4c740..961ab753aa 100644 --- a/sdk/android/api/org/webrtc/Camera2Enumerator.java +++ b/sdk/android/api/org/webrtc/Camera2Enumerator.java @@ -24,6 +24,7 @@ import android.util.AndroidException; import android.util.Range; import androidx.annotation.Nullable; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -230,7 +231,10 @@ public class Camera2Enumerator implements CameraEnumerator { // Convert from android.util.Size to Size. private static List convertSizes(android.util.Size[] cameraSizes) { - final List sizes = new ArrayList(); + if (cameraSizes == null || cameraSizes.length == 0) { + return Collections.emptyList(); + } + final List sizes = new ArrayList<>(cameraSizes.length); for (android.util.Size size : cameraSizes) { sizes.add(new Size(size.getWidth(), size.getHeight())); }