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;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dongimport android.media.CamcorderProfile;
2048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lauimport android.media.MediaRecorder;
2148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lauimport android.os.Bundle;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.InstrumentationTestRunner;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.InstrumentationTestSuite;
245d386a1ae28084626f2e207add4be6912db033ceYu Shan Emily Lauimport com.android.mediaframeworktest.stress.MediaRecorderStressTest;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2655c1ad99949a6011e82528adf0fc6fa162ab0fcdYu Shan Emily Lauimport java.util.List;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestSuite;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaRecorderStressTestRunner extends InstrumentationTestRunner {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    // MediaRecorder stress test sets one of the cameras as the video source. As
32c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    // a result, we should make sure that the encoding parameters as input to
33c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    // the test must be supported by the corresponding camera.
34c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mCameraId = 0;
35c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mProfileQuality = CamcorderProfile.QUALITY_HIGH;
36ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi    public static CamcorderProfile profile = CamcorderProfile.get(mCameraId, mProfileQuality);
37ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi    public static int mIterations = 15;
38c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mVideoEncoder = profile.videoCodec;
39ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi    public static int mAudioEncoder = profile.audioCodec;
40c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mFrameRate = profile.videoFrameRate;
41c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mVideoWidth = profile.videoFrameWidth;
42c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mVideoHeight = profile.videoFrameHeight;
43c9b9cbc76e22615886bf91596badef7f4a3d32a5James Dong    public static int mBitRate = profile.videoBitRate;
4448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    public static boolean mRemoveVideo = true;
45ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi    public static int mDuration = 60 * 1000; // 60 seconds
46984505d8168713469fb36bb50da50a2638751122Yu Shan Emily Lau    public static int mTimeLapseDuration = 15 * 60 * 1000; // 15 minutes
4727c8d9ba169aa85127fac65d6df25e4335ee2fcaJason Noguchi    public static double mCaptureRate = 0.5; // 2 sec timelapse interval
4848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public TestSuite getAllTests() {
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TestSuite suite = new InstrumentationTestSuite(this);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        suite.addTestSuite(MediaRecorderStressTest.class);
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return suite;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ClassLoader getLoader() {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return MediaRecorderStressTestRunner.class.getClassLoader();
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
6048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
6148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    @Override
6248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    public void onCreate(Bundle icicle) {
6348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        super.onCreate(icicle);
6448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        String iterations = (String) icicle.get("iterations");
65ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String videoEncoder = (String) icicle.get("video_encoder");
66ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String audioEncoder = (String) icicle.get("audio_encoder");
67ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String frameRate = (String) icicle.get("frame_rate");
68ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String videoWidth = (String) icicle.get("video_width");
69ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String videoHeight = (String) icicle.get("video_height");
70ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String bitRate = (String) icicle.get("bit_rate");
71ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String recordDuration = (String) icicle.get("record_duration");
72ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        String removeVideos = (String) icicle.get("remove_videos");
7348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau
7448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        if (iterations != null ) {
7548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            mIterations = Integer.parseInt(iterations);
7648584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
77ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (videoEncoder != null) {
78ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mVideoEncoder = Integer.parseInt(videoEncoder);
7948584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
80ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (audioEncoder != null) {
81ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mAudioEncoder = Integer.parseInt(audioEncoder);
8248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
83ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (frameRate != null) {
84ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mFrameRate = Integer.parseInt(frameRate);
8548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
86ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (videoWidth != null) {
87ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mVideoWidth = Integer.parseInt(videoWidth);
8848584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
89ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (videoHeight != null) {
90ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mVideoHeight = Integer.parseInt(videoHeight);
9148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
92ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (bitRate != null) {
93ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mBitRate = Integer.parseInt(bitRate);
9448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
95ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (recordDuration != null) {
96ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            mDuration = Integer.parseInt(recordDuration);
9748584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
98ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi        if (removeVideos != null) {
99ca6a5eee8f72742298d28d8a4b8e1bd32020a237Jason Noguchi            if (removeVideos.compareTo("true") == 0) {
10048584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRemoveVideo = true;
10148584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            } else {
10248584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau                mRemoveVideo = false;
10348584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau            }
10448584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau        }
10548584d7b8f5e56b73bb13180bf6546b2647c1b28Yu Shan Emily Lau    }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
107