Merge "Use device-dependent frame rate in the media recorder performance test"

This commit is contained in:
James Dong
2011-09-07 04:07:39 -07:00
committed by Android (Google) Code Review

View File

@@ -26,6 +26,7 @@ import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback; import android.hardware.Camera.PreviewCallback;
import android.media.MediaPlayer; import android.media.MediaPlayer;
import android.media.MediaRecorder; import android.media.MediaRecorder;
import android.media.EncoderCapabilities.VideoEncoderCap;
import android.os.ConditionVariable; import android.os.ConditionVariable;
import android.os.Looper; import android.os.Looper;
import android.os.SystemClock; import android.os.SystemClock;
@@ -35,6 +36,7 @@ import android.test.suitebuilder.annotation.Suppress;
import android.util.Log; import android.util.Log;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import java.util.List;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@@ -48,11 +50,12 @@ import java.io.BufferedWriter;
import android.media.MediaMetadataRetriever; import android.media.MediaMetadataRetriever;
import com.android.mediaframeworktest.MediaProfileReader; import com.android.mediaframeworktest.MediaProfileReader;
import android.hardware.Camera.PreviewCallback;
/** /**
* Junit / Instrumentation - performance measurement for media player and * Junit / Instrumentation - performance measurement for media player and
* recorder * recorder
*
* FIXME:
* Add tests on H264 video encoder
*/ */
public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
@@ -81,6 +84,8 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
private static int DECODER_LIMIT = 150; private static int DECODER_LIMIT = 150;
private static int CAMERA_LIMIT = 80; private static int CAMERA_LIMIT = 80;
private static List<VideoEncoderCap> videoEncoders = MediaProfileReader.getVideoEncoders();
Camera mCamera; Camera mCamera;
public MediaPlayerPerformance() { public MediaPlayerPerformance() {
@@ -360,6 +365,16 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
assertTrue("H264 playback memory test", memoryResult); assertTrue("H264 playback memory test", memoryResult);
} }
private int getMaxFrameRateForVideoEncoder(int codec) {
int frameRate = -1;
for (VideoEncoderCap cap: videoEncoders) {
if (cap.mCodec == MediaRecorder.VideoEncoder.H263) {
frameRate = cap.mMaxFrameRate;
}
}
return frameRate;
}
// Test case 4: Capture the memory usage after every 20 video only recorded // Test case 4: Capture the memory usage after every 20 video only recorded
@LargeTest @LargeTest
public void testH263RecordVideoOnlyMemoryUsage() throws Exception { public void testH263RecordVideoOnlyMemoryUsage() throws Exception {
@@ -369,8 +384,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
File videoH263RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT); File videoH263RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT);
Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut, true)); Writer output = new BufferedWriter(new FileWriter(videoH263RecordOnlyMemoryOut, true));
output.write("H263 video record only\n"); output.write("H263 video record only\n");
int frameRate = getMaxFrameRateForVideoEncoder(MediaRecorder.VideoEncoder.H263);
assertTrue("H263 video recording frame rate", frameRate != -1);
for (int i = 0; i < NUM_STRESS_LOOP; i++) { for (int i = 0; i < NUM_STRESS_LOOP; i++) {
assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263, assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.H263,
MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true)); MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
getMemoryWriteToLog(output, i); getMemoryWriteToLog(output, i);
} }
@@ -389,8 +406,10 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
File videoMp4RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT); File videoMp4RecordOnlyMemoryOut = new File(MEDIA_MEMORY_OUTPUT);
Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut, true)); Writer output = new BufferedWriter(new FileWriter(videoMp4RecordOnlyMemoryOut, true));
output.write("MPEG4 video record only\n"); output.write("MPEG4 video record only\n");
int frameRate = getMaxFrameRateForVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
assertTrue("MPEG4 video recording frame rate", frameRate != -1);
for (int i = 0; i < NUM_STRESS_LOOP; i++) { for (int i = 0; i < NUM_STRESS_LOOP; i++) {
assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP, assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.MPEG_4_SP,
MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true)); MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, true));
getMemoryWriteToLog(output, i); getMemoryWriteToLog(output, i);
} }
@@ -409,9 +428,11 @@ public class MediaPlayerPerformance extends ActivityInstrumentationTestCase2<Med
File videoRecordAudioMemoryOut = new File(MEDIA_MEMORY_OUTPUT); File videoRecordAudioMemoryOut = new File(MEDIA_MEMORY_OUTPUT);
Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut, true)); Writer output = new BufferedWriter(new FileWriter(videoRecordAudioMemoryOut, true));
int frameRate = getMaxFrameRateForVideoEncoder(MediaRecorder.VideoEncoder.H263);
assertTrue("H263 video recording frame rate", frameRate != -1);
output.write("Audio and h263 video record\n"); output.write("Audio and h263 video record\n");
for (int i = 0; i < NUM_STRESS_LOOP; i++) { for (int i = 0; i < NUM_STRESS_LOOP; i++) {
assertTrue(stressVideoRecord(20, 352, 288, MediaRecorder.VideoEncoder.H263, assertTrue(stressVideoRecord(frameRate, 352, 288, MediaRecorder.VideoEncoder.H263,
MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false)); MediaRecorder.OutputFormat.MPEG_4, MediaNames.RECORDED_VIDEO_3GP, false));
getMemoryWriteToLog(output, i); getMemoryWriteToLog(output, i);
} }