Android: Remove video recording functionality from the camera classes
There was an attempt to add MediaRecording functionality to the camera classes, but it was never finished and never worked properly. This CL removes the code for it. In the future, if offline video recording is needed we should add it as a VideoSink instead of inside the camera classes. Bug: webrtc:9144 Change-Id: I74b70d4b128aa212d84e70da01e5e19133c5af24 Reviewed-on: https://webrtc-review.googlesource.com/69642 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23050}
This commit is contained in:
committed by
Commit Bot
parent
6a8f30e5a3
commit
5ebb82ba9c
@ -11,7 +11,6 @@
|
||||
package org.webrtc;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.MediaRecorder;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import javax.annotation.Nullable;
|
||||
@ -25,13 +24,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
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;
|
||||
@ -47,9 +39,7 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
@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. Switch state: " + switchState);
|
||||
uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable);
|
||||
synchronized (stateLock) {
|
||||
capturerObserver.onCapturerStarted(true /* success */);
|
||||
@ -69,19 +59,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,14 +83,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
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 {
|
||||
@ -121,7 +90,7 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
}
|
||||
} else {
|
||||
Logging.w(TAG, "Opening camera failed, retry: " + error);
|
||||
createSessionInternal(OPEN_CAMERA_DELAY_MS, null /* mediaRecorder */);
|
||||
createSessionInternal(OPEN_CAMERA_DELAY_MS);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -225,10 +194,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
@Nullable 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;
|
||||
@Nullable private MediaRecorderHandler mediaRecorderEventsHandler;
|
||||
|
||||
public CameraCapturer(String cameraName, @Nullable CameraEventsHandler eventsHandler,
|
||||
CameraEnumerator cameraEnumerator) {
|
||||
if (eventsHandler == null) {
|
||||
@ -293,17 +258,17 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
|
||||
sessionOpening = true;
|
||||
openAttemptsRemaining = MAX_OPEN_CAMERA_ATTEMPTS;
|
||||
createSessionInternal(0, null /* mediaRecorder */);
|
||||
createSessionInternal(0);
|
||||
}
|
||||
}
|
||||
|
||||
private void createSessionInternal(int delayMs, final MediaRecorder mediaRecorder) {
|
||||
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);
|
||||
}
|
||||
@ -371,29 +336,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
});
|
||||
}
|
||||
|
||||
@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;
|
||||
@ -440,10 +382,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
reportCameraSwitchError("Camera switch already in progress.", switchEventsHandler);
|
||||
return;
|
||||
}
|
||||
if (mediaRecorderState != MediaRecorderState.IDLE) {
|
||||
reportCameraSwitchError("switchCamera: media recording is active", switchEventsHandler);
|
||||
return;
|
||||
}
|
||||
if (!sessionOpening && currentSession == null) {
|
||||
reportCameraSwitchError("switchCamera: camera is not running.", switchEventsHandler);
|
||||
return;
|
||||
@ -474,74 +412,11 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
|
||||
sessionOpening = true;
|
||||
openAttemptsRemaining = 1;
|
||||
createSessionInternal(0, null /* mediaRecorder */);
|
||||
createSessionInternal(0);
|
||||
}
|
||||
Logging.d(TAG, "switchCamera done");
|
||||
}
|
||||
|
||||
private void reportUpdateMediaRecorderError(
|
||||
String error, @Nullable MediaRecorderHandler mediaRecoderEventsHandler) {
|
||||
checkIsOnCameraThread();
|
||||
Logging.e(TAG, error);
|
||||
if (mediaRecoderEventsHandler != null) {
|
||||
mediaRecoderEventsHandler.onMediaRecorderError(error);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateMediaRecorderInternal(
|
||||
@Nullable 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() {
|
||||
if (Thread.currentThread() != cameraThreadHandler.getLooper().getThread()) {
|
||||
Logging.e(TAG, "Check is on camera thread failed.");
|
||||
@ -557,6 +432,6 @@ abstract class CameraCapturer implements CameraVideoCapturer {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user