Merge change 24955 into eclair

* changes:
  	new file:   tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java 	modified:   tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java Added a new test suite which parse the system media properties and group in into the high quality and low quality recording tests.
This commit is contained in:
Android (Google) Code Review
2009-09-15 17:10:54 -04:00
2 changed files with 182 additions and 3 deletions

View File

@ -0,0 +1,84 @@
package com.android.mediaframeworktest;
import android.media.MediaRecorder;
import android.os.SystemProperties;
import java.util.HashMap;
public class MediaProfileReader {
public static final HashMap<String, Integer>
OUTPUT_FORMAT_TABLE = new HashMap<String, Integer>();
public static String MEDIA_ENC_VID = "ro.media.enc.vid.";
public static String MEDIA_AUD_VID = "ro.media.enc.aud.";
public static String[] VIDEO_ENCODER_PROPERTY = {".width", ".height", ".bps", ".fps",};
public static String[] AUDIO_ENCODER_PROPERTY = {".bps", ".hz", ".ch",};
public static String getVideoCodecProperty() {
String s;
s = SystemProperties.get("ro.media.enc.vid.codec");
return s;
}
public static String getAudioCodecProperty() {
String s;
s = SystemProperties.get("ro.media.enc.aud.codec");
return s;
}
public static String getDeviceType() {
// push all the property into one big table
String s;
s = SystemProperties.get("ro.product.name");
return s;
}
public static void createVideoProfileTable() {
// push all the property into one big table
String encoderType = getVideoCodecProperty();
String encoder[] = encoderType.split(",");
for (int i = 0; i < encoder.length; i++) {
for (int j = 0; j < VIDEO_ENCODER_PROPERTY.length; j++) {
String propertyName = MEDIA_ENC_VID + encoder[i] + VIDEO_ENCODER_PROPERTY[j];
String prop = SystemProperties.get(propertyName);
//push to the table
String propRange[] = prop.split(",");
OUTPUT_FORMAT_TABLE.put((encoder[i] + VIDEO_ENCODER_PROPERTY[j] + "_low"),
Integer.parseInt(propRange[0]));
OUTPUT_FORMAT_TABLE.put((encoder[i] + VIDEO_ENCODER_PROPERTY[j] + "_high"),
Integer.parseInt(propRange[1]));
}
}
}
public static void createAudioProfileTable() {
// push all the property into one big table
String audioType = getAudioCodecProperty();
String encoder[] = audioType.split(",");
for (int i = 0; i < encoder.length; i++) {
for (int j = 0; j < AUDIO_ENCODER_PROPERTY.length; j++) {
String propertyName = MEDIA_AUD_VID + encoder[i] + AUDIO_ENCODER_PROPERTY[j];
String prop = SystemProperties.get(propertyName);
//push to the table
String propRange[] = prop.split(",");
OUTPUT_FORMAT_TABLE.put((encoder[i] + AUDIO_ENCODER_PROPERTY[j] + "_low"),
Integer.parseInt(propRange[0]));
OUTPUT_FORMAT_TABLE.put((encoder[i] + AUDIO_ENCODER_PROPERTY[j] + "_high"),
Integer.parseInt(propRange[1]));
}
}
}
public static void createEncoderTable(){
OUTPUT_FORMAT_TABLE.put("h263", MediaRecorder.VideoEncoder.H263);
OUTPUT_FORMAT_TABLE.put("h264", MediaRecorder.VideoEncoder.H264);
OUTPUT_FORMAT_TABLE.put("m4v", MediaRecorder.VideoEncoder.MPEG_4_SP);
OUTPUT_FORMAT_TABLE.put("amrnb", MediaRecorder.AudioEncoder.AMR_NB);
OUTPUT_FORMAT_TABLE.put("amrwb", MediaRecorder.AudioEncoder.AMR_WB);
OUTPUT_FORMAT_TABLE.put("aac", MediaRecorder.AudioEncoder.AAC);
OUTPUT_FORMAT_TABLE.put("aacplus", MediaRecorder.AudioEncoder.AAC_PLUS);
OUTPUT_FORMAT_TABLE.put("eaacplus",
MediaRecorder.AudioEncoder.EAAC_PLUS);
}
}

View File

@ -29,7 +29,7 @@ import android.test.ActivityInstrumentationTestCase;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.android.mediaframeworktest.MediaProfileReader;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.Suppress;
@ -46,6 +46,9 @@ public class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFram
private SurfaceHolder mSurfaceHolder = null;
private MediaRecorder mRecorder;
private int MIN_VIDEO_FPS = 5;
Context mContext;
Camera mCamera;
@ -96,7 +99,70 @@ public class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFram
}
}
private boolean recordVideoWithPara(String encoder, String audio, String quality){
boolean recordSuccess = false;
int videoEncoder = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder);
int audioEncoder = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio);
int videoWidth = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".width_" + quality);
int videoHeight =
MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".height_" + quality);
int videoFps = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".fps_" + quality);
int videoBitrate = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(encoder + ".bps_" + quality);
int audioBitrate = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".bps_" + quality);
int audioChannels = MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".ch_" + quality);
int audioSamplingRate =
MediaProfileReader.OUTPUT_FORMAT_TABLE.get(audio + ".hz_" + quality);
if (videoFps < MIN_VIDEO_FPS) {
videoFps = MIN_VIDEO_FPS;
}
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
String filename = ("/sdcard/" + encoder + "_" + audio + "_" + quality + ".3gp");
try {
Log.v(TAG, "video encoder :" + videoEncoder);
Log.v(TAG, "audio encoder :" + audioEncoder);
Log.v(TAG, "quality : " + quality);
Log.v(TAG, "encoder : " + encoder);
Log.v(TAG, "audio : " + audio);
Log.v(TAG, "videoWidth : " + videoWidth);
Log.v(TAG, "videoHeight : " + videoHeight);
Log.v(TAG, "videoFPS : " + videoFps);
Log.v(TAG, "videobitrate : " + videoBitrate);
Log.v(TAG, "audioBitrate : " + audioBitrate);
Log.v(TAG, "audioChannel : " + audioChannels);
Log.v(TAG, "AudioSampleRate : " + audioSamplingRate);
MediaRecorder mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setOutputFile(filename);
mMediaRecorder.setVideoFrameRate(videoFps);
mMediaRecorder.setVideoSize(videoWidth, videoHeight);
mMediaRecorder.setParameters(String.format("video-param-encoding-bitrate=%d",
videoBitrate));
mMediaRecorder.setParameters(String.format("audio-param-encoding-bitrate=%d",
audioBitrate));
mMediaRecorder.setParameters(String.format("audio-param-number-of-channels=%d",
audioChannels));
mMediaRecorder.setParameters(String.format("audio-param-sampling-rate=%d",
audioSamplingRate));
mMediaRecorder.setVideoEncoder(videoEncoder);
mMediaRecorder.setAudioEncoder(audioEncoder);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
Thread.sleep(MediaNames.RECORDED_TIME);
mMediaRecorder.stop();
mMediaRecorder.release();
recordSuccess = validateVideo(filename, videoWidth, videoHeight);
} catch (Exception e) {
Log.v(TAG, e.toString());
return false;
}
return recordSuccess;
}
private boolean invalidRecordSetting(int frameRate, int width, int height,
int videoFormat, int outFormat, String outFile, boolean videoOnly) {
try {
@ -356,6 +422,35 @@ public class MediaRecorderTest extends ActivityInstrumentationTestCase<MediaFram
MediaRecorder.OutputFormat.THREE_GPP, MediaNames.RECORDED_VIDEO_3GP, false);
assertTrue("Invalid FrameRate", isTestInvalidFrameRateSuccessful);
}
@LargeTest
//est cases for the new codec
public void testDeviceSpecificCodec() throws Exception {
boolean recordSuccess = false;
String deviceType = MediaProfileReader.getDeviceType();
Log.v(TAG, "deviceType = " + deviceType);
if (deviceType.compareTo("voles") == 0) {
// Test cases are device specified
MediaProfileReader.createVideoProfileTable();
MediaProfileReader.createAudioProfileTable();
MediaProfileReader.createEncoderTable();
String encoderType = MediaProfileReader.getVideoCodecProperty();
String encoder[] = encoderType.split(",");
String audioType = MediaProfileReader.getAudioCodecProperty();
String audio[] = audioType.split(",");
for (int k = 0; k < 2; k++) {
for (int i = 0; i < encoder.length; i++) {
for (int j = 0; j < audio.length; j++) {
if (k == 0) {
recordSuccess = recordVideoWithPara(encoder[i], audio[j], "high");
} else {
recordSuccess = recordVideoWithPara(encoder[i], audio[j], "low");
}
assertTrue((encoder[i] + audio[j]), recordSuccess);
}
}
}
}
}
}