MediaRecorderTest.java revision 1619367ab823150fa8856d419abe02ceb75886f1
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 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.functional;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaFrameworkTest;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.mediaframeworktest.MediaNames;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.*;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
252071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lauimport android.hardware.Camera;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaPlayer;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.media.MediaRecorder;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceHolder;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceView;
321619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lauimport com.android.mediaframeworktest.MediaProfileReader;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media recorder api
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String TAG = "MediaRecorderTest";
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputDuration =0;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputVideoWidth = 0;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputVideoHeight= 0 ;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private SurfaceHolder mSurfaceHolder = null;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MediaRecorder mRecorder;
491619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
501619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    private int MIN_VIDEO_FPS = 5;
511619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Context mContext;
532071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    Camera mCamera;
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MediaRecorderTest() {
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG,"create the media recorder");
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRecorder = new MediaRecorder();
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void recordVideo(int frameRate, int width, int height,
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG,"startPreviewAndPrepareRecording");
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setAudioSource");
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(outFormat);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "output format " + outFormat);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(outFile);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoFrameRate(frameRate);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSize(width, height);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setEncoder");
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoEncoder(videoFormat);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setPreview");
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "prepare");
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start");
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.RECORDED_TIME);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "stop");
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v("record video failed ", e.toString());
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1021619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    private boolean recordVideoWithPara(String encoder, String audio, String quality){
1031619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        boolean recordSuccess = false;
1041619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int videoEncoder = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder);
1051619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int audioEncoder = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio);
1061619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int videoWidth = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".width_" + quality);
1071619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int videoHeight =
1081619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".height_" + quality);
1091619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int videoFps = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".fps_" + quality);
1101619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int videoBitrate = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".bps_" + quality);
1111619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int audioBitrate = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".bps_" + quality);
1121619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int audioChannels = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".ch_" + quality);
1131619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        int audioSamplingRate =
1141619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".hz_" + quality);
1151619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1161619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        if (videoFps < MIN_VIDEO_FPS) {
1171619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            videoFps = MIN_VIDEO_FPS;
1181619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        }
1191619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
1201619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        String filename = ("/sdcard/" + encoder + "_" + audio + "_" + quality + ".3gp");
1211619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        try {
1221619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "video encoder :" + videoEncoder);
1231619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audio encoder :" + audioEncoder);
1241619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "quality : " + quality);
1251619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "encoder : " + encoder);
1261619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audio : " + audio);
1271619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoWidth : " + videoWidth);
1281619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoHeight : " + videoHeight);
1291619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoFPS : " + videoFps);
1301619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videobitrate : " + videoBitrate);
1311619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audioBitrate : " + audioBitrate);
1321619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audioChannel : " + audioChannels);
1331619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "AudioSampleRate : " + audioSamplingRate);
1341619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1351619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            MediaRecorder mMediaRecorder = new MediaRecorder();
1361619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
1371619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
1381619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
1391619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setOutputFile(filename);
1401619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoFrameRate(videoFps);
1411619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoSize(videoWidth, videoHeight);
1421619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setParameters(String.format("video-param-encoding-bitrate=%d",
1431619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    videoBitrate));
1441619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setParameters(String.format("audio-param-encoding-bitrate=%d",
1451619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    audioBitrate));
1461619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setParameters(String.format("audio-param-number-of-channels=%d",
1471619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    audioChannels));
1481619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setParameters(String.format("audio-param-sampling-rate=%d",
1491619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    audioSamplingRate));
1501619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoEncoder(videoEncoder);
1511619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setAudioEncoder(audioEncoder);
1521619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
1531619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.prepare();
1541619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.start();
1551619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Thread.sleep(MediaNames.RECORDED_TIME);
1561619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.stop();
1571619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.release();
1581619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            recordSuccess = validateVideo(filename, videoWidth, videoHeight);
1591619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        } catch (Exception e) {
1601619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, e.toString());
1611619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            return false;
1621619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        }
1631619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        return recordSuccess;
1641619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    }
1651619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean invalidRecordSetting(int frameRate, int width, int height,
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setAudioSource");
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(outFormat);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "output format " + outFormat);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(outFile);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoFrameRate(frameRate);
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSize(width, height);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setEncoder");
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoEncoder(videoFormat);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setPreview");
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "prepare");
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start");
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.RECORDED_TIME);
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "stop");
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v("record video failed ", e.toString());
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "reset and release");
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void getOutputVideoProperty(String outputFilePath) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mediaPlayer = new MediaPlayer();
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.setDataSource(outputFilePath);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "file Path = " + outputFilePath);
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "before player prepare");
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.prepare();
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "before getduration");
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mOutputDuration = mediaPlayer.getDuration();
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "get video dimension");
217c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mOutputVideoHeight = CodecTest.videoHeight(outputFilePath);
218c1b80cb7e30102b304d62beb9649f84c798e00e9Yu Shan Emily Lau            mOutputVideoWidth = CodecTest.videoWidth(outputFilePath);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.release();
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.release();
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void removeFile(String filePath) {
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        File fileRemove = new File(filePath);
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fileRemove.delete();
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean validateVideo(String filePath, int width, int height) {
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean validVideo = false;
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        getOutputVideoProperty(filePath);
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mOutputVideoWidth == width && mOutputVideoHeight == height &&
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mOutputDuration > MediaNames.VALID_VIDEO_DURATION ) {
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            validVideo = true;
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "width = " + mOutputVideoWidth + " height = " + mOutputVideoHeight + " Duration = " + mOutputDuration);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        removeFile(filePath);
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return validVideo;
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: HVGA h263
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testHVGAH263() throws Exception {
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.H263,
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_HVGA_H263, false);
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_H263, 480, 320);
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("HVGAH263", videoRecordedResult);
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QVGA h263
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQVGAH263() throws Exception {
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.H263,
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QVGA_H263, false);
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_H263, 320, 240);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QVGAH263", videoRecordedResult);
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: SQVGA h263
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSQVGAH263() throws Exception {
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.H263,
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_SQVGA_H263, false);
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_H263, 240, 160);
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("SQVGAH263", videoRecordedResult);
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QCIF h263
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFH263() throws Exception {
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QCIF_H263, false);
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_H263, 176, 144);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263", videoRecordedResult);
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF h263
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFH263() throws Exception {
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263,
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_CIF_H263, false);
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_H263, 352, 288);
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFH263", videoRecordedResult);
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testVideoOnly() throws Exception {
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263 Video Only", videoRecordedResult);
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3052071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    @LargeTest
3062071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    /*
3072071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     * This test case set the camera in portrait mode.
3082071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     * Verification: validate the video dimension and the duration.
3092071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     */
3102071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    public void testPortraitH263() throws Exception {
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3122071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        try {
3132071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera = Camera.open();
3142071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Camera.Parameters parameters = mCamera.getParameters();
3152071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            parameters.setPreviewSize(352, 288);
3162071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            parameters.set("orientation", "portrait");
3172071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.setParameters(parameters);
3182071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.unlock();
3192071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mRecorder.setCamera(mCamera);
3202071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Thread.sleep(1000);
3212071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263,
3222071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau                    MediaRecorder.OutputFormat.THREE_GPP,
3232071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau                    MediaNames.RECORDED_PORTRAIT_H263, true);
3242071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            videoRecordedResult =
3252071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau                validateVideo(MediaNames.RECORDED_PORTRAIT_H263, 352, 288);
3262071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.lock();
3272071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.release();
3282071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        } catch (Exception e) {
3292071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Log.v(TAG, e.toString());
3302071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        }
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("PortraitH263", videoRecordedResult);
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testHVGAMP4() throws Exception {
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.MPEG_4_SP,
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_HVGA_MP4, false);
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_MP4, 480, 320);
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("HVGAMP4", videoRecordedResult);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQVGAMP4() throws Exception {
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.MPEG_4_SP,
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QVGA_MP4, false);
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_MP4, 320, 240);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QVGAMP4", videoRecordedResult);
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSQVGAMP4() throws Exception {
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.MPEG_4_SP,
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_SQVGA_MP4, false);
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_MP4, 240, 160);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("SQVGAMP4", videoRecordedResult);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QCIF MP4
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFMP4() throws Exception {
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.MPEG_4_SP,
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QCIF_MP4, false);
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_MP4, 176, 144);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFMP4", videoRecordedResult);
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF MP4
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFMP4() throws Exception {
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_CIF_MP4, false);
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_MP4, 352, 288);
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFMP4", videoRecordedResult);
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF MP4 output format 3gpp
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFMP43GPP() throws Exception {
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 352, 288);
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFMP4 3GPP", videoRecordedResult);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFH2633GPP() throws Exception {
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263 3GPP", videoRecordedResult);
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidVideoPath() throws Exception {
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidVideoPathSuccessful = false;
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263,
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false);
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid outputFile Path", isTestInvalidVideoPathSuccessful);
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidVideoSize() throws Exception {
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidVideoSizeSuccessful = false;
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidVideoSizeSuccessful = invalidRecordSetting(15, 800, 600, MediaRecorder.VideoEncoder.H263,
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid video Size", isTestInvalidVideoSizeSuccessful);
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidFrameRate() throws Exception {
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidFrameRateSuccessful = false;
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidFrameRateSuccessful = invalidRecordSetting(50, 176, 144, MediaRecorder.VideoEncoder.H263,
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid FrameRate", isTestInvalidFrameRateSuccessful);
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4251619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
4261619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    @LargeTest
4271619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    //est cases for the new codec
4281619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    public void testDeviceSpecificCodec() throws Exception {
4291619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        boolean recordSuccess = false;
4301619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        String deviceType = MediaProfileReader.getDeviceType();
4311619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        Log.v(TAG, "deviceType = " + deviceType);
4321619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        if (deviceType.compareTo("voles") == 0) {
4331619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            // Test cases are device specified
4341619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            MediaProfileReader.createVideoProfileTable();
4351619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            MediaProfileReader.createAudioProfileTable();
4361619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            MediaProfileReader.createEncoderTable();
4371619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            String encoderType = MediaProfileReader.getVideoCodecProperty();
4381619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            String encoder[] = encoderType.split(",");
4391619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            String audioType = MediaProfileReader.getAudioCodecProperty();
4401619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            String audio[] = audioType.split(",");
4411619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            for (int k = 0; k < 2; k++) {
4421619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                for (int i = 0; i < encoder.length; i++) {
4431619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    for (int j = 0; j < audio.length; j++) {
4441619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                        if (k == 0) {
4451619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                            recordSuccess = recordVideoWithPara(encoder[i], audio[j], "high");
4461619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                        } else {
4471619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                            recordSuccess = recordVideoWithPara(encoder[i], audio[j], "low");
4481619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                        }
4491619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                        assertTrue((encoder[i] + audio[j]), recordSuccess);
4501619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    }
4511619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                }
4521619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            }
4531619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        }
4541619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    }
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
457