Add onCameraDisconnected camera event.

BUG=webrtc:6334

Review-Url: https://codereview.webrtc.org/2381343002
Cr-Commit-Position: refs/heads/master@{#14540}
This commit is contained in:
sakal 2016-10-06 00:59:10 -07:00 committed by Commit bot
parent 11d37ba862
commit f156bddbc6
7 changed files with 40 additions and 3 deletions

View File

@ -202,8 +202,12 @@ public class Camera1Session implements CameraSession {
Logging.e(TAG, errorMessage); Logging.e(TAG, errorMessage);
state = SessionState.STOPPED; state = SessionState.STOPPED;
stopInternal(); stopInternal();
if (error == android.hardware.Camera.CAMERA_ERROR_EVICTED) {
events.onCameraDisconnected(Camera1Session.this);
} else {
events.onCameraError(Camera1Session.this, errorMessage); events.onCameraError(Camera1Session.this, errorMessage);
} }
}
}); });
if (captureToTexture) { if (captureToTexture) {

View File

@ -98,7 +98,14 @@ public class Camera2Session implements CameraSession {
@Override @Override
public void onDisconnected(CameraDevice camera) { public void onDisconnected(CameraDevice camera) {
checkIsOnCameraThread(); checkIsOnCameraThread();
reportError("Camera disconnected."); final boolean startFailure = (captureSession == null);
state = SessionState.STOPPED;
stopInternal();
if (startFailure) {
callback.onFailure("Camera disconnected / evicted.");
} else {
events.onCameraDisconnected(Camera2Session.this);
}
} }
@Override @Override

View File

@ -118,6 +118,19 @@ public abstract class CameraCapturer implements CameraVideoCapturer {
} }
} }
@Override
public void onCameraDisconnected(CameraSession session) {
checkIsOnCameraThread();
synchronized (stateLock) {
if (session != currentSession) {
Logging.w(TAG, "onCameraDisconnected from another session.");
return;
}
eventsHandler.onCameraDisconnected();
stopCapture();
}
}
@Override @Override
public void onCameraClosed(CameraSession session) { public void onCameraClosed(CameraSession session) {
checkIsOnCameraThread(); checkIsOnCameraThread();
@ -204,6 +217,8 @@ public abstract class CameraCapturer implements CameraVideoCapturer {
@Override @Override
public void onCameraError(String errorDescription) {} public void onCameraError(String errorDescription) {}
@Override @Override
public void onCameraDisconnected() {}
@Override
public void onCameraFreezed(String errorDescription) {} public void onCameraFreezed(String errorDescription) {}
@Override @Override
public void onCameraOpening(String cameraName) {} public void onCameraOpening(String cameraName) {}

View File

@ -21,6 +21,7 @@ public interface CameraSession {
public interface Events { public interface Events {
void onCameraOpening(); void onCameraOpening();
void onCameraError(CameraSession session, String error); void onCameraError(CameraSession session, String error);
void onCameraDisconnected(CameraSession session);
void onCameraClosed(CameraSession session); void onCameraClosed(CameraSession session);
void onByteBufferFrameCaptured( void onByteBufferFrameCaptured(
CameraSession session, byte[] data, int width, int height, int rotation, long timestamp); CameraSession session, byte[] data, int width, int height, int rotation, long timestamp);

View File

@ -25,6 +25,9 @@ public interface CameraVideoCapturer extends VideoCapturer {
// or any camera exception happens on camera thread. // or any camera exception happens on camera thread.
void onCameraError(String errorDescription); void onCameraError(String errorDescription);
// Called when camera is disconnected.
void onCameraDisconnected();
// Invoked when camera stops receiving frames. // Invoked when camera stops receiving frames.
void onCameraFreezed(String errorDescription); void onCameraFreezed(String errorDescription);

View File

@ -95,9 +95,13 @@ public class VideoCapturerAndroid
} }
Logging.e(TAG, errorMessage); Logging.e(TAG, errorMessage);
if (eventsHandler != null) { if (eventsHandler != null) {
if (error == android.hardware.Camera.CAMERA_ERROR_EVICTED) {
eventsHandler.onCameraDisconnected();
} else {
eventsHandler.onCameraError(errorMessage); eventsHandler.onCameraError(errorMessage);
} }
} }
}
}; };
public static VideoCapturerAndroid create(String name, CameraEventsHandler eventsHandler) { public static VideoCapturerAndroid create(String name, CameraEventsHandler eventsHandler) {

View File

@ -195,6 +195,9 @@ class CameraVideoCapturerTestFixtures {
cameraClosed = true; cameraClosed = true;
} }
@Override
public void onCameraDisconnected() {}
@Override @Override
public void onCameraFreezed(String errorDescription) { public void onCameraFreezed(String errorDescription) {
synchronized (onCameraFreezedLock) { synchronized (onCameraFreezedLock) {