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,7 +202,11 @@ public class Camera1Session implements CameraSession {
Logging.e(TAG, errorMessage);
state = SessionState.STOPPED;
stopInternal();
events.onCameraError(Camera1Session.this, errorMessage);
if (error == android.hardware.Camera.CAMERA_ERROR_EVICTED) {
events.onCameraDisconnected(Camera1Session.this);
} else {
events.onCameraError(Camera1Session.this, errorMessage);
}
}
});

View File

@ -98,7 +98,14 @@ public class Camera2Session implements CameraSession {
@Override
public void onDisconnected(CameraDevice camera) {
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

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
public void onCameraClosed(CameraSession session) {
checkIsOnCameraThread();
@ -204,6 +217,8 @@ public abstract class CameraCapturer implements CameraVideoCapturer {
@Override
public void onCameraError(String errorDescription) {}
@Override
public void onCameraDisconnected() {}
@Override
public void onCameraFreezed(String errorDescription) {}
@Override
public void onCameraOpening(String cameraName) {}

View File

@ -21,6 +21,7 @@ public interface CameraSession {
public interface Events {
void onCameraOpening();
void onCameraError(CameraSession session, String error);
void onCameraDisconnected(CameraSession session);
void onCameraClosed(CameraSession session);
void onByteBufferFrameCaptured(
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.
void onCameraError(String errorDescription);
// Called when camera is disconnected.
void onCameraDisconnected();
// Invoked when camera stops receiving frames.
void onCameraFreezed(String errorDescription);

View File

@ -95,7 +95,11 @@ public class VideoCapturerAndroid
}
Logging.e(TAG, errorMessage);
if (eventsHandler != null) {
eventsHandler.onCameraError(errorMessage);
if (error == android.hardware.Camera.CAMERA_ERROR_EVICTED) {
eventsHandler.onCameraDisconnected();
} else {
eventsHandler.onCameraError(errorMessage);
}
}
}
};

View File

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