diff options
author | Yu Shan Emily Lau <yslau@google.com> | 2009-09-14 16:23:12 -0700 |
---|---|---|
committer | Yu Shan Emily Lau <yslau@google.com> | 2009-09-14 16:27:34 -0700 |
commit | 1619367ab823150fa8856d419abe02ceb75886f1 (patch) | |
tree | 3ef0543649bdc49a88aaf15af55f9fc3f8ffc5d4 /media/tests/MediaFrameworkTest | |
parent | 944808f392e416858e3265b14b9e0a4410a1dbbf (diff) | |
download | frameworks_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')
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); + } + } + } + } + } } |