Handle camera1 session creation errors more gracefully

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‎ <xalep@webrtc.org>
Commit-Queue: Xavier Lepaul‎ <xalep@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#34855}
This commit is contained in:
Saúl Ibarra Corretgé
2021-07-30 16:44:01 +02:00
committed by WebRTC LUCI CQ
parent 68952fed31
commit 27edde3182
2 changed files with 12 additions and 5 deletions

View File

@ -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);