/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.mediaframeworktest.functional; import com.android.mediaframeworktest.MediaFrameworkTest; import com.android.mediaframeworktest.MediaNames; import java.io.*; import android.content.Context; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.test.ActivityInstrumentationTestCase; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.Suppress; /** * Junit / Instrumentation test case for the media recorder api */ public class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFrameworkTest> { private String TAG = "MediaRecorderTest"; private int mOutputDuration =0; private int mOutputVideoWidth = 0; private int mOutputVideoHeight= 0 ; private SurfaceHolder mSurfaceHolder = null; private MediaRecorder mRecorder; Context mContext; public MediaRecorderTest() { super("com.android.mediaframeworktest", MediaFrameworkTest.class); } protected void setUp() throws Exception { super.setUp(); Log.v(TAG,"create the media recorder"); mRecorder = new MediaRecorder(); } private void recordVideo(int frameRate, int width, int height, int videoFormat, int outFormat, String outFile, boolean videoOnly) { Log.v(TAG,"startPreviewAndPrepareRecording"); try { if (!videoOnly) { Log.v(TAG, "setAudioSource"); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); } mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mRecorder.setOutputFormat(outFormat); Log.v(TAG, "output format " + outFormat); mRecorder.setOutputFile(outFile); mRecorder.setVideoFrameRate(frameRate); mRecorder.setVideoSize(width, height); Log.v(TAG, "setEncoder"); mRecorder.setVideoEncoder(videoFormat); if (!videoOnly) { mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); } mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); Log.v(TAG, "setPreview"); mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); Log.v(TAG, "prepare"); mRecorder.prepare(); Log.v(TAG, "start"); mRecorder.start(); Thread.sleep(MediaNames.RECORDED_TIME); Log.v(TAG, "stop"); mRecorder.stop(); mRecorder.release(); } catch (Exception e) { Log.v("record video failed ", e.toString()); mRecorder.release(); } } private boolean invalidRecordSetting(int frameRate, int width, int height, int videoFormat, int outFormat, String outFile, boolean videoOnly) { try { if (!videoOnly) { Log.v(TAG, "setAudioSource"); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); } mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mRecorder.setOutputFormat(outFormat); Log.v(TAG, "output format " + outFormat); mRecorder.setOutputFile(outFile); mRecorder.setVideoFrameRate(frameRate); mRecorder.setVideoSize(width, height); Log.v(TAG, "setEncoder"); mRecorder.setVideoEncoder(videoFormat); if (!videoOnly) { mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); } mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder(); Log.v(TAG, "setPreview"); mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); Log.v(TAG, "prepare"); mRecorder.prepare(); Log.v(TAG, "start"); mRecorder.start(); Thread.sleep(MediaNames.RECORDED_TIME); Log.v(TAG, "stop"); mRecorder.stop(); mRecorder.release(); } catch (Exception e) { Log.v("record video failed ", e.toString()); mRecorder.release(); Log.v(TAG, "reset and release"); return true; } return false; } private void getOutputVideoProperty(String outputFilePath) { MediaPlayer mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource(outputFilePath); Log.v(TAG, "file Path = " + outputFilePath); mediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); Log.v(TAG, "before player prepare"); mediaPlayer.prepare(); Log.v(TAG, "before getduration"); mOutputDuration = mediaPlayer.getDuration(); Log.v(TAG, "get video dimension"); mOutputVideoHeight = mediaPlayer.getVideoHeight(); mOutputVideoWidth = mediaPlayer.getVideoWidth(); mediaPlayer.release(); } catch (Exception e) { Log.v(TAG, e.toString()); mediaPlayer.release(); } } private void removeFile(String filePath) { File fileRemove = new File(filePath); fileRemove.delete(); } private boolean validateVideo(String filePath, int width, int height) { boolean validVideo = false; getOutputVideoProperty(filePath); if (mOutputVideoWidth == width && mOutputVideoHeight == height && mOutputDuration > MediaNames.VALID_VIDEO_DURATION ) { validVideo = true; } Log.v(TAG, "width = " + mOutputVideoWidth + " height = " + mOutputVideoHeight + " Duration = " + mOutputDuration); removeFile(filePath); return validVideo; } //Format: HVGA h263 @Suppress public void testHVGAH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_HVGA_H263, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_H263, 480, 320); assertTrue("HVGAH263", videoRecordedResult); } //Format: QVGA h263 @LargeTest public void testQVGAH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QVGA_H263, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_H263, 320, 240); assertTrue("QVGAH263", videoRecordedResult); } //Format: SQVGA h263 @LargeTest public void testSQVGAH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_SQVGA_H263, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_H263, 240, 160); assertTrue("SQVGAH263", videoRecordedResult); } //Format: QCIF h263 @LargeTest public void testQCIFH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_QCIF_H263, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_H263, 176, 144); assertTrue("QCIFH263", videoRecordedResult); } //Format: CIF h263 @LargeTest public void testCIFH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_CIF_H263, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_H263, 352, 288); assertTrue("CIFH263", videoRecordedResult); } @LargeTest public void testVideoOnly() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true); videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144); assertTrue("QCIFH263 Video Only", videoRecordedResult); } @Suppress public void testPortraitH263() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 144, 176, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true); videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 144, 176); assertTrue("PortraitH263", videoRecordedResult); } @Suppress public void testHVGAMP4() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 480, 320, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_HVGA_MP4, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_HVGA_MP4, 480, 320); assertTrue("HVGAMP4", videoRecordedResult); } @LargeTest public void testQVGAMP4() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 320, 240, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QVGA_MP4, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_QVGA_MP4, 320, 240); assertTrue("QVGAMP4", videoRecordedResult); } @LargeTest public void testSQVGAMP4() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 240, 160, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_SQVGA_MP4, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_SQVGA_MP4, 240, 160); assertTrue("SQVGAMP4", videoRecordedResult); } //Format: QCIF MP4 @LargeTest public void testQCIFMP4() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_QCIF_MP4, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_QCIF_MP4, 176, 144); assertTrue("QCIFMP4", videoRecordedResult); } //Format: CIF MP4 @LargeTest public void testCIFMP4() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_CIF_MP4, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_CIF_MP4, 352, 288); assertTrue("CIFMP4", videoRecordedResult); } //Format: CIF MP4 output format 3gpp @LargeTest public void testCIFMP43GPP() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 352, 288); assertTrue("CIFMP4 3GPP", videoRecordedResult); } @LargeTest public void testQCIFH2633GPP() throws Exception { boolean videoRecordedResult = false; recordVideo(15, 176, 144, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false); videoRecordedResult = validateVideo(MediaNames.RECORDED_VIDEO_3GP, 176, 144); assertTrue("QCIFH263 3GPP", videoRecordedResult); } @LargeTest public void testInvalidVideoPath() throws Exception { boolean isTestInvalidVideoPathSuccessful = false; isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false); assertTrue("Invalid outputFile Path", isTestInvalidVideoPathSuccessful); } @Suppress public void testInvalidVideoSize() throws Exception { boolean isTestInvalidVideoSizeSuccessful = false; isTestInvalidVideoSizeSuccessful = invalidRecordSetting(15, 800, 600, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false); assertTrue("Invalid video Size", isTestInvalidVideoSizeSuccessful); } @LargeTest public void testInvalidFrameRate() throws Exception { boolean isTestInvalidFrameRateSuccessful = false; isTestInvalidFrameRateSuccessful = invalidRecordSetting(50, 176, 144, MediaRecorder.VideoEncoder.H263, MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false); assertTrue("Invalid FrameRate", isTestInvalidFrameRateSuccessful); } }