| Index: webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
|
| diff --git a/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java b/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
|
| index 78d042df50c850bf468739907953deee2bb6eab0..6352bf799f7be0a74364197a6c1756091dc736e6 100644
|
| --- a/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
|
| +++ b/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
|
| @@ -38,14 +38,13 @@
|
| // arbitrary Java threads. All public entry points are thread safe, and delegate the work to the
|
| // camera thread. The internal *OnCameraThread() methods must check |camera| for null to check if
|
| // the camera has been stopped.
|
| +// TODO(magjed): This class name is now confusing - rename to Camera1VideoCapturer.
|
| @SuppressWarnings("deprecation")
|
| public class VideoCapturerAndroid implements
|
| - VideoCapturer,
|
| + CameraVideoCapturer,
|
| android.hardware.Camera.PreviewCallback,
|
| SurfaceTextureHelper.OnTextureFrameAvailableListener {
|
| private final static String TAG = "VideoCapturerAndroid";
|
| - private final static int CAMERA_OBSERVER_PERIOD_MS = 2000;
|
| - private final static int CAMERA_FREEZE_REPORT_TIMOUT_MS = 4000;
|
| private static final int CAMERA_STOP_TIMEOUT_MS = 7000;
|
|
|
| private boolean isDisposed = false;
|
| @@ -60,7 +59,7 @@
|
| private final Object cameraIdLock = new Object();
|
| private int id;
|
| private android.hardware.Camera.CameraInfo info;
|
| - private final CameraStatistics cameraStatistics;
|
| + private CameraStatistics cameraStatistics;
|
| // Remember the requested format in case we want to switch cameras.
|
| private int requestedWidth;
|
| private int requestedHeight;
|
| @@ -104,84 +103,6 @@
|
| }
|
| };
|
|
|
| - // Camera observer - monitors camera framerate. Observer is executed on camera thread.
|
| - private final Runnable cameraObserver = new Runnable() {
|
| - private int freezePeriodCount;
|
| - @Override
|
| - public void run() {
|
| - int cameraFramesCount = cameraStatistics.getAndResetFrameCount();
|
| - int cameraFps = (cameraFramesCount * 1000 + CAMERA_OBSERVER_PERIOD_MS / 2)
|
| - / CAMERA_OBSERVER_PERIOD_MS;
|
| -
|
| - Logging.d(TAG, "Camera fps: " + cameraFps +".");
|
| - if (cameraFramesCount == 0) {
|
| - ++freezePeriodCount;
|
| - if (CAMERA_OBSERVER_PERIOD_MS * freezePeriodCount >= CAMERA_FREEZE_REPORT_TIMOUT_MS
|
| - && eventsHandler != null) {
|
| - Logging.e(TAG, "Camera freezed.");
|
| - if (surfaceHelper.isTextureInUse()) {
|
| - // This can only happen if we are capturing to textures.
|
| - eventsHandler.onCameraFreezed("Camera failure. Client must return video buffers.");
|
| - } else {
|
| - eventsHandler.onCameraFreezed("Camera failure.");
|
| - }
|
| - return;
|
| - }
|
| - } else {
|
| - freezePeriodCount = 0;
|
| - }
|
| - maybePostDelayedOnCameraThread(CAMERA_OBSERVER_PERIOD_MS, this);
|
| - }
|
| - };
|
| -
|
| - private static class CameraStatistics {
|
| - private int frameCount = 0;
|
| - private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
|
| -
|
| - CameraStatistics() {
|
| - threadChecker.detachThread();
|
| - }
|
| -
|
| - public void addFrame() {
|
| - threadChecker.checkIsOnValidThread();
|
| - ++frameCount;
|
| - }
|
| -
|
| - public int getAndResetFrameCount() {
|
| - threadChecker.checkIsOnValidThread();
|
| - int count = frameCount;
|
| - frameCount = 0;
|
| - return count;
|
| - }
|
| - }
|
| -
|
| - public static interface CameraEventsHandler {
|
| - // Camera error handler - invoked when camera can not be opened
|
| - // or any camera exception happens on camera thread.
|
| - void onCameraError(String errorDescription);
|
| -
|
| - // Invoked when camera stops receiving frames
|
| - void onCameraFreezed(String errorDescription);
|
| -
|
| - // Callback invoked when camera is opening.
|
| - void onCameraOpening(int cameraId);
|
| -
|
| - // Callback invoked when first camera frame is available after camera is opened.
|
| - void onFirstFrameAvailable();
|
| -
|
| - // Callback invoked when camera closed.
|
| - void onCameraClosed();
|
| - }
|
| -
|
| - // Camera switch handler - one of these functions are invoked with the result of switchCamera().
|
| - // The callback may be called on an arbitrary thread.
|
| - public interface CameraSwitchHandler {
|
| - // Invoked on success. |isFrontCamera| is true if the new camera is front facing.
|
| - void onCameraSwitchDone(boolean isFrontCamera);
|
| - // Invoked on failure, e.g. camera is stopped or only one camera available.
|
| - void onCameraSwitchError(String errorDescription);
|
| - }
|
| -
|
| public static VideoCapturerAndroid create(String name,
|
| CameraEventsHandler eventsHandler) {
|
| return VideoCapturerAndroid.create(name, eventsHandler, false /* captureToTexture */);
|
| @@ -216,6 +137,7 @@
|
|
|
| // Switch camera to the next valid camera id. This can only be called while
|
| // the camera is running.
|
| + @Override
|
| public void switchCamera(final CameraSwitchHandler switchEventsHandler) {
|
| if (android.hardware.Camera.getNumberOfCameras() < 2) {
|
| if (switchEventsHandler != null) {
|
| @@ -299,7 +221,6 @@
|
| this.id = cameraId;
|
| this.eventsHandler = eventsHandler;
|
| isCapturingToTexture = captureToTexture;
|
| - cameraStatistics = new CameraStatistics();
|
| Logging.d(TAG, "VideoCapturerAndroid isCapturingToTexture : " + isCapturingToTexture);
|
| }
|
|
|
| @@ -460,7 +381,7 @@
|
| }
|
|
|
| // Start camera observer.
|
| - maybePostDelayedOnCameraThread(CAMERA_OBSERVER_PERIOD_MS, cameraObserver);
|
| + cameraStatistics = new CameraStatistics(surfaceHelper, eventsHandler);
|
| return;
|
| } catch (RuntimeException e) {
|
| error = e;
|
| @@ -613,8 +534,10 @@
|
| if (surfaceHelper != null) {
|
| surfaceHelper.stopListening();
|
| }
|
| - cameraThreadHandler.removeCallbacks(cameraObserver);
|
| - cameraStatistics.getAndResetFrameCount();
|
| + if (cameraStatistics != null) {
|
| + cameraStatistics.release();
|
| + cameraStatistics = null;
|
| + }
|
| Logging.d(TAG, "Stop preview.");
|
| if (camera != null) {
|
| camera.stopPreview();
|
|
|