diff --git a/sdk/android/api/org/webrtc/Camera1Capturer.java b/sdk/android/api/org/webrtc/Camera1Capturer.java index 27b2df7474..f178a3d5d3 100644 --- a/sdk/android/api/org/webrtc/Camera1Capturer.java +++ b/sdk/android/api/org/webrtc/Camera1Capturer.java @@ -11,7 +11,6 @@ package org.webrtc; import android.content.Context; -import android.media.MediaRecorder; import javax.annotation.Nullable; public class Camera1Capturer extends CameraCapturer { @@ -27,10 +26,10 @@ public class Camera1Capturer extends CameraCapturer { @Override protected void createCameraSession(CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events, Context applicationContext, - SurfaceTextureHelper surfaceTextureHelper, @Nullable MediaRecorder mediaRecorder, - String cameraName, int width, int height, int framerate) { - Camera1Session.create(createSessionCallback, events, - captureToTexture || (mediaRecorder != null), applicationContext, surfaceTextureHelper, - mediaRecorder, Camera1Enumerator.getCameraIndex(cameraName), width, height, framerate); + SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height, + int framerate) { + Camera1Session.create(createSessionCallback, events, captureToTexture, applicationContext, + surfaceTextureHelper, Camera1Enumerator.getCameraIndex(cameraName), width, height, + framerate); } } diff --git a/sdk/android/api/org/webrtc/Camera2Capturer.java b/sdk/android/api/org/webrtc/Camera2Capturer.java index 423c621682..3c04cdb10e 100644 --- a/sdk/android/api/org/webrtc/Camera2Capturer.java +++ b/sdk/android/api/org/webrtc/Camera2Capturer.java @@ -13,7 +13,6 @@ package org.webrtc; import android.annotation.TargetApi; import android.content.Context; import android.hardware.camera2.CameraManager; -import android.media.MediaRecorder; import javax.annotation.Nullable; @TargetApi(21) @@ -31,9 +30,9 @@ public class Camera2Capturer extends CameraCapturer { @Override protected void createCameraSession(CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events, Context applicationContext, - SurfaceTextureHelper surfaceTextureHelper, MediaRecorder mediaRecoder, String cameraName, - int width, int height, int framerate) { + SurfaceTextureHelper surfaceTextureHelper, String cameraName, int width, int height, + int framerate) { Camera2Session.create(createSessionCallback, events, applicationContext, cameraManager, - surfaceTextureHelper, mediaRecoder, cameraName, width, height, framerate); + surfaceTextureHelper, cameraName, width, height, framerate); } } diff --git a/sdk/android/api/org/webrtc/CameraVideoCapturer.java b/sdk/android/api/org/webrtc/CameraVideoCapturer.java index 3d9516d5a1..2e9c11fe4f 100644 --- a/sdk/android/api/org/webrtc/CameraVideoCapturer.java +++ b/sdk/android/api/org/webrtc/CameraVideoCapturer.java @@ -67,6 +67,7 @@ public interface CameraVideoCapturer extends VideoCapturer { * addMediaRecorderToCamera() or removeMediaRecorderFromCamera calls. * The callback may be called on an arbitrary thread. */ + @Deprecated public interface MediaRecorderHandler { // Invoked on success. void onMediaRecorderSuccess(); @@ -80,13 +81,20 @@ public interface CameraVideoCapturer extends VideoCapturer { * Once MediaRecorder is added to camera pipeline camera switch is not allowed. * This function can be called from any thread. */ - void addMediaRecorderToCamera(MediaRecorder mediaRecorder, MediaRecorderHandler resultHandler); + @Deprecated + default void addMediaRecorderToCamera( + MediaRecorder mediaRecorder, MediaRecorderHandler resultHandler) { + throw new UnsupportedOperationException("Deprecated and not implemented."); + } /** * Remove MediaRecorder from camera pipeline. This can only be called while the camera is running. * This function can be called from any thread. */ - void removeMediaRecorderFromCamera(MediaRecorderHandler resultHandler); + @Deprecated + default void removeMediaRecorderFromCamera(MediaRecorderHandler resultHandler) { + throw new UnsupportedOperationException("Deprecated and not implemented."); + } /** * Helper class to log framerate and detect if the camera freezes. It will run periodic callbacks diff --git a/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java b/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java index eccdd723c0..ef7669102f 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingByteBufferTest.java @@ -121,12 +121,6 @@ public class Camera1CapturerUsingByteBufferTest { fixtures.cameraEventsInvoked(); } - @Test - @MediumTest - public void testUpdateMediaRecorder() throws InterruptedException, IOException { - fixtures.updateMediaRecorder(false /* useSurfaceCapture */); - } - // Test what happens when attempting to call e.g. switchCamera() after camera has been stopped. @Test @MediumTest diff --git a/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java b/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java index b067662966..28fa825ad7 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/Camera1CapturerUsingTextureTest.java @@ -116,12 +116,6 @@ public class Camera1CapturerUsingTextureTest { fixtures.cameraEventsInvoked(); } - @Test - @MediumTest - public void testUpdateMediaRecorder() throws InterruptedException, IOException { - fixtures.updateMediaRecorder(false /* useSurfaceCapture */); - } - // Test what happens when attempting to call e.g. switchCamera() after camera has been stopped. @Test @MediumTest diff --git a/sdk/android/instrumentationtests/src/org/webrtc/Camera2CapturerTest.java b/sdk/android/instrumentationtests/src/org/webrtc/Camera2CapturerTest.java index 5e925437ec..77e8d77f0a 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/Camera2CapturerTest.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/Camera2CapturerTest.java @@ -246,12 +246,6 @@ public class Camera2CapturerTest { fixtures.cameraEventsInvoked(); } - @Test - @MediumTest - public void testUpdateMediaRecorder() throws InterruptedException, IOException { - fixtures.updateMediaRecorder(true /* useSurfaceCapture */); - } - // Test what happens when attempting to call e.g. switchCamera() after camera has been stopped. @Test @MediumTest diff --git a/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java b/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java index 4af5886b58..aa249449c3 100644 --- a/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java +++ b/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java @@ -18,7 +18,6 @@ import static org.junit.Assert.fail; import android.annotation.TargetApi; import android.content.Context; import android.media.CamcorderProfile; -import android.media.MediaRecorder; import android.os.Environment; import java.io.File; import java.io.IOException; @@ -511,111 +510,6 @@ class CameraVideoCapturerTestFixtures { disposeVideoTrackWithRenderer(videoTrackWithRenderer); } - @TargetApi(21) - private static void prepareMediaRecorderForTests( - MediaRecorder mediaRecorder, File outputFile, boolean useSurfaceCapture) throws IOException { - mediaRecorder.setVideoSource( - useSurfaceCapture ? MediaRecorder.VideoSource.SURFACE : MediaRecorder.VideoSource.CAMERA); - CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P); - profile.videoCodec = MediaRecorder.VideoEncoder.H264; - profile.videoBitRate = 2500000; - profile.videoFrameWidth = 640; - profile.videoFrameHeight = 480; - mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); - mediaRecorder.setVideoFrameRate(profile.videoFrameRate); - mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); - mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); - mediaRecorder.setVideoEncoder(profile.videoCodec); - mediaRecorder.setOutputFile(outputFile.getPath()); - mediaRecorder.prepare(); - } - - @TargetApi(21) - public void updateMediaRecorder(boolean useSurfaceCapture) - throws InterruptedException, IOException { - final CapturerInstance capturerInstance = createCapturer(false /* initialize */); - final VideoTrackWithRenderer videoTrackWithRenderer = - createVideoTrackWithRenderer(capturerInstance.capturer); - // Wait for the camera to start so we can add and remove MediaRecorder. - assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); - - final String videoOutPath = Environment.getExternalStorageDirectory().getPath() - + "/chromium_tests_root/testmediarecorder.mp4"; - File outputFile = new File(videoOutPath); - - // Create MediaRecorder object - MediaRecorder mediaRecorder = new MediaRecorder(); - if (useSurfaceCapture) { - // When using using surface capture, media recorder has to be prepared before adding it to the - // camera. - prepareMediaRecorderForTests(mediaRecorder, outputFile, useSurfaceCapture); - } - - // Add MediaRecorder to camera pipeline. - final boolean[] addMediaRecorderSuccessful = new boolean[1]; - final CountDownLatch addBarrier = new CountDownLatch(1); - CameraVideoCapturer.MediaRecorderHandler addMediaRecorderHandler = - new CameraVideoCapturer.MediaRecorderHandler() { - @Override - public void onMediaRecorderSuccess() { - addMediaRecorderSuccessful[0] = true; - addBarrier.countDown(); - } - @Override - public void onMediaRecorderError(String errorDescription) { - Logging.e(TAG, errorDescription); - addMediaRecorderSuccessful[0] = false; - addBarrier.countDown(); - } - }; - capturerInstance.capturer.addMediaRecorderToCamera(mediaRecorder, addMediaRecorderHandler); - // Wait until MediaRecoder has been added. - addBarrier.await(); - // Check result. - assertTrue(addMediaRecorderSuccessful[0]); - - // Start MediaRecorder and wait for a few frames to capture. - if (!useSurfaceCapture) { - // When using using camera capture, media recorder has to be prepared after adding it to the - // camera. - prepareMediaRecorderForTests(mediaRecorder, outputFile, useSurfaceCapture); - } - mediaRecorder.start(); - for (int i = 0; i < 5; i++) { - assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); - } - mediaRecorder.stop(); - - // Remove MediaRecorder from camera pipeline. - final boolean[] removeMediaRecorderSuccessful = new boolean[1]; - final CountDownLatch removeBarrier = new CountDownLatch(1); - CameraVideoCapturer.MediaRecorderHandler removeMediaRecorderHandler = - new CameraVideoCapturer.MediaRecorderHandler() { - @Override - public void onMediaRecorderSuccess() { - removeMediaRecorderSuccessful[0] = true; - removeBarrier.countDown(); - } - @Override - public void onMediaRecorderError(String errorDescription) { - removeMediaRecorderSuccessful[0] = false; - removeBarrier.countDown(); - } - }; - capturerInstance.capturer.removeMediaRecorderFromCamera(removeMediaRecorderHandler); - // Wait until MediaRecoder has been removed. - removeBarrier.await(); - // Check result. - assertTrue(removeMediaRecorderSuccessful[0]); - // Ensure that frames are received after removing MediaRecorder. - assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); - // Check that recorded file contains some data. - assertTrue(outputFile.length() > 0); - - disposeCapturer(capturerInstance); - disposeVideoTrackWithRenderer(videoTrackWithRenderer); - } - public void cameraEventsInvoked() throws InterruptedException { final CapturerInstance capturerInstance = createCapturer(true /* initialize */); startCapture(capturerInstance); diff --git a/sdk/android/src/java/org/webrtc/Camera1Session.java b/sdk/android/src/java/org/webrtc/Camera1Session.java index 2b649677ea..80d28c47e5 100644 --- a/sdk/android/src/java/org/webrtc/Camera1Session.java +++ b/sdk/android/src/java/org/webrtc/Camera1Session.java @@ -11,7 +11,6 @@ package org.webrtc; import android.content.Context; -import android.media.MediaRecorder; import android.os.Handler; import android.os.SystemClock; import android.view.Surface; @@ -56,8 +55,8 @@ class Camera1Session implements CameraSession { @SuppressWarnings("ByteBufferBackingArray") public static void create(final CreateSessionCallback callback, final Events events, final boolean captureToTexture, final Context applicationContext, - final SurfaceTextureHelper surfaceTextureHelper, final MediaRecorder mediaRecorder, - final int cameraId, final int width, final int height, final int framerate) { + final SurfaceTextureHelper surfaceTextureHelper, final int cameraId, final int width, + final int height, final int framerate) { final long constructionTimeNs = System.nanoTime(); Logging.d(TAG, "Open camera " + cameraId); events.onCameraOpening(); @@ -105,9 +104,8 @@ class Camera1Session implements CameraSession { // Calculate orientation manually and send it as CVO insted. camera.setDisplayOrientation(0 /* degrees */); - callback.onDone( - new Camera1Session(events, captureToTexture, applicationContext, surfaceTextureHelper, - mediaRecorder, cameraId, camera, info, captureFormat, constructionTimeNs)); + callback.onDone(new Camera1Session(events, captureToTexture, applicationContext, + surfaceTextureHelper, cameraId, camera, info, captureFormat, constructionTimeNs)); } private static void updateCameraParameters(android.hardware.Camera camera, @@ -155,9 +153,9 @@ class Camera1Session implements CameraSession { } private Camera1Session(Events events, boolean captureToTexture, Context applicationContext, - SurfaceTextureHelper surfaceTextureHelper, @Nullable MediaRecorder mediaRecorder, - int cameraId, android.hardware.Camera camera, android.hardware.Camera.CameraInfo info, - CaptureFormat captureFormat, long constructionTimeNs) { + SurfaceTextureHelper surfaceTextureHelper, int cameraId, android.hardware.Camera camera, + android.hardware.Camera.CameraInfo info, CaptureFormat captureFormat, + long constructionTimeNs) { Logging.d(TAG, "Create new camera1 session on camera " + cameraId); this.cameraThreadHandler = new Handler(); @@ -172,11 +170,6 @@ class Camera1Session implements CameraSession { this.constructionTimeNs = constructionTimeNs; startCapturing(); - - if (mediaRecorder != null) { - camera.unlock(); - mediaRecorder.setCamera(camera); - } } @Override diff --git a/sdk/android/src/java/org/webrtc/Camera2Session.java b/sdk/android/src/java/org/webrtc/Camera2Session.java index b7bb5bdb88..66e2e6e862 100644 --- a/sdk/android/src/java/org/webrtc/Camera2Session.java +++ b/sdk/android/src/java/org/webrtc/Camera2Session.java @@ -22,13 +22,12 @@ import android.hardware.camera2.CameraManager; import android.hardware.camera2.CameraMetadata; import android.hardware.camera2.CaptureFailure; import android.hardware.camera2.CaptureRequest; -import android.media.MediaRecorder; import android.os.Handler; import javax.annotation.Nullable; import android.util.Range; import android.view.Surface; import android.view.WindowManager; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import org.webrtc.CameraEnumerationAndroid.CaptureFormat; @@ -52,7 +51,6 @@ class Camera2Session implements CameraSession { private final Context applicationContext; private final CameraManager cameraManager; private final SurfaceTextureHelper surfaceTextureHelper; - @Nullable private final Surface mediaRecorderSurface; private final String cameraId; private final int width; private final int height; @@ -127,14 +125,9 @@ class Camera2Session implements CameraSession { final SurfaceTexture surfaceTexture = surfaceTextureHelper.getSurfaceTexture(); surfaceTexture.setDefaultBufferSize(captureFormat.width, captureFormat.height); surface = new Surface(surfaceTexture); - List surfaces = new ArrayList(); - surfaces.add(surface); - if (mediaRecorderSurface != null) { - Logging.d(TAG, "Add MediaRecorder surface to capture session."); - surfaces.add(mediaRecorderSurface); - } try { - camera.createCaptureSession(surfaces, new CaptureSessionCallback(), cameraThreadHandler); + camera.createCaptureSession( + Arrays.asList(surface), new CaptureSessionCallback(), cameraThreadHandler); } catch (CameraAccessException e) { reportError("Failed to create capture session. " + e); return; @@ -184,10 +177,6 @@ class Camera2Session implements CameraSession { chooseFocusMode(captureRequestBuilder); captureRequestBuilder.addTarget(surface); - if (mediaRecorderSurface != null) { - Logging.d(TAG, "Add MediaRecorder surface to CaptureRequest.Builder"); - captureRequestBuilder.addTarget(mediaRecorderSurface); - } session.setRepeatingRequest( captureRequestBuilder.build(), new CameraCaptureCallback(), cameraThreadHandler); } catch (CameraAccessException e) { @@ -297,16 +286,15 @@ class Camera2Session implements CameraSession { public static void create(CreateSessionCallback callback, Events events, Context applicationContext, CameraManager cameraManager, - SurfaceTextureHelper surfaceTextureHelper, MediaRecorder mediaRecorder, String cameraId, - int width, int height, int framerate) { + SurfaceTextureHelper surfaceTextureHelper, String cameraId, int width, int height, + int framerate) { new Camera2Session(callback, events, applicationContext, cameraManager, surfaceTextureHelper, - mediaRecorder, cameraId, width, height, framerate); + cameraId, width, height, framerate); } private Camera2Session(CreateSessionCallback callback, Events events, Context applicationContext, - CameraManager cameraManager, SurfaceTextureHelper surfaceTextureHelper, - @Nullable MediaRecorder mediaRecorder, String cameraId, int width, int height, - int framerate) { + CameraManager cameraManager, SurfaceTextureHelper surfaceTextureHelper, String cameraId, + int width, int height, int framerate) { Logging.d(TAG, "Create new camera2 session on camera " + cameraId); constructionTimeNs = System.nanoTime(); @@ -317,7 +305,6 @@ class Camera2Session implements CameraSession { this.applicationContext = applicationContext; this.cameraManager = cameraManager; this.surfaceTextureHelper = surfaceTextureHelper; - this.mediaRecorderSurface = (mediaRecorder != null) ? mediaRecorder.getSurface() : null; this.cameraId = cameraId; this.width = width; this.height = height; diff --git a/sdk/android/src/java/org/webrtc/CameraCapturer.java b/sdk/android/src/java/org/webrtc/CameraCapturer.java index 7055f5367c..b9e22f18b0 100644 --- a/sdk/android/src/java/org/webrtc/CameraCapturer.java +++ b/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 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); }