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