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