From 55eef638fae461d40b1ad4b1738bdef355a2d482 Mon Sep 17 00:00:00 2001 From: Xia Wang Date: Thu, 14 May 2009 21:20:15 -0700 Subject: Add a tool to play all kinds of media files saved in /sdcard/media_api/samples/. It also tests the seeking functionality during the play of each sample file. --- .../com/android/mediaframeworktest/MediaNames.java | 3 +- .../mediaframeworktest/functional/CodecTest.java | 79 ++++++++++++++++++++-- .../functional/MediaPlayerApiTest.java | 27 ++++++++ 3 files changed, 103 insertions(+), 6 deletions(-) (limited to 'media/tests') diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java index 760b6b5..407b4b3 100755 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java @@ -23,7 +23,8 @@ package com.android.mediaframeworktest; * */ public class MediaNames { - + //A directory to hold all kinds of media files + public static final String MEDIA_SAMPLE_POOL = "/sdcard/media_api/samples/"; //Audio files public static final String MP3CBR = "/sdcard/media_api/music/MP3CBR.mp3"; public static final String MP3VBR = "/sdcard/media_api/music/MP3VBR.mp3"; diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java index d9e17ea..cbd44ab 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/CodecTest.java @@ -34,6 +34,7 @@ import android.util.Log; import java.io.IOException; import java.io.InputStream; +import java.util.Random; /** * Junit / Instrumentation test case for the media player api @@ -50,8 +51,9 @@ public class CodecTest { private static final Object lock = new Object(); private static final Object prepareDone = new Object(); private static final Object videoSizeChanged = new Object(); + private static final Object onCompletion = new Object(); private static boolean onPrepareSuccess = false; - + private static boolean onCompleteSuccess = false; public static String printCpuInfo(){ String cm = "dumpsys cpuinfo"; @@ -725,8 +727,75 @@ public class CodecTest { } return onPrepareSuccess; } - - - -} + static MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() { + public void onCompletion(MediaPlayer mp) { + synchronized (onCompletion) { + Log.v(TAG, "notify the completion callback"); + onCompletion.notify(); + onCompleteSuccess = true; + } + } + }; + + // For each media file, forward twice and backward once, then play to the end + public static boolean playMediaSamples(String filePath) throws Exception { + int duration = 0; + int curPosition = 0; + int nextPosition = 0; + int waittime = 0; + Random r = new Random(); + initializeMessageLooper(); + synchronized (lock) { + try { + lock.wait(WAIT_FOR_COMMAND_TO_COMPLETE); + } catch(Exception e) { + Log.v(TAG, "looper was interrupted."); + return false; + } + } + try { + mMediaPlayer.setOnCompletionListener(mCompletionListener); + Log.v(TAG, "playMediaSamples: sample file name " + filePath); + mMediaPlayer.setDataSource(filePath); + mMediaPlayer.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder()); + mMediaPlayer.prepare(); + duration = mMediaPlayer.getDuration(); + Log.v(TAG, "playMediaSamples: duration = " + duration); + // start to play + mMediaPlayer.start(); + // randomly play for time within (0, duration/3) + Thread.sleep(r.nextInt(duration/3)); + mMediaPlayer.pause(); + Log.v(TAG, "playMediaSamples: current position after pause: " + + mMediaPlayer.getCurrentPosition()); + // seek to position (0, 2/3*duration) + nextPosition = mMediaPlayer.getCurrentPosition() + r.nextInt(duration/3); + mMediaPlayer.seekTo(nextPosition); + Log.v(TAG, "playMediaSamples: current position after the first seek:" + + mMediaPlayer.getCurrentPosition()); + // play for another short time + mMediaPlayer.start(); + Thread.sleep(r.nextInt(duration/6)); + Log.v(TAG, "playMediaSamples: position after the second play:" + + mMediaPlayer.getCurrentPosition()); + // seek to a random position (0, duration) + mMediaPlayer.seekTo(r.nextInt(duration)); + Log.v(TAG, "playMediaSamples: current position after the second seek:" + + mMediaPlayer.getCurrentPosition()); + waittime = duration - mMediaPlayer.getCurrentPosition(); + synchronized(onCompletion){ + try { + onCompletion.wait(waittime + 30000); + }catch (Exception e) { + Log.v(TAG, "playMediaSamples are interrupted"); + return false; + } + } + terminateMessageLooper(); + }catch (Exception e) { + Log.v(TAG, "playMediaSamples:" + e.getMessage()); + } + return onCompleteSuccess; + } +} diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java index 8be7058..94c69a8 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/MediaPlayerApiTest.java @@ -26,6 +26,8 @@ import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.Suppress; +import java.io.File; + /** * Junit / Instrumentation test case for the media player api @@ -456,4 +458,29 @@ public class MediaPlayerApiTest extends ActivityInstrumentationTestCase