MediaRecorderStressTest.java revision f16da13585ac22bb8d8fe7538509c2726bb06f29
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 java.io.BufferedWriter;
22import java.io.File;
23import java.io.FileWriter;
24import java.io.Writer;
25
26import android.hardware.Camera;
27import android.media.MediaPlayer;
28import android.media.MediaRecorder;
29import android.test.ActivityInstrumentationTestCase2;
30import android.test.suitebuilder.annotation.LargeTest;
31import android.util.Log;
32import android.view.SurfaceHolder;
33
34/**
35 * Junit / Instrumentation test case for the media player api
36
37 */
38public class MediaRecorderStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
39
40
41    private String TAG = "MediaRecorderStressTest";
42    private MediaRecorder mRecorder;
43    private Camera mCamera;
44
45    private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100;
46    private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100;
47    private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
48    private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
49    private static final long WAIT_TIME_CAMERA_TEST = 3000;  // 3 second
50    private static final long WAIT_TIME_RECORDER_TEST = 60000;  // 6 second
51    private static final long WAIT_TIME_RECORD = 100000;  // 10 seconds
52    private static final long WAIT_TIME_PLAYBACK = 60000;  // 6 second
53    private static final String OUTPUT_FILE = "/sdcard/temp";
54    private static final String OUTPUT_FILE_EXT = ".3gp";
55    private static final String MEDIA_STRESS_OUTPUT =
56        "/sdcard/mediaStressOutput.txt";
57
58    public MediaRecorderStressTest() {
59        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
60    }
61
62    protected void setUp() throws Exception {
63        getActivity();
64        super.setUp();
65    }
66
67    //Test case for stressing the camera preview.
68    @LargeTest
69    public void testStressCamera() throws Exception {
70        SurfaceHolder mSurfaceHolder;
71        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
72        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
73        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
74        output.write("Camera start preview stress:\n");
75        output.write("Total number of loops:" +
76                NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
77        try {
78            Log.v(TAG, "Start preview");
79            output.write("No of loop: ");
80            for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++){
81                mCamera = Camera.open();
82                mCamera.setPreviewDisplay(mSurfaceHolder);
83                mCamera.startPreview();
84                Thread.sleep(WAIT_TIME_CAMERA_TEST);
85                mCamera.stopPreview();
86                mCamera.release();
87                output.write(" ," + i);
88            }
89        } catch (Exception e) {
90                Log.v(TAG, e.toString());
91        }
92        output.write("\n\n");
93        output.close();
94    }
95
96    //Test case for stressing the camera preview.
97    @LargeTest
98    public void testStressRecorder() throws Exception {
99        String filename;
100        SurfaceHolder mSurfaceHolder;
101        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
102        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
103        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
104        output.write("H263 video record- reset after prepare Stress test\n");
105        output.write("Total number of loops:" +
106                NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
107        try {
108            output.write("No of loop: ");
109            Log.v(TAG, "Start preview");
110            for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++){
111                Log.v(TAG, "counter = " + i);
112                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
113                Log.v(TAG, filename);
114                mRecorder = new MediaRecorder();
115                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
116                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
117                mRecorder.setOutputFile(filename);
118                mRecorder.setVideoFrameRate(20);
119                mRecorder.setVideoSize(176,144);
120                Log.v(TAG, "setEncoder");
121                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
122                mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
123                Log.v(TAG, "setPreview");
124                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
125                Log.v(TAG, "prepare");
126                mRecorder.prepare();
127                Log.v(TAG, "before release");
128                Thread.sleep(WAIT_TIME_RECORDER_TEST);
129                mRecorder.reset();
130                mRecorder.release();
131                output.write(", " + i);
132            }
133        } catch (Exception e) {
134                Log.v(TAG, e.toString());
135        }
136        output.write("\n\n");
137        output.close();
138    }
139
140
141    //Stress test case for switching camera and video recorder preview.
142    @LargeTest
143    public void testStressCameraSwitchRecorder() throws Exception {
144        String filename;
145        SurfaceHolder mSurfaceHolder;
146        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
147        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
148        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
149        output.write("Camera and video recorder preview switching\n");
150        output.write("Total number of loops:"
151                + NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
152        try {
153            Log.v(TAG, "Start preview");
154            output.write("No of loop: ");
155            for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++){
156                mCamera = Camera.open();
157                mCamera.setPreviewDisplay(mSurfaceHolder);
158                mCamera.startPreview();
159                Thread.sleep(WAIT_TIME_CAMERA_TEST);
160                mCamera.stopPreview();
161                mCamera.release();
162                mCamera = null;
163                Log.v(TAG, "release camera");
164                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
165                Log.v(TAG, filename);
166                mRecorder = new MediaRecorder();
167                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
168                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
169                mRecorder.setOutputFile(filename);
170                mRecorder.setVideoFrameRate(20);
171                mRecorder.setVideoSize(176,144);
172                Log.v(TAG, "Media recorder setEncoder");
173                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
174                Log.v(TAG, "mediaRecorder setPreview");
175                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
176                Log.v(TAG, "prepare");
177                mRecorder.prepare();
178                Log.v(TAG, "before release");
179                Thread.sleep(WAIT_TIME_CAMERA_TEST);
180                mRecorder.release();
181                Log.v(TAG, "release video recorder");
182                output.write(", " + i);
183            }
184        } catch (Exception e) {
185                Log.v(TAG, e.toString());
186        }
187        output.write("\n\n");
188        output.close();
189    }
190
191    //Stress test case for record a video and play right away.
192    @LargeTest
193    public void testStressRecordVideoAndPlayback() throws Exception {
194        String filename;
195        SurfaceHolder mSurfaceHolder;
196        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
197        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
198        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
199        output.write("Video record and play back stress test:\n");
200        output.write("Total number of loops:"
201                + NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS + "\n");
202        try {
203            output.write("No of loop: ");
204            for (int i = 0; i < NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS; i++){
205                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
206                Log.v(TAG, filename);
207                mRecorder = new MediaRecorder();
208                mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
209                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
210                mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
211                mRecorder.setOutputFile(filename);
212                mRecorder.setVideoFrameRate(20);
213                mRecorder.setVideoSize(352,288);
214                mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
215                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
216                Log.v(TAG, "mediaRecorder setPreview");
217                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
218                mRecorder.prepare();
219                mRecorder.start();
220                Thread.sleep(WAIT_TIME_RECORD);
221                Log.v(TAG, "Before stop");
222                mRecorder.stop();
223                mRecorder.release();
224                //start the playback
225                MediaPlayer mp = new MediaPlayer();
226                mp.setDataSource(filename);
227                mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
228                mp.prepare();
229                mp.start();
230                Thread.sleep(WAIT_TIME_PLAYBACK);
231                mp.release();
232                output.write(", " + i);
233            }
234        } catch (Exception e) {
235                Log.v(TAG, e.toString());
236        }
237        output.write("\n\n");
238        output.close();
239    }
240}
241
242