diff --git a/webrtc/sdk/android/api/org/webrtc/Camera1Session.java b/webrtc/sdk/android/api/org/webrtc/Camera1Session.java index 8f2988642f..8d81d2d86a 100644 --- a/webrtc/sdk/android/api/org/webrtc/Camera1Session.java +++ b/webrtc/sdk/android/api/org/webrtc/Camera1Session.java @@ -65,7 +65,7 @@ public class Camera1Session implements CameraSession { try { camera = android.hardware.Camera.open(cameraId); } catch (RuntimeException e) { - callback.onFailure(e.getMessage()); + callback.onFailure(FailureType.ERROR, e.getMessage()); return; } @@ -73,7 +73,7 @@ public class Camera1Session implements CameraSession { camera.setPreviewTexture(surfaceTextureHelper.getSurfaceTexture()); } catch (IOException e) { camera.release(); - callback.onFailure(e.getMessage()); + callback.onFailure(FailureType.ERROR, e.getMessage()); return; } diff --git a/webrtc/sdk/android/api/org/webrtc/Camera2Session.java b/webrtc/sdk/android/api/org/webrtc/Camera2Session.java index a8e992d802..0ef3e42d15 100644 --- a/webrtc/sdk/android/api/org/webrtc/Camera2Session.java +++ b/webrtc/sdk/android/api/org/webrtc/Camera2Session.java @@ -101,7 +101,7 @@ public class Camera2Session implements CameraSession { state = SessionState.STOPPED; stopInternal(); if (startFailure) { - callback.onFailure("Camera disconnected / evicted."); + callback.onFailure(FailureType.DISCONNECTED, "Camera disconnected / evicted."); } else { events.onCameraDisconnected(Camera2Session.this); } @@ -406,7 +406,7 @@ public class Camera2Session implements CameraSession { state = SessionState.STOPPED; stopInternal(); if (startFailure) { - callback.onFailure(error); + callback.onFailure(FailureType.ERROR, error); } else { events.onCameraError(this, error); } diff --git a/webrtc/sdk/android/api/org/webrtc/CameraCapturer.java b/webrtc/sdk/android/api/org/webrtc/CameraCapturer.java index fcfcd70e86..e80b0630d1 100644 --- a/webrtc/sdk/android/api/org/webrtc/CameraCapturer.java +++ b/webrtc/sdk/android/api/org/webrtc/CameraCapturer.java @@ -61,7 +61,7 @@ public abstract class CameraCapturer implements CameraVideoCapturer { } @Override - public void onFailure(String error) { + public void onFailure(CameraSession.FailureType failureType, String error) { checkIsOnCameraThread(); uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable); synchronized (stateLock) { @@ -81,7 +81,11 @@ public abstract class CameraCapturer implements CameraVideoCapturer { switchState = SwitchState.IDLE; } - eventsHandler.onCameraError(error); + if (failureType == CameraSession.FailureType.DISCONNECTED) { + eventsHandler.onCameraDisconnected(); + } else { + eventsHandler.onCameraError(error); + } } else { Logging.w(TAG, "Opening camera failed, retry: " + error); diff --git a/webrtc/sdk/android/api/org/webrtc/CameraSession.java b/webrtc/sdk/android/api/org/webrtc/CameraSession.java index 7feb0462ce..4c28b2d5d2 100644 --- a/webrtc/sdk/android/api/org/webrtc/CameraSession.java +++ b/webrtc/sdk/android/api/org/webrtc/CameraSession.java @@ -11,10 +11,12 @@ package org.webrtc; public interface CameraSession { + enum FailureType { ERROR, DISCONNECTED } + // Callbacks are fired on the camera thread. public interface CreateSessionCallback { void onDone(CameraSession session); - void onFailure(String error); + void onFailure(FailureType failureType, String error); } // Events are fired on the camera thread.