From 27edde3182ccc9c6afcd65b7e6d8b6558cb49d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= Date: Fri, 30 Jul 2021 16:44:01 +0200 Subject: [PATCH] Handle camera1 session creation errors more gracefully MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Specifically, defer getting the camera index so the error can be reported instead of crashing: Fatal Exception: java.lang.IllegalArgumentException: No such camera: Camera 1, Facing front, Orientation 270 at org.webrtc.Camera1Enumerator.getCameraIndex(Camera1Enumerator.java:170) at org.webrtc.Camera1Capturer.createCameraSession(Camera1Capturer.java:31) at org.webrtc.CameraCapturer$5.run(CameraCapturer.java:272) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:214) at android.os.HandlerThread.run(HandlerThread.java:65) Bug: webrtc:13032 Change-Id: Ida6bc65046770c11c2b3ee832906e8454cec10df Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227290 Reviewed-by: Xavier Lepaul‎ Commit-Queue: Xavier Lepaul‎ Cr-Commit-Position: refs/heads/main@{#34855} --- sdk/android/api/org/webrtc/Camera1Capturer.java | 3 +-- .../src/java/org/webrtc/Camera1Session.java | 14 +++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/sdk/android/api/org/webrtc/Camera1Capturer.java b/sdk/android/api/org/webrtc/Camera1Capturer.java index a427c607f7..de172aa1d7 100644 --- a/sdk/android/api/org/webrtc/Camera1Capturer.java +++ b/sdk/android/api/org/webrtc/Camera1Capturer.java @@ -28,7 +28,6 @@ public class Camera1Capturer extends CameraCapturer { SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height, int framerate) { Camera1Session.create(createSessionCallback, events, captureToTexture, applicationContext, - surfaceTextureHelper, Camera1Enumerator.getCameraIndex(cameraName), width, height, - framerate); + surfaceTextureHelper, cameraName, width, height, framerate); } } diff --git a/sdk/android/src/java/org/webrtc/Camera1Session.java b/sdk/android/src/java/org/webrtc/Camera1Session.java index 6daaa27f1d..7b4f6cab4f 100644 --- a/sdk/android/src/java/org/webrtc/Camera1Session.java +++ b/sdk/android/src/java/org/webrtc/Camera1Session.java @@ -52,12 +52,20 @@ class Camera1Session implements CameraSession { @SuppressWarnings("ByteBufferBackingArray") public static void create(final CreateSessionCallback callback, final Events events, final boolean captureToTexture, final Context applicationContext, - final SurfaceTextureHelper surfaceTextureHelper, final int cameraId, final int width, - final int height, final int framerate) { + final SurfaceTextureHelper surfaceTextureHelper, final String cameraName, + final int width, final int height, final int framerate) { final long constructionTimeNs = System.nanoTime(); - Logging.d(TAG, "Open camera " + cameraId); + Logging.d(TAG, "Open camera " + cameraName); events.onCameraOpening(); + final int cameraId; + try { + cameraId = Camera1Enumerator.getCameraIndex(cameraName); + } catch (IllegalArgumentException e) { + callback.onFailure(FailureType.ERROR, e.getMessage()); + return; + } + final android.hardware.Camera camera; try { camera = android.hardware.Camera.open(cameraId);