MediaRecorderStressTest.java revision d24b8183b93e781080b2c16c487e60d51c12da31
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.mediaframeworktest.stress; 18 19import com.android.mediaframeworktest.MediaFrameworkTest; 20 21import android.hardware.Camera; 22import android.media.MediaPlayer; 23import android.media.MediaRecorder; 24import android.test.ActivityInstrumentationTestCase2; 25import android.test.suitebuilder.annotation.LargeTest; 26import android.util.Log; 27import android.view.SurfaceHolder; 28 29/** 30 * Junit / Instrumentation test case for the media player api 31 32 */ 33public class MediaRecorderStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 34 35 36 private String TAG = "MediaRecorderStressTest"; 37 private MediaRecorder mRecorder; 38 private Camera mCamera; 39 40 private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100; 41 private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100; 42 private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50; 43 private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200; 44 private static final long WAIT_TIME_CAMERA_TEST = 3000; // 3 second 45 private static final long WAIT_TIME_RECORDER_TEST = 60000; // 6 second 46 private static final long WAIT_TIME_RECORD = 100000; // 10 seconds 47 private static final long WAIT_TIME_PLAYBACK = 60000; // 6 second 48 private static final String OUTPUT_FILE = "/sdcard/temp"; 49 private static final String OUTPUT_FILE_EXT = ".3gp"; 50 51 public MediaRecorderStressTest() { 52 super("com.android.mediaframeworktest", MediaFrameworkTest.class); 53 } 54 55 protected void setUp() throws Exception { 56 getActivity(); 57 super.setUp(); 58 } 59 60 //Test case for stressing the camera preview. 61 @LargeTest 62 public void testStressCamera() throws Exception { 63 SurfaceHolder mSurfaceHolder; 64 mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 65 try { 66 Log.v(TAG, "Start preview"); 67 for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++){ 68 mCamera = Camera.open(); 69 mCamera.setPreviewDisplay(mSurfaceHolder); 70 mCamera.startPreview(); 71 Thread.sleep(WAIT_TIME_CAMERA_TEST); 72 mCamera.stopPreview(); 73 mCamera.release(); 74 } 75 } catch (Exception e) { 76 Log.v(TAG, e.toString()); 77 } 78 } 79 80 //Test case for stressing the camera preview. 81 @LargeTest 82 public void testStressRecorder() throws Exception { 83 String filename; 84 SurfaceHolder mSurfaceHolder; 85 mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 86 try { 87 Log.v(TAG, "Start preview"); 88 for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++){ 89 Log.v(TAG, "counter = " + i); 90 filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 91 Log.v(TAG, filename); 92 mRecorder = new MediaRecorder(); 93 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 94 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 95 mRecorder.setOutputFile(filename); 96 mRecorder.setVideoFrameRate(20); 97 mRecorder.setVideoSize(176,144); 98 Log.v(TAG, "setEncoder"); 99 mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 100 mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 101 Log.v(TAG, "setPreview"); 102 mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 103 Log.v(TAG, "prepare"); 104 mRecorder.prepare(); 105 Log.v(TAG, "before release"); 106 Thread.sleep(WAIT_TIME_RECORDER_TEST); 107 mRecorder.reset(); 108 mRecorder.release(); 109 } 110 } catch (Exception e) { 111 Log.v(TAG, e.toString()); 112 } 113 } 114 115 116 //Stress test case for switching camera and video recorder preview. 117 @LargeTest 118 public void testStressCameraSwitchRecorder() throws Exception { 119 String filename; 120 SurfaceHolder mSurfaceHolder; 121 mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 122 try { 123 Log.v(TAG, "Start preview"); 124 for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++){ 125 mCamera = Camera.open(); 126 mCamera.setPreviewDisplay(mSurfaceHolder); 127 mCamera.startPreview(); 128 Thread.sleep(WAIT_TIME_CAMERA_TEST); 129 mCamera.stopPreview(); 130 mCamera.release(); 131 mCamera = null; 132 Log.v(TAG, "release camera"); 133 filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 134 Log.v(TAG, filename); 135 mRecorder = new MediaRecorder(); 136 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 137 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 138 mRecorder.setOutputFile(filename); 139 mRecorder.setVideoFrameRate(20); 140 mRecorder.setVideoSize(176,144); 141 Log.v(TAG, "Media recorder setEncoder"); 142 mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 143 Log.v(TAG, "mediaRecorder setPreview"); 144 mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 145 Log.v(TAG, "prepare"); 146 mRecorder.prepare(); 147 Log.v(TAG, "before release"); 148 Thread.sleep(WAIT_TIME_CAMERA_TEST); 149 mRecorder.release(); 150 Log.v(TAG, "release video recorder"); 151 } 152 } catch (Exception e) { 153 Log.v(TAG, e.toString()); 154 } 155 } 156 157 //Stress test case for record a video and play right away. 158 @LargeTest 159 public void testStressRecordVideoAndPlayback() throws Exception { 160 String filename; 161 SurfaceHolder mSurfaceHolder; 162 mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); 163 try { 164 for (int i = 0; i < NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS; i++){ 165 filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT; 166 Log.v(TAG, filename); 167 mRecorder = new MediaRecorder(); 168 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 169 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 170 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 171 mRecorder.setOutputFile(filename); 172 mRecorder.setVideoFrameRate(20); 173 mRecorder.setVideoSize(352,288); 174 mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); 175 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 176 Log.v(TAG, "mediaRecorder setPreview"); 177 mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 178 mRecorder.prepare(); 179 mRecorder.start(); 180 Thread.sleep(WAIT_TIME_RECORD); 181 Log.v(TAG, "Before stop"); 182 mRecorder.stop(); 183 mRecorder.release(); 184 //start the playback 185 MediaPlayer mp = new MediaPlayer(); 186 mp.setDataSource(filename); 187 mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); 188 mp.prepare(); 189 mp.start(); 190 Thread.sleep(WAIT_TIME_PLAYBACK); 191 mp.release(); 192 } 193 } catch (Exception e) { 194 Log.v(TAG, e.toString()); 195 } 196 } 197} 198 199