| Index: webrtc/sdk/android/src/java/org/webrtc/CameraCapturer.java
|
| diff --git a/webrtc/sdk/android/src/java/org/webrtc/CameraCapturer.java b/webrtc/sdk/android/src/java/org/webrtc/CameraCapturer.java
|
| index 859b7f745331841016ff78ba52b34a27b1d4af09..c3e8daab17cd857f8f5a968f0fdc86ab94c20e63 100644
|
| --- a/webrtc/sdk/android/src/java/org/webrtc/CameraCapturer.java
|
| +++ b/webrtc/sdk/android/src/java/org/webrtc/CameraCapturer.java
|
| @@ -11,7 +11,6 @@
|
| package org.webrtc;
|
|
|
| import android.content.Context;
|
| -import android.media.MediaRecorder;
|
| import android.os.Handler;
|
| import android.os.Looper;
|
| import java.util.Arrays;
|
| @@ -24,13 +23,6 @@
|
| IN_PROGRESS, // Waiting for new switched capture session to start.
|
| }
|
|
|
| - enum MediaRecorderState {
|
| - IDLE, // No media recording update (add or remove) requested.
|
| - IDLE_TO_ACTIVE, // Waiting for new capture session with added MediaRecorder surface to start.
|
| - ACTIVE_TO_IDLE, // Waiting for new capture session with removed MediaRecorder surface to start.
|
| - ACTIVE, // MediaRecorder was successfully added to camera pipeline.
|
| - }
|
| -
|
| private static final String TAG = "CameraCapturer";
|
| private final static int MAX_OPEN_CAMERA_ATTEMPTS = 3;
|
| private final static int OPEN_CAMERA_DELAY_MS = 500;
|
| @@ -45,9 +37,7 @@
|
| @Override
|
| public void onDone(CameraSession session) {
|
| checkIsOnCameraThread();
|
| - Logging.d(TAG,
|
| - "Create session done. Switch state: " + switchState
|
| - + ". MediaRecorder state: " + mediaRecorderState);
|
| + Logging.d(TAG, "Create session done");
|
| uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable);
|
| synchronized (stateLock) {
|
| capturerObserver.onCapturerStarted(true /* success */);
|
| @@ -67,19 +57,6 @@
|
| switchState = SwitchState.IDLE;
|
| switchCameraInternal(switchEventsHandler);
|
| }
|
| -
|
| - if (mediaRecorderState == MediaRecorderState.IDLE_TO_ACTIVE
|
| - || mediaRecorderState == MediaRecorderState.ACTIVE_TO_IDLE) {
|
| - if (mediaRecorderEventsHandler != null) {
|
| - mediaRecorderEventsHandler.onMediaRecorderSuccess();
|
| - mediaRecorderEventsHandler = null;
|
| - }
|
| - if (mediaRecorderState == MediaRecorderState.IDLE_TO_ACTIVE) {
|
| - mediaRecorderState = MediaRecorderState.ACTIVE;
|
| - } else {
|
| - mediaRecorderState = MediaRecorderState.IDLE;
|
| - }
|
| - }
|
| }
|
| }
|
|
|
| @@ -104,14 +81,6 @@
|
| switchState = SwitchState.IDLE;
|
| }
|
|
|
| - if (mediaRecorderState != MediaRecorderState.IDLE) {
|
| - if (mediaRecorderEventsHandler != null) {
|
| - mediaRecorderEventsHandler.onMediaRecorderError(error);
|
| - mediaRecorderEventsHandler = null;
|
| - }
|
| - mediaRecorderState = MediaRecorderState.IDLE;
|
| - }
|
| -
|
| if (failureType == CameraSession.FailureType.DISCONNECTED) {
|
| eventsHandler.onCameraDisconnected();
|
| } else {
|
| @@ -119,7 +88,8 @@
|
| }
|
| } else {
|
| Logging.w(TAG, "Opening camera failed, retry: " + error);
|
| - createSessionInternal(OPEN_CAMERA_DELAY_MS, null /* mediaRecorder */);
|
| +
|
| + createSessionInternal(OPEN_CAMERA_DELAY_MS);
|
| }
|
| }
|
| }
|
| @@ -243,10 +213,6 @@
|
| private CameraStatistics cameraStatistics; /* guarded by stateLock */
|
| private boolean firstFrameObserved; /* guarded by stateLock */
|
|
|
| - // Variables used on camera thread - do not require stateLock synchronization.
|
| - private MediaRecorderState mediaRecorderState = MediaRecorderState.IDLE;
|
| - private MediaRecorderHandler mediaRecorderEventsHandler;
|
| -
|
| public CameraCapturer(
|
| String cameraName, CameraEventsHandler eventsHandler, CameraEnumerator cameraEnumerator) {
|
| if (eventsHandler == null) {
|
| @@ -311,17 +277,17 @@
|
|
|
| sessionOpening = true;
|
| openAttemptsRemaining = MAX_OPEN_CAMERA_ATTEMPTS;
|
| - createSessionInternal(0, null /* mediaRecorder */);
|
| - }
|
| - }
|
| -
|
| - private void createSessionInternal(int delayMs, final MediaRecorder mediaRecorder) {
|
| + createSessionInternal(0);
|
| + }
|
| + }
|
| +
|
| + private void createSessionInternal(int delayMs) {
|
| uiThreadHandler.postDelayed(openCameraTimeoutRunnable, delayMs + OPEN_CAMERA_TIMEOUT);
|
| cameraThreadHandler.postDelayed(new Runnable() {
|
| @Override
|
| public void run() {
|
| createCameraSession(createSessionCallback, cameraSessionEventsHandler, applicationContext,
|
| - surfaceHelper, mediaRecorder, cameraName, width, height, framerate);
|
| + surfaceHelper, cameraName, width, height, framerate);
|
| }
|
| }, delayMs);
|
| }
|
| @@ -384,29 +350,6 @@
|
| }
|
|
|
| @Override
|
| - public void addMediaRecorderToCamera(
|
| - final MediaRecorder mediaRecorder, final MediaRecorderHandler mediaRecoderEventsHandler) {
|
| - Logging.d(TAG, "addMediaRecorderToCamera");
|
| - cameraThreadHandler.post(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - updateMediaRecorderInternal(mediaRecorder, mediaRecoderEventsHandler);
|
| - }
|
| - });
|
| - }
|
| -
|
| - @Override
|
| - public void removeMediaRecorderFromCamera(final MediaRecorderHandler mediaRecoderEventsHandler) {
|
| - Logging.d(TAG, "removeMediaRecorderFromCamera");
|
| - cameraThreadHandler.post(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - updateMediaRecorderInternal(null /* mediaRecorder */, mediaRecoderEventsHandler);
|
| - }
|
| - });
|
| - }
|
| -
|
| - @Override
|
| public boolean isScreencast() {
|
| return false;
|
| }
|
| @@ -427,13 +370,6 @@
|
| }
|
| }
|
|
|
| - private void reportCameraSwitchError(String error, CameraSwitchHandler switchEventsHandler) {
|
| - Logging.e(TAG, error);
|
| - if (switchEventsHandler != null) {
|
| - switchEventsHandler.onCameraSwitchError(error);
|
| - }
|
| - }
|
| -
|
| private void switchCameraInternal(final CameraSwitchHandler switchEventsHandler) {
|
| Logging.d(TAG, "switchCamera internal");
|
|
|
| @@ -448,15 +384,18 @@
|
|
|
| synchronized (stateLock) {
|
| if (switchState != SwitchState.IDLE) {
|
| - reportCameraSwitchError("Camera switch already in progress.", switchEventsHandler);
|
| + Logging.d(TAG, "switchCamera switchInProgress");
|
| + if (switchEventsHandler != null) {
|
| + switchEventsHandler.onCameraSwitchError("Camera switch already in progress.");
|
| + }
|
| return;
|
| }
|
| - if (mediaRecorderState != MediaRecorderState.IDLE) {
|
| - reportCameraSwitchError("switchCamera: media recording is active", switchEventsHandler);
|
| - return;
|
| - }
|
| +
|
| if (!sessionOpening && currentSession == null) {
|
| - reportCameraSwitchError("switchCamera: camera is not running.", switchEventsHandler);
|
| + Logging.d(TAG, "switchCamera: No session open");
|
| + if (switchEventsHandler != null) {
|
| + switchEventsHandler.onCameraSwitchError("Camera is not running.");
|
| + }
|
| return;
|
| }
|
|
|
| @@ -485,72 +424,9 @@
|
|
|
| sessionOpening = true;
|
| openAttemptsRemaining = 1;
|
| - createSessionInternal(0, null /* mediaRecorder */);
|
| + createSessionInternal(0);
|
| }
|
| Logging.d(TAG, "switchCamera done");
|
| - }
|
| -
|
| - private void reportUpdateMediaRecorderError(
|
| - String error, MediaRecorderHandler mediaRecoderEventsHandler) {
|
| - checkIsOnCameraThread();
|
| - Logging.e(TAG, error);
|
| - if (mediaRecoderEventsHandler != null) {
|
| - mediaRecoderEventsHandler.onMediaRecorderError(error);
|
| - }
|
| - }
|
| -
|
| - private void updateMediaRecorderInternal(
|
| - MediaRecorder mediaRecorder, MediaRecorderHandler mediaRecoderEventsHandler) {
|
| - checkIsOnCameraThread();
|
| - boolean addMediaRecorder = (mediaRecorder != null);
|
| - Logging.d(TAG,
|
| - "updateMediaRecoderInternal internal. State: " + mediaRecorderState
|
| - + ". Switch state: " + switchState + ". Add MediaRecorder: " + addMediaRecorder);
|
| -
|
| - synchronized (stateLock) {
|
| - if ((addMediaRecorder && mediaRecorderState != MediaRecorderState.IDLE)
|
| - || (!addMediaRecorder && mediaRecorderState != MediaRecorderState.ACTIVE)) {
|
| - reportUpdateMediaRecorderError(
|
| - "Incorrect state for MediaRecorder update.", mediaRecoderEventsHandler);
|
| - return;
|
| - }
|
| - if (switchState != SwitchState.IDLE) {
|
| - reportUpdateMediaRecorderError(
|
| - "MediaRecorder update while camera is switching.", mediaRecoderEventsHandler);
|
| - return;
|
| - }
|
| - if (currentSession == null) {
|
| - reportUpdateMediaRecorderError(
|
| - "MediaRecorder update while camera is closed.", mediaRecoderEventsHandler);
|
| - return;
|
| - }
|
| - if (sessionOpening) {
|
| - reportUpdateMediaRecorderError(
|
| - "MediaRecorder update while camera is still opening.", mediaRecoderEventsHandler);
|
| - return;
|
| - }
|
| -
|
| - this.mediaRecorderEventsHandler = mediaRecoderEventsHandler;
|
| - mediaRecorderState =
|
| - addMediaRecorder ? MediaRecorderState.IDLE_TO_ACTIVE : MediaRecorderState.ACTIVE_TO_IDLE;
|
| -
|
| - Logging.d(TAG, "updateMediaRecoder: Stopping session");
|
| - cameraStatistics.release();
|
| - cameraStatistics = null;
|
| - final CameraSession oldSession = currentSession;
|
| - cameraThreadHandler.post(new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - oldSession.stop();
|
| - }
|
| - });
|
| - currentSession = null;
|
| -
|
| - sessionOpening = true;
|
| - openAttemptsRemaining = 1;
|
| - createSessionInternal(0, mediaRecorder);
|
| - }
|
| - Logging.d(TAG, "updateMediaRecoderInternal done");
|
| }
|
|
|
| private void checkIsOnCameraThread() {
|
| @@ -568,6 +444,6 @@
|
|
|
| abstract protected void createCameraSession(
|
| CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events,
|
| - Context applicationContext, SurfaceTextureHelper surfaceTextureHelper,
|
| - MediaRecorder mediaRecoder, String cameraName, int width, int height, int framerate);
|
| + Context applicationContext, SurfaceTextureHelper surfaceTextureHelper, String cameraName,
|
| + int width, int height, int framerate);
|
| }
|
|
|