Chromium Code Reviews| Index: webrtc/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java |
| diff --git a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java |
| index 8f2babc049a4e9e270947974790540cc82cdfc3f..c78bf4e857c2c3c62949fcba80555cba0e96ace0 100644 |
| --- a/webrtc/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java |
| +++ b/webrtc/sdk/android/instrumentationtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java |
| @@ -15,7 +15,13 @@ import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| 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; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.concurrent.CountDownLatch; |
| @@ -502,6 +508,97 @@ class CameraVideoCapturerTestFixtures { |
| disposeVideoTrackWithRenderer(videoTrackWithRenderer); |
| } |
| + @TargetApi(21) |
| + public void updateMediaRecorder(boolean useSurfaceCapture) |
| + throws InterruptedException, IOException { |
| + Logging.d(TAG, "updateMediaRecorder!!!"); |
|
sakal
2017/04/26 07:34:11
Probably a debug comment, please remove
AlexG
2017/04/26 21:04:10
Done.
|
| + 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) { |
|
sakal
2017/04/26 07:34:11
nit: I would prefer a ternary operator here
AlexG
2017/04/26 21:04:10
Done.
|
| + mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); |
| + } else { |
| + mediaRecorder.setVideoSource(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(); |
| + |
| + // 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) { |
| + 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. |
| + 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); |
|
magjed_webrtc
2017/04/26 16:01:41
Can we make some check on outputFile?
AlexG
2017/04/26 21:04:10
Done.
|
| + |
| + disposeCapturer(capturerInstance); |
| + disposeVideoTrackWithRenderer(videoTrackWithRenderer); |
| + } |
| + |
| public void cameraEventsInvoked() throws InterruptedException { |
| final CapturerInstance capturerInstance = createCapturer(true /* initialize */); |
| startCapture(capturerInstance); |