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:
committed by
WebRTC LUCI CQ
parent
68952fed31
commit
27edde3182
@ -28,7 +28,6 @@ public class Camera1Capturer extends CameraCapturer {
|
|||||||
SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height,
|
SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height,
|
||||||
int framerate) {
|
int framerate) {
|
||||||
Camera1Session.create(createSessionCallback, events, captureToTexture, applicationContext,
|
Camera1Session.create(createSessionCallback, events, captureToTexture, applicationContext,
|
||||||
surfaceTextureHelper, Camera1Enumerator.getCameraIndex(cameraName), width, height,
|
surfaceTextureHelper, cameraName, width, height, framerate);
|
||||||
framerate);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,12 +52,20 @@ class Camera1Session implements CameraSession {
|
|||||||
@SuppressWarnings("ByteBufferBackingArray")
|
@SuppressWarnings("ByteBufferBackingArray")
|
||||||
public static void create(final CreateSessionCallback callback, final Events events,
|
public static void create(final CreateSessionCallback callback, final Events events,
|
||||||
final boolean captureToTexture, final Context applicationContext,
|
final boolean captureToTexture, final Context applicationContext,
|
||||||
final SurfaceTextureHelper surfaceTextureHelper, final int cameraId, final int width,
|
final SurfaceTextureHelper surfaceTextureHelper, final String cameraName,
|
||||||
final int height, final int framerate) {
|
final int width, final int height, final int framerate) {
|
||||||
final long constructionTimeNs = System.nanoTime();
|
final long constructionTimeNs = System.nanoTime();
|
||||||
Logging.d(TAG, "Open camera " + cameraId);
|
Logging.d(TAG, "Open camera " + cameraName);
|
||||||
events.onCameraOpening();
|
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;
|
final android.hardware.Camera camera;
|
||||||
try {
|
try {
|
||||||
camera = android.hardware.Camera.open(cameraId);
|
camera = android.hardware.Camera.open(cameraId);
|
||||||
|
|||||||
Reference in New Issue
Block a user