19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.mediaframeworktest.stress; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 22f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.BufferedWriter; 23f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.File; 24f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.FileWriter; 2527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchiimport java.io.IOException; 26f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lauimport java.io.Writer; 2779a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport java.util.concurrent.Semaphore; 2879a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport java.util.concurrent.TimeUnit; 29f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.hardware.Camera; 3127c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchiimport android.media.CamcorderProfile; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaPlayer; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder; 3479a3981e3885b9144bb3d458682141eed7365939Jeff Brownimport android.os.Handler; 3520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lauimport android.os.Looper; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceHolder; 4048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lauimport com.android.mediaframeworktest.MediaRecorderStressTestRunner; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media player api 4427c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi */ 4527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchipublic class MediaRecorderStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 4627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String TAG = "MediaRecorderStressTest"; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private MediaRecorder mRecorder; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Camera mCamera; 5027c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200; 5527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi private static final int NUMBER_OF_TIME_LAPSE_LOOPS = 25; 5627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi private static final int TIME_LAPSE_PLAYBACK_WAIT_TIME = 5* 1000; // 5 seconds 5727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi private static final long WAIT_TIME_CAMERA_TEST = 3 * 1000; // 3 seconds 5827c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi private static final long WAIT_TIME_RECORDER_TEST = 6 * 1000; // 6 seconds 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String OUTPUT_FILE = "/sdcard/temp"; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String OUTPUT_FILE_EXT = ".3gp"; 61f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau private static final String MEDIA_STRESS_OUTPUT = 62f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau "/sdcard/mediaStressOutput.txt"; 63e35b3e052dab756113304cb394980e9f271b1613Yu Shan Emily Lau private static final int CAMERA_ID = 0; 64e35b3e052dab756113304cb394980e9f271b1613Yu Shan Emily Lau 6520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback(); 6620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau private final RecorderErrorCallback mRecorderErrorCallback = new RecorderErrorCallback(); 6720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 6827c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi private final static int WAIT_TIMEOUT = 10 * 1000; // 10 seconds 6979a3981e3885b9144bb3d458682141eed7365939Jeff Brown private Thread mLooperThread; 7079a3981e3885b9144bb3d458682141eed7365939Jeff Brown private Handler mHandler; 7179a3981e3885b9144bb3d458682141eed7365939Jeff Brown 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MediaRecorderStressTest() { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super("com.android.mediaframeworktest", MediaFrameworkTest.class); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void setUp() throws Exception { 7779a3981e3885b9144bb3d458682141eed7365939Jeff Brown final Semaphore sem = new Semaphore(0); 7879a3981e3885b9144bb3d458682141eed7365939Jeff Brown mLooperThread = new Thread() { 7979a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 8079a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 8179a3981e3885b9144bb3d458682141eed7365939Jeff Brown Log.v(TAG, "starting looper"); 8279a3981e3885b9144bb3d458682141eed7365939Jeff Brown Looper.prepare(); 8379a3981e3885b9144bb3d458682141eed7365939Jeff Brown mHandler = new Handler(); 8479a3981e3885b9144bb3d458682141eed7365939Jeff Brown sem.release(); 8579a3981e3885b9144bb3d458682141eed7365939Jeff Brown Looper.loop(); 8679a3981e3885b9144bb3d458682141eed7365939Jeff Brown Log.v(TAG, "quit looper"); 8779a3981e3885b9144bb3d458682141eed7365939Jeff Brown } 8879a3981e3885b9144bb3d458682141eed7365939Jeff Brown }; 8979a3981e3885b9144bb3d458682141eed7365939Jeff Brown mLooperThread.start(); 9079a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (! sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 9179a3981e3885b9144bb3d458682141eed7365939Jeff Brown fail("Failed to start the looper."); 9279a3981e3885b9144bb3d458682141eed7365939Jeff Brown } 93003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //Insert a 2 second before launching the test activity. This is 94003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau //the workaround for the race condition of requesting the updated surface. 95003a7569745640d700c318a463385ca5feb08728Yu Shan Emily Lau Thread.sleep(2000); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project getActivity(); 9779a3981e3885b9144bb3d458682141eed7365939Jeff Brown super.setUp(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 10079a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 10179a3981e3885b9144bb3d458682141eed7365939Jeff Brown protected void tearDown() throws Exception { 10279a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (mHandler != null) { 10379a3981e3885b9144bb3d458682141eed7365939Jeff Brown mHandler.getLooper().quit(); 10479a3981e3885b9144bb3d458682141eed7365939Jeff Brown mHandler = null; 10579a3981e3885b9144bb3d458682141eed7365939Jeff Brown } 10679a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (mLooperThread != null) { 10779a3981e3885b9144bb3d458682141eed7365939Jeff Brown mLooperThread.join(WAIT_TIMEOUT); 10879a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (mLooperThread.isAlive()) { 10979a3981e3885b9144bb3d458682141eed7365939Jeff Brown fail("Failed to stop the looper."); 11020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 11179a3981e3885b9144bb3d458682141eed7365939Jeff Brown mLooperThread = null; 11220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 11320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 11479a3981e3885b9144bb3d458682141eed7365939Jeff Brown super.tearDown(); 11520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 11620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 11779a3981e3885b9144bb3d458682141eed7365939Jeff Brown private void runOnLooper(final Runnable command) throws InterruptedException { 11879a3981e3885b9144bb3d458682141eed7365939Jeff Brown final Semaphore sem = new Semaphore(0); 11979a3981e3885b9144bb3d458682141eed7365939Jeff Brown mHandler.post(new Runnable() { 12020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau @Override 12120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau public void run() { 12279a3981e3885b9144bb3d458682141eed7365939Jeff Brown try { 12379a3981e3885b9144bb3d458682141eed7365939Jeff Brown command.run(); 12479a3981e3885b9144bb3d458682141eed7365939Jeff Brown } finally { 12579a3981e3885b9144bb3d458682141eed7365939Jeff Brown sem.release(); 12620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 12720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 12879a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 12979a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (! sem.tryAcquire(WAIT_TIMEOUT, TimeUnit.MILLISECONDS)) { 13079a3981e3885b9144bb3d458682141eed7365939Jeff Brown fail("Failed to run the command on the looper."); 13179a3981e3885b9144bb3d458682141eed7365939Jeff Brown } 13220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 13320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 13479a3981e3885b9144bb3d458682141eed7365939Jeff Brown private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback { 13579a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void onError(int error, android.hardware.Camera camera) { 13679a3981e3885b9144bb3d458682141eed7365939Jeff Brown if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) { 13779a3981e3885b9144bb3d458682141eed7365939Jeff Brown assertTrue("Camera test mediaserver died", false); 13820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 13920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 14020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 14120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 14279a3981e3885b9144bb3d458682141eed7365939Jeff Brown private final class RecorderErrorCallback implements MediaRecorder.OnErrorListener { 14379a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void onError(MediaRecorder mr, int what, int extra) { 14479a3981e3885b9144bb3d458682141eed7365939Jeff Brown // fail the test case no matter what error come up 14579a3981e3885b9144bb3d458682141eed7365939Jeff Brown assertTrue("mediaRecorder error", false); 14620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 14720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 14820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Test case for stressing the camera preview. 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testStressCamera() throws Exception { 15220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau SurfaceHolder mSurfaceHolder; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 154f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau File stressOutFile = new File(MEDIA_STRESS_OUTPUT); 155f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau Writer output = new BufferedWriter(new FileWriter(stressOutFile, true)); 156f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Camera start preview stress:\n"); 15720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau output.write("Total number of loops:" + 158f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau NUMBER_OF_CAMERA_STRESS_LOOPS + "\n"); 15920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau try { 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Start preview"); 161f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("No of loop: "); 16220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 16379a3981e3885b9144bb3d458682141eed7365939Jeff Brown for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++) { 16479a3981e3885b9144bb3d458682141eed7365939Jeff Brown runOnLooper(new Runnable() { 16579a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 16679a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 167e35b3e052dab756113304cb394980e9f271b1613Yu Shan Emily Lau mCamera = Camera.open(CAMERA_ID); 16820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 16979a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 17020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mCamera.setErrorCallback(mCameraErrorCallback); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.setPreviewDisplay(mSurfaceHolder); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.startPreview(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(WAIT_TIME_CAMERA_TEST); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.stopPreview(); 17579a3981e3885b9144bb3d458682141eed7365939Jeff Brown mCamera.release(); 176f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write(" ," + i); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 17920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau assertTrue("CameraStressTest", false); 18020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau Log.v(TAG, e.toString()); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 182f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("\n\n"); 183f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.close(); 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 18520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Test case for stressing the camera preview. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testStressRecorder() throws Exception { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String filename; 19020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau SurfaceHolder mSurfaceHolder; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 192f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau File stressOutFile = new File(MEDIA_STRESS_OUTPUT); 193f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau Writer output = new BufferedWriter(new FileWriter(stressOutFile, true)); 194f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("H263 video record- reset after prepare Stress test\n"); 195f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Total number of loops:" + 196f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau NUMBER_OF_RECORDER_STRESS_LOOPS + "\n"); 197f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau try { 198f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("No of loop: "); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Start preview"); 20079a3981e3885b9144bb3d458682141eed7365939Jeff Brown for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++) { 20179a3981e3885b9144bb3d458682141eed7365939Jeff Brown runOnLooper(new Runnable() { 20279a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 20379a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 20479a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder = new MediaRecorder(); 20520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 20679a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "counter = " + i); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, filename); 21020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOnErrorListener(mRecorderErrorCallback); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 21220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setOutputFile(filename); 214d8f7c2c2dcc9548bc8808e648904c918ecd1d1baDevaraj Rangasamy mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoSize(176,144); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "setEncoder"); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "setPreview"); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "prepare"); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.prepare(); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "before release"); 22420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau Thread.sleep(WAIT_TIME_RECORDER_TEST); 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.reset(); 22679a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder.release(); 227f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write(", " + i); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 23020a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau assertTrue("Recorder Stress test", false); 23120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau Log.v(TAG, e.toString()); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 233f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("\n\n"); 234f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.close(); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 23620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Stress test case for switching camera and video recorder preview. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testStressCameraSwitchRecorder() throws Exception { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String filename; 24120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau SurfaceHolder mSurfaceHolder; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 243f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau File stressOutFile = new File(MEDIA_STRESS_OUTPUT); 244f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau Writer output = new BufferedWriter(new FileWriter(stressOutFile, true)); 245f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Camera and video recorder preview switching\n"); 246f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Total number of loops:" 247f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau + NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n"); 24820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau try { 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Start preview"); 250f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("No of loop: "); 25179a3981e3885b9144bb3d458682141eed7365939Jeff Brown for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++) { 25279a3981e3885b9144bb3d458682141eed7365939Jeff Brown runOnLooper(new Runnable() { 25379a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 25479a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 255e35b3e052dab756113304cb394980e9f271b1613Yu Shan Emily Lau mCamera = Camera.open(CAMERA_ID); 25620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 25779a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 25820a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mCamera.setErrorCallback(mCameraErrorCallback); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.setPreviewDisplay(mSurfaceHolder); 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.startPreview(); 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Thread.sleep(WAIT_TIME_CAMERA_TEST); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera.stopPreview(); 26379a3981e3885b9144bb3d458682141eed7365939Jeff Brown mCamera.release(); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCamera = null; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "release camera"); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, filename); 26879a3981e3885b9144bb3d458682141eed7365939Jeff Brown runOnLooper(new Runnable() { 26979a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 27079a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 27179a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder = new MediaRecorder(); 27220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 27379a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 27420a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOnErrorListener(mRecorderErrorCallback); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 27620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setOutputFile(filename); 278d8f7c2c2dcc9548bc8808e648904c918ecd1d1baDevaraj Rangasamy mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoSize(176,144); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Media recorder setEncoder"); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "mediaRecorder setPreview"); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "prepare"); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.prepare(); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "before release"); 28720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau Thread.sleep(WAIT_TIME_CAMERA_TEST); 28879a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder.release(); 289f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau Log.v(TAG, "release video recorder"); 290f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write(", " + i); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 29320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau assertTrue("Camer and recorder switch mode", false); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, e.toString()); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 296f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("\n\n"); 297f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.close(); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 29920a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau 30048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau public void validateRecordedVideo(String recorded_file) { 30148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau try { 30248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau MediaPlayer mp = new MediaPlayer(); 30348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mp.setDataSource(recorded_file); 30448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mp.prepare(); 30548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int duration = mp.getDuration(); 30648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau if (duration <= 0){ 30748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau assertTrue("stressRecordAndPlayback", false); 30848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } 30993aa00c664ae59c2224853f14d30a6671c467ef0Yu Shan Emily Lau mp.release(); 31048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } catch (Exception e) { 31148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau assertTrue("stressRecordAndPlayback", false); 31248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } 31348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } 31448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau 31527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi public void removeRecordedVideo(String filename){ 31648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau File video = new File(filename); 31748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "remove recorded video " + filename); 31848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau video.delete(); 31948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } 32048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //Stress test case for record a video and play right away. 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @LargeTest 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testStressRecordVideoAndPlayback() throws Exception { 32448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int iterations = MediaRecorderStressTestRunner.mIterations; 32548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int video_encoder = MediaRecorderStressTestRunner.mVideoEncoder; 32648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int audio_encoder = MediaRecorderStressTestRunner.mAudioEncdoer; 32748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int frame_rate = MediaRecorderStressTestRunner.mFrameRate; 32848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int video_width = MediaRecorderStressTestRunner.mVideoWidth; 32948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int video_height = MediaRecorderStressTestRunner.mVideoHeight; 33048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int bit_rate = MediaRecorderStressTestRunner.mBitRate; 33148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo; 33248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau int record_duration = MediaRecorderStressTestRunner.mDuration; 33348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String filename; 33520a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau SurfaceHolder mSurfaceHolder; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 337f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau File stressOutFile = new File(MEDIA_STRESS_OUTPUT); 33848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Writer output = new BufferedWriter( 33948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau new FileWriter(stressOutFile, true)); 340f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Video record and play back stress test:\n"); 341f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("Total number of loops:" 342f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau + NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS + "\n"); 343f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau try { 344f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("No of loop: "); 34548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau for (int i = 0; i < iterations; i++){ 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, filename); 34879a3981e3885b9144bb3d458682141eed7365939Jeff Brown runOnLooper(new Runnable() { 34979a3981e3885b9144bb3d458682141eed7365939Jeff Brown @Override 35079a3981e3885b9144bb3d458682141eed7365939Jeff Brown public void run() { 35179a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder = new MediaRecorder(); 35220a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 35379a3981e3885b9144bb3d458682141eed7365939Jeff Brown }); 35448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "iterations : " + iterations); 35548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "video_encoder : " + video_encoder); 35648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "audio_encoder : " + audio_encoder); 35748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "frame_rate : " + frame_rate); 35848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "video_width : " + video_width); 35948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "video_height : " + video_height); 36048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "bit rate : " + bit_rate); 36148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Log.v(TAG, "record_duration : " + record_duration); 36248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau 36320a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOnErrorListener(mRecorderErrorCallback); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 36620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setOutputFile(filename); 36848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mRecorder.setVideoFrameRate(frame_rate); 36948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mRecorder.setVideoSize(video_width, video_height); 37048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mRecorder.setVideoEncoder(video_encoder); 37148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau mRecorder.setAudioEncoder(audio_encoder); 372eb4f3256b77fe7fd783297a550a64ea441c41169Yu Shan Emily Lau mRecorder.setVideoEncodingBitRate(bit_rate); 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "mediaRecorder setPreview"); 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.prepare(); 37620a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau mRecorder.start(); 37748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Thread.sleep(record_duration); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.v(TAG, "Before stop"); 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRecorder.stop(); 38079a3981e3885b9144bb3d458682141eed7365939Jeff Brown mRecorder.release(); 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //start the playback 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaPlayer mp = new MediaPlayer(); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDataSource(filename); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.prepare(); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.start(); 38748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau Thread.sleep(record_duration); 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mp.release(); 38948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau validateRecordedVideo(filename); 39048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau if (remove_video) { 39127c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi removeRecordedVideo(filename); 39248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau } 393f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write(", " + i); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (Exception e) { 39625d7094279d2eeda0b18a2ca0104d672c4b3c8e5James Dong Log.v(TAG, e.toString()); 39720a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau assertTrue("record and playback", false); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.write("\n\n"); 400f16da13585ac22bb8d8fe7538509c2726bb06f29Yu Shan Emily Lau output.close(); 40120a6b955fe4ea5ba4025f16ba2da013df176c035Yu Shan Emily Lau } 40227c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi 40327c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi // Test case for stressing time lapse 40427c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi @LargeTest 40527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi public void testStressTimeLapse() throws Exception { 40627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi SurfaceHolder mSurfaceHolder; 40727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 40827c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi int record_duration = MediaRecorderStressTestRunner.mTimeLapseDuration; 40927c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo; 41027c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi double captureRate = MediaRecorderStressTestRunner.mCaptureRate; 41127c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi String filename; 41227c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi File stressOutFile = new File(MEDIA_STRESS_OUTPUT); 41327c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi Writer output = new BufferedWriter(new FileWriter(stressOutFile, true)); 41427c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi output.write("Start camera time lapse stress:\n"); 41527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi output.write("Total number of loops: " + NUMBER_OF_TIME_LAPSE_LOOPS + "\n"); 41627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi 41727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi try { 4187b996d19afcc7030400b515a665d28523a44bb18James Dong for (int j = 0, n = Camera.getNumberOfCameras(); j < n; j++) { 4197b996d19afcc7030400b515a665d28523a44bb18James Dong output.write("No of loop: camera " + j); 4207b996d19afcc7030400b515a665d28523a44bb18James Dong for (int i = 0; i < NUMBER_OF_TIME_LAPSE_LOOPS; i++) { 4217b996d19afcc7030400b515a665d28523a44bb18James Dong filename = OUTPUT_FILE + j + "_" + i + OUTPUT_FILE_EXT; 4227b996d19afcc7030400b515a665d28523a44bb18James Dong Log.v(TAG, filename); 4237b996d19afcc7030400b515a665d28523a44bb18James Dong runOnLooper(new Runnable() { 4247b996d19afcc7030400b515a665d28523a44bb18James Dong @Override 4257b996d19afcc7030400b515a665d28523a44bb18James Dong public void run() { 4267b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder = new MediaRecorder(); 4277b996d19afcc7030400b515a665d28523a44bb18James Dong } 4287b996d19afcc7030400b515a665d28523a44bb18James Dong }); 4297b996d19afcc7030400b515a665d28523a44bb18James Dong 4307b996d19afcc7030400b515a665d28523a44bb18James Dong // Set callback 4317b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setOnErrorListener(mRecorderErrorCallback); 4327b996d19afcc7030400b515a665d28523a44bb18James Dong 4337b996d19afcc7030400b515a665d28523a44bb18James Dong // Set video source 4347b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 4357b996d19afcc7030400b515a665d28523a44bb18James Dong 4367b996d19afcc7030400b515a665d28523a44bb18James Dong // Set camcorder profile for time lapse 4377b996d19afcc7030400b515a665d28523a44bb18James Dong CamcorderProfile profile = 4387b996d19afcc7030400b515a665d28523a44bb18James Dong CamcorderProfile.get(j, CamcorderProfile.QUALITY_TIME_LAPSE_HIGH); 4397b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setProfile(profile); 4407b996d19afcc7030400b515a665d28523a44bb18James Dong 4417b996d19afcc7030400b515a665d28523a44bb18James Dong // Set the timelapse setting; 0.1 = 10 sec timelapse, 0.5 = 2 sec timelapse, etc. 4427b996d19afcc7030400b515a665d28523a44bb18James Dong // http://developer.android.com/guide/topics/media/camera.html#time-lapse-video 4437b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setCaptureRate(captureRate); 4447b996d19afcc7030400b515a665d28523a44bb18James Dong 4457b996d19afcc7030400b515a665d28523a44bb18James Dong // Set output file 4467b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setOutputFile(filename); 4477b996d19afcc7030400b515a665d28523a44bb18James Dong 4487b996d19afcc7030400b515a665d28523a44bb18James Dong // Set the preview display 4497b996d19afcc7030400b515a665d28523a44bb18James Dong Log.v(TAG, "mediaRecorder setPreviewDisplay"); 4507b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 4517b996d19afcc7030400b515a665d28523a44bb18James Dong 4527b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.prepare(); 4537b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.start(); 4547b996d19afcc7030400b515a665d28523a44bb18James Dong Thread.sleep(record_duration); 4557b996d19afcc7030400b515a665d28523a44bb18James Dong Log.v(TAG, "Before stop"); 4567b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.stop(); 4577b996d19afcc7030400b515a665d28523a44bb18James Dong mRecorder.release(); 4587b996d19afcc7030400b515a665d28523a44bb18James Dong 4597b996d19afcc7030400b515a665d28523a44bb18James Dong // Start the playback 4607b996d19afcc7030400b515a665d28523a44bb18James Dong MediaPlayer mp = new MediaPlayer(); 4617b996d19afcc7030400b515a665d28523a44bb18James Dong mp.setDataSource(filename); 4627b996d19afcc7030400b515a665d28523a44bb18James Dong mp.setDisplay(mSurfaceHolder); 4637b996d19afcc7030400b515a665d28523a44bb18James Dong mp.prepare(); 4647b996d19afcc7030400b515a665d28523a44bb18James Dong mp.start(); 4657b996d19afcc7030400b515a665d28523a44bb18James Dong Thread.sleep(TIME_LAPSE_PLAYBACK_WAIT_TIME); 4667b996d19afcc7030400b515a665d28523a44bb18James Dong mp.release(); 4677b996d19afcc7030400b515a665d28523a44bb18James Dong validateRecordedVideo(filename); 4687b996d19afcc7030400b515a665d28523a44bb18James Dong if (remove_video) { 4697b996d19afcc7030400b515a665d28523a44bb18James Dong removeRecordedVideo(filename); 47027c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 4717b996d19afcc7030400b515a665d28523a44bb18James Dong output.write(", " + i); 47227c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 47327c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 47427c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 47527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi catch (IllegalStateException e) { 47627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi assertTrue("Camera time lapse stress test IllegalStateException", false); 47727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi Log.v(TAG, e.toString()); 47827c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 47927c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi catch (IOException e) { 48027c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi assertTrue("Camera time lapse stress test IOException", false); 48127c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi Log.v(TAG, e.toString()); 48227c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 48327c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi catch (Exception e) { 48427c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi assertTrue("Camera time lapse stress test Exception", false); 48527c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi Log.v(TAG, e.toString()); 48627c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 48727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi output.write("\n\n"); 48827c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi output.close(); 48927c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 491