blob: 65451c5c51e38b55021620ce485c912871090ce1 [file] [log] [blame]
/*
* 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);
}
}