Index: webrtc/api/android/java/src/org/webrtc/Camera2Session.java |
diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Session.java b/webrtc/api/android/java/src/org/webrtc/Camera2Session.java |
index a10ce8f5389422d5d2434465db5529130e2defb8..213e41d88e7421e11d1a8289afa02cd35b827e61 100644 |
--- a/webrtc/api/android/java/src/org/webrtc/Camera2Session.java |
+++ b/webrtc/api/android/java/src/org/webrtc/Camera2Session.java |
@@ -46,11 +46,10 @@ public class Camera2Session implements CameraSession { |
private static enum SessionState { RUNNING, STOPPED }; |
private final Handler cameraThreadHandler; |
- private final CameraManager cameraManager; |
private final CreateSessionCallback callback; |
- private final CameraVideoCapturer.CameraEventsHandler eventsHandler; |
+ private final Events events; |
private final Context applicationContext; |
- private final CameraVideoCapturer.CapturerObserver capturerObserver; |
+ private final CameraManager cameraManager; |
private final SurfaceTextureHelper surfaceTextureHelper; |
private final String cameraId; |
private final int width; |
@@ -70,7 +69,6 @@ public class Camera2Session implements CameraSession { |
// Initialized when capture session is created |
private CameraCaptureSession captureSession; |
- private CameraVideoCapturer.CameraStatistics cameraStatistics; |
// State |
private SessionState state = SessionState.RUNNING; |
@@ -134,7 +132,7 @@ public class Camera2Session implements CameraSession { |
checkIsOnCameraThread(); |
Logging.d(TAG, "Camera device closed."); |
- eventsHandler.onCameraClosed(); |
+ events.onCameraClosed(Camera2Session.this); |
} |
} |
@@ -191,7 +189,6 @@ public class Camera2Session implements CameraSession { |
} |
if (!firstFrameReported) { |
- eventsHandler.onFirstFrameAvailable(); |
firstFrameReported = true; |
final int startTimeMs = |
(int) TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - constructionTimeNs); |
@@ -210,14 +207,10 @@ public class Camera2Session implements CameraSession { |
transformMatrix = RendererCommon.rotateTextureMatrix( |
transformMatrix, -cameraOrientation); |
- cameraStatistics.addFrame(); |
- capturerObserver.onTextureFrameCaptured(captureFormat.width, captureFormat.height, |
- oesTextureId, transformMatrix, rotation, timestampNs); |
+ events.onTextureFrameCaptured(Camera2Session.this, captureFormat.width, |
+ captureFormat.height, oesTextureId, transformMatrix, rotation, timestampNs); |
} |
}); |
- capturerObserver.onCapturerStarted(true /* success */); |
- cameraStatistics = new CameraVideoCapturer.CameraStatistics( |
- surfaceTextureHelper, eventsHandler); |
Logging.d(TAG, "Camera device successfully started."); |
callback.onDone(Camera2Session.this); |
} |
@@ -232,23 +225,20 @@ public class Camera2Session implements CameraSession { |
} |
public static void create( |
- CameraManager cameraManager, CreateSessionCallback callback, |
- CameraVideoCapturer.CameraEventsHandler eventsHandler, Context applicationContext, |
- CameraVideoCapturer.CapturerObserver capturerObserver, |
+ CreateSessionCallback callback, Events events, |
+ Context applicationContext, CameraManager cameraManager, |
SurfaceTextureHelper surfaceTextureHelper, |
String cameraId, int width, int height, int framerate) { |
new Camera2Session( |
- cameraManager, callback, |
- eventsHandler, applicationContext, |
- capturerObserver, |
+ callback, events, |
+ applicationContext, cameraManager, |
surfaceTextureHelper, |
cameraId, width, height, framerate); |
} |
private Camera2Session( |
- CameraManager cameraManager, CreateSessionCallback callback, |
- CameraVideoCapturer.CameraEventsHandler eventsHandler, Context applicationContext, |
- CameraVideoCapturer.CapturerObserver capturerObserver, |
+ CreateSessionCallback callback, Events events, |
+ Context applicationContext, CameraManager cameraManager, |
SurfaceTextureHelper surfaceTextureHelper, |
String cameraId, int width, int height, int framerate) { |
Logging.d(TAG, "Create new camera2 session on camera " + cameraId); |
@@ -256,11 +246,10 @@ public class Camera2Session implements CameraSession { |
constructionTimeNs = System.nanoTime(); |
this.cameraThreadHandler = new Handler(); |
- this.cameraManager = cameraManager; |
this.callback = callback; |
- this.eventsHandler = eventsHandler; |
+ this.events = events; |
this.applicationContext = applicationContext; |
- this.capturerObserver = capturerObserver; |
+ this.cameraManager = cameraManager; |
this.surfaceTextureHelper = surfaceTextureHelper; |
this.cameraId = cameraId; |
this.width = width; |
@@ -316,7 +305,7 @@ public class Camera2Session implements CameraSession { |
checkIsOnCameraThread(); |
Logging.d(TAG, "Opening camera " + cameraId); |
- eventsHandler.onCameraOpening(cameraId); |
+ events.onCameraOpening(); |
try { |
cameraManager.openCamera(cameraId, new CameraStateCallback(), cameraThreadHandler); |
@@ -332,7 +321,6 @@ public class Camera2Session implements CameraSession { |
if (Thread.currentThread() == cameraThreadHandler.getLooper().getThread()) { |
if (state != SessionState.STOPPED) { |
state = SessionState.STOPPED; |
- capturerObserver.onCapturerStopped(); |
// Post the stopInternal to return earlier. |
cameraThreadHandler.post(new Runnable() { |
@Override |
@@ -352,7 +340,6 @@ public class Camera2Session implements CameraSession { |
public void run() { |
if (state != SessionState.STOPPED) { |
state = SessionState.STOPPED; |
- capturerObserver.onCapturerStopped(); |
stopLatch.countDown(); |
stopInternal(); |
final int stopTimeMs = |
@@ -371,14 +358,19 @@ public class Camera2Session implements CameraSession { |
checkIsOnCameraThread(); |
surfaceTextureHelper.stopListening(); |
- cameraStatistics.release(); |
- captureSession.close(); |
- captureSession = null; |
- surface.release(); |
- surface = null; |
- cameraDevice.close(); |
- cameraDevice = null; |
+ if (captureSession != null) { |
+ captureSession.close(); |
+ captureSession = null; |
+ } |
+ if (surface != null) { |
+ surface.release(); |
+ surface = null; |
+ } |
+ if (cameraDevice != null) { |
+ cameraDevice.close(); |
+ cameraDevice = null; |
+ } |
Logging.d(TAG, "Stop done"); |
} |
@@ -387,17 +379,13 @@ public class Camera2Session implements CameraSession { |
checkIsOnCameraThread(); |
Logging.e(TAG, "Error: " + error); |
- if (captureSession == null) { |
- if (cameraDevice != null) { |
- cameraDevice.close(); |
- cameraDevice = null; |
- } |
- |
- state = SessionState.STOPPED; |
+ final boolean startFailure = (captureSession == null); |
+ state = SessionState.STOPPED; |
+ stopInternal(); |
+ if (startFailure) { |
callback.onFailure(error); |
- capturerObserver.onCapturerStarted(false /* success */); |
} else { |
- eventsHandler.onCameraError(error); |
+ events.onCameraError(this, error); |
} |
} |