MediaRecorderTest.java revision 0fc6bc4cac6391f048f0f2748b3e979effe0924b
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;
281b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dongimport android.media.EncoderCapabilities;
291b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dongimport android.media.EncoderCapabilities.VideoEncoderCap;
301b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dongimport android.media.EncoderCapabilities.AudioEncoderCap;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceHolder;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.SurfaceView;
351619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lauimport com.android.mediaframeworktest.MediaProfileReader;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress;
391b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dongimport java.util.List;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Junit / Instrumentation test case for the media recorder api
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private String TAG = "MediaRecorderTest";
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputDuration =0;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputVideoWidth = 0;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mOutputVideoHeight= 0 ;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private SurfaceHolder mSurfaceHolder = null;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MediaRecorder mRecorder;
531619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
541619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    private int MIN_VIDEO_FPS = 5;
551619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Context mContext;
572071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    Camera mCamera;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MediaRecorderTest() {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG,"create the media recorder");
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRecorder = new MediaRecorder();
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void recordVideo(int frameRate, int width, int height,
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG,"startPreviewAndPrepareRecording");
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setAudioSource");
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(outFormat);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "output format " + outFormat);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(outFile);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoFrameRate(frameRate);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSize(width, height);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setEncoder");
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoEncoder(videoFormat);
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setPreview");
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "prepare");
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start");
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.RECORDED_TIME);
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "stop");
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v("record video failed ", e.toString());
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1061b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong    private boolean recordVideoWithPara(VideoEncoderCap videoCap, AudioEncoderCap audioCap, boolean highQuality){
1071619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        boolean recordSuccess = false;
1081b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int videoEncoder = videoCap.mCodec;
1091b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int audioEncoder = audioCap.mCodec;
1101b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int videoWidth = highQuality? videoCap.mMaxFrameWidth: videoCap.mMinFrameWidth;
1111b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int videoHeight = highQuality? videoCap.mMaxFrameHeight: videoCap.mMinFrameHeight;
1121b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int videoFps = highQuality? videoCap.mMaxFrameRate: videoCap.mMinFrameRate;
1131b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int videoBitrate = highQuality? videoCap.mMaxBitRate: videoCap.mMinBitRate;
1141b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int audioBitrate = highQuality? audioCap.mMaxBitRate: audioCap.mMinBitRate;
1151b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int audioChannels = highQuality? audioCap.mMaxChannels: audioCap.mMinChannels ;
1161b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        int audioSamplingRate = highQuality? audioCap.mMaxSampleRate: audioCap.mMinSampleRate;
1171619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1181619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        if (videoFps < MIN_VIDEO_FPS) {
1191619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            videoFps = MIN_VIDEO_FPS;
1201619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        }
1211619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
1221b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        String filename = ("/sdcard/" + videoEncoder + "_" + audioEncoder + "_" + highQuality + ".3gp");
1231619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        try {
1241619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "video encoder :" + videoEncoder);
1251619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audio encoder :" + audioEncoder);
1261b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong            Log.v(TAG, "quality : " + (highQuality?"high": "low"));
1271b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong            Log.v(TAG, "encoder : " + MediaProfileReader.getVideoCodecName(videoEncoder));
1281b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong            Log.v(TAG, "audio : " + MediaProfileReader.getAudioCodecName(audioEncoder));
1291619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoWidth : " + videoWidth);
1301619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoHeight : " + videoHeight);
1311619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videoFPS : " + videoFps);
1321619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "videobitrate : " + videoBitrate);
1331619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audioBitrate : " + audioBitrate);
1341619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "audioChannel : " + audioChannels);
1351619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, "AudioSampleRate : " + audioSamplingRate);
1361619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1371619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            MediaRecorder mMediaRecorder = new MediaRecorder();
1381619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
1391619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
1401619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
1411619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setOutputFile(filename);
1421619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoFrameRate(videoFps);
1431619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoSize(videoWidth, videoHeight);
1440fc6bc4cac6391f048f0f2748b3e979effe0924bJames Dong            mMediaRecorder.setVideoEncodingBitRate(videoBitrate);
1450fc6bc4cac6391f048f0f2748b3e979effe0924bJames Dong            mMediaRecorder.setAudioEncodingBitRate(audioBitrate);
1460fc6bc4cac6391f048f0f2748b3e979effe0924bJames Dong            mMediaRecorder.setAudioChannels(audioChannels);
1470fc6bc4cac6391f048f0f2748b3e979effe0924bJames Dong            mMediaRecorder.setAudioSamplingRate(audioSamplingRate);
1481619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setVideoEncoder(videoEncoder);
1491619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setAudioEncoder(audioEncoder);
1501619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
1511619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.prepare();
1521619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.start();
1531619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Thread.sleep(MediaNames.RECORDED_TIME);
1541619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.stop();
1551619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            mMediaRecorder.release();
1561619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            recordSuccess = validateVideo(filename, videoWidth, videoHeight);
1571619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        } catch (Exception e) {
1581619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            Log.v(TAG, e.toString());
1591619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            return false;
1601619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        }
1611619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        return recordSuccess;
1621619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    }
1631619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean invalidRecordSetting(int frameRate, int width, int height,
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.v(TAG, "setAudioSource");
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFormat(outFormat);
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "output format " + outFormat);
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setOutputFile(outFile);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoFrameRate(frameRate);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoSize(width, height);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setEncoder");
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setVideoEncoder(videoFormat);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (!videoOnly) {
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "setPreview");
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "prepare");
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.prepare();
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "start");
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.start();
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Thread.sleep(MediaNames.RECORDED_TIME);
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "stop");
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.stop();
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v("record video failed ", e.toString());
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mRecorder.release();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "reset and release");
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void getOutputVideoProperty(String outputFilePath) {
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        MediaPlayer mediaPlayer = new MediaPlayer();
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        try {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.setDataSource(outputFilePath);
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "file Path = " + outputFilePath);
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "before player prepare");
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.prepare();
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "before getduration");
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mOutputDuration = mediaPlayer.getDuration();
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, "get video dimension");
21517d7ea4947dfad101ae689f3b717ba0a52945155Yu Shan Emily Lau            Thread.sleep(1000);
216bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau            mOutputVideoHeight = mediaPlayer.getVideoHeight();
217bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau            mOutputVideoWidth = mediaPlayer.getVideoWidth();
218bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau            //mOutputVideoHeight = CodecTest.videoHeight(outputFilePath);
219bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau            //mOutputVideoWidth = CodecTest.videoWidth(outputFilePath);
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.release();
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } catch (Exception e) {
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Log.v(TAG, e.toString());
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mediaPlayer.release();
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void removeFile(String filePath) {
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        File fileRemove = new File(filePath);
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fileRemove.delete();
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private boolean validateVideo(String filePath, int width, int height) {
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean validVideo = false;
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        getOutputVideoProperty(filePath);
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mOutputVideoWidth == width && mOutputVideoHeight == height &&
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mOutputDuration > MediaNames.VALID_VIDEO_DURATION ) {
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            validVideo = true;
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Log.v(TAG, "width = " + mOutputVideoWidth + " height = " + mOutputVideoHeight + " Duration = " + mOutputDuration);
240dc1af5befaa21e92c41dd6e173b2d6fb859cdd23Yu Shan Emily Lau        //removeFile(filePath);
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return validVideo;
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: HVGA h263
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testHVGAH263() throws Exception {
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.H263,
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_HVGA_H263, false);
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_H263, 480, 320);
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("HVGAH263", videoRecordedResult);
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QVGA h263
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQVGAH263() throws Exception {
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.H263,
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QVGA_H263, false);
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_H263, 320, 240);
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QVGAH263", videoRecordedResult);
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: SQVGA h263
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSQVGAH263() throws Exception {
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.H263,
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_SQVGA_H263, false);
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_H263, 240, 160);
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("SQVGAH263", videoRecordedResult);
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QCIF h263
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFH263() throws Exception {
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QCIF_H263, false);
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_H263, 176, 144);
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263", videoRecordedResult);
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF h263
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFH263() throws Exception {
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263,
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_CIF_H263, false);
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_H263, 352, 288);
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFH263", videoRecordedResult);
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testVideoOnly() throws Exception {
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true);
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263 Video Only", videoRecordedResult);
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3062071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    @LargeTest
3072071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    /*
3082071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     * This test case set the camera in portrait mode.
3092071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     * Verification: validate the video dimension and the duration.
3102071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau     */
3112071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau    public void testPortraitH263() throws Exception {
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3132071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        try {
3142071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera = Camera.open();
3152071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Camera.Parameters parameters = mCamera.getParameters();
3162071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            parameters.setPreviewSize(352, 288);
3172071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            parameters.set("orientation", "portrait");
3182071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.setParameters(parameters);
3192071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.unlock();
3202071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mRecorder.setCamera(mCamera);
3212071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Thread.sleep(1000);
3222071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263,
3232071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau                    MediaRecorder.OutputFormat.THREE_GPP,
3242071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau                    MediaNames.RECORDED_PORTRAIT_H263, true);
3252071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.lock();
3262071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            mCamera.release();
327bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau            videoRecordedResult =
328bc95d663adf047116d0286b4a797e60ae2410fecYu Shan Emily Lau                validateVideo(MediaNames.RECORDED_PORTRAIT_H263, 352, 288);
3292071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        } catch (Exception e) {
3302071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau            Log.v(TAG, e.toString());
3312071043512fc9ceba5d06fe6ea23eeda499c8e02Yu Shan Emily Lau        }
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("PortraitH263", videoRecordedResult);
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testHVGAMP4() throws Exception {
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.MPEG_4_SP,
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_HVGA_MP4, false);
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_MP4, 480, 320);
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("HVGAMP4", videoRecordedResult);
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQVGAMP4() throws Exception {
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.MPEG_4_SP,
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QVGA_MP4, false);
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_MP4, 320, 240);
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QVGAMP4", videoRecordedResult);
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSQVGAMP4() throws Exception {
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.MPEG_4_SP,
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_SQVGA_MP4, false);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_MP4, 240, 160);
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("SQVGAMP4", videoRecordedResult);
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: QCIF MP4
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFMP4() throws Exception {
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.MPEG_4_SP,
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QCIF_MP4, false);
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_MP4, 176, 144);
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFMP4", videoRecordedResult);
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF MP4
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFMP4() throws Exception {
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_CIF_MP4, false);
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_MP4, 352, 288);
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFMP4", videoRecordedResult);
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //Format: CIF MP4 output format 3gpp
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCIFMP43GPP() throws Exception {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 352, 288);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("CIFMP4 3GPP", videoRecordedResult);
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testQCIFH2633GPP() throws Exception {
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean videoRecordedResult = false;
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263,
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144);
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("QCIFH263 3GPP", videoRecordedResult);
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidVideoPath() throws Exception {
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidVideoPathSuccessful = false;
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263,
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false);
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid outputFile Path", isTestInvalidVideoPathSuccessful);
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Suppress
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidVideoSize() throws Exception {
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidVideoSizeSuccessful = false;
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidVideoSizeSuccessful = invalidRecordSetting(15, 800, 600, MediaRecorder.VideoEncoder.H263,
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid video Size", isTestInvalidVideoSizeSuccessful);
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
41817d7ea4947dfad101ae689f3b717ba0a52945155Yu Shan Emily Lau
4199d7b2fa80858dada3013af47007046c0cf5ec2eaYu Shan Emily Lau    @Suppress
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @LargeTest
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testInvalidFrameRate() throws Exception {
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        boolean isTestInvalidFrameRateSuccessful = false;
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        isTestInvalidFrameRateSuccessful = invalidRecordSetting(50, 176, 144, MediaRecorder.VideoEncoder.H263,
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertTrue("Invalid FrameRate", isTestInvalidFrameRateSuccessful);
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4271619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau
4281619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    @LargeTest
429dc1af5befaa21e92c41dd6e173b2d6fb859cdd23Yu Shan Emily Lau    //test cases for the new codec
4301619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    public void testDeviceSpecificCodec() throws Exception {
431dc1af5befaa21e92c41dd6e173b2d6fb859cdd23Yu Shan Emily Lau        int noOfFailure = 0;
4321619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        boolean recordSuccess = false;
4331619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        String deviceType = MediaProfileReader.getDeviceType();
4341619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau        Log.v(TAG, "deviceType = " + deviceType);
4351b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        List<VideoEncoderCap> videoEncoders = MediaProfileReader.getVideoEncoders();
4361b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        List<AudioEncoderCap> audioEncoders = MediaProfileReader.getAudioEncoders();
4371b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        for (int k = 0; k < 2; k++) {
4381b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong            for (VideoEncoderCap videoEncoder: videoEncoders) {
4391b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                for (AudioEncoderCap audioEncoder: audioEncoders) {
4401b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                    if (k == 0) {
4411b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                        recordSuccess = recordVideoWithPara(videoEncoder, audioEncoder, true);
4421b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                    } else {
4431b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                        recordSuccess = recordVideoWithPara(videoEncoder, audioEncoder, false);
4441b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                    }
4451b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                    if (!recordSuccess) {
4461b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                        Log.v(TAG, "testDeviceSpecificCodec failed");
4471b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                        Log.v(TAG, "Encoder = " + videoEncoder.mCodec + "Audio Encoder = " + audioEncoder.mCodec);
4481b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong                        noOfFailure++;
4491619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                    }
4501619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau                }
4511619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau            }
4521b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        }
4531b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong        if (noOfFailure != 0) {
4541b7babd2cce5bb10adac7b061cf7ba065d480edbJames Dong            assertTrue("testDeviceSpecificCodec", false);
455dc1af5befaa21e92c41dd6e173b2d6fb859cdd23Yu Shan Emily Lau        }
4561619367ab823150fa8856d419abe02ceb75886f1Yu Shan Emily Lau    }
4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
458