summaryrefslogtreecommitdiffstats
path: root/media/tests/MediaFrameworkTest
diff options
context:
space:
mode:
authorYu Shan Emily Lau <yslau@google.com>2009-09-14 16:23:12 -0700
committerYu Shan Emily Lau <yslau@google.com>2009-09-14 16:27:34 -0700
commit1619367ab823150fa8856d419abe02ceb75886f1 (patch)
tree3ef0543649bdc49a88aaf15af55f9fc3f8ffc5d4 /media/tests/MediaFrameworkTest
parent944808f392e416858e3265b14b9e0a4410a1dbbf (diff)
downloadframeworks_base-1619367ab823150fa8856d419abe02ceb75886f1.zip
frameworks_base-1619367ab823150fa8856d419abe02ceb75886f1.tar.gz
frameworks_base-1619367ab823150fa8856d419abe02ceb75886f1.tar.bz2
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. new file: tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java modified: tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
Diffstat (limited to 'media/tests/MediaFrameworkTest')
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java84
-rw-r--r--media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java101
2 files changed, 182 insertions, 3 deletions
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
new file mode 100644
index 0000000..0401390
--- /dev/null
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
@@ -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);
+ }
+}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
index ef0a3b1..39846c6 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaRecorderTest.java
@@ -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);
+ }
+ }
+ }
+ }
+ }
}