blob: 3667faeba8a1037f9cf88c970cb9db7096113025 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.mediaframeworktest.stress;
import com.android.mediaframeworktest.MediaFrameworkTest;
import android.hardware.Camera;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.util.Log;
import android.view.SurfaceHolder;
import com.android.mediaframeworktest.MediaNames;
import java.util.Random;
/**
* Junit / Instrumentation test case for the media player
*/
public class MediaPlayerStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
private String TAG = "MediaPlayerStressTest";
private MediaRecorder mRecorder;
private Camera mCamera;
private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY = 10;
private static final int NUMBER_OF_RANDOM_REPOSITION_AND_PLAY_SHORT = 5;
private static final int NUMBER_OF_STRESS_LOOPS = 1000;
private static final int PLAYBACK_END_TOLERANCE = 5000;
private static final int WAIT_UNTIL_PLAYBACK_FINISH = 515000 ;
public MediaPlayerStressTest() {
super("com.android.mediaframeworktest", MediaFrameworkTest.class);
}
protected void setUp() throws Exception {
getActivity();
super.setUp();
}
@LargeTest
public void testStressHWDecoderRelease() throws Exception {
SurfaceHolder mSurfaceHolder;
long randomseed = System.currentTimeMillis();
Random generator = new Random(randomseed);
Log.v(TAG, "Random seed: " + randomseed);
int video_duration = MediaNames.STREAM_H264_480_360_1411k_DURATION;
int random_play_time;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
try {
for (int i = 0; i < NUMBER_OF_STRESS_LOOPS; i++) {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(MediaNames.STREAM_H264_480_360_1411k);
mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
mp.prepare();
mp.start();
// seek and play
for (int j = 0; j < generator.nextInt(10); j++) {
random_play_time =
generator.nextInt(MediaNames.STREAM_H264_480_360_1411k_DURATION / 2);
Log.v(TAG, "Play time = " + random_play_time);
Thread.sleep(random_play_time);
int seek_time = MediaNames.STREAM_H264_480_360_1411k_DURATION / 2;
Log.v(TAG, "Seek time = " + seek_time);
mp.seekTo(seek_time);
}
mp.release();
}
} catch (Exception e) {
Log.v(TAG, e.toString());
}
}
@LargeTest
public void testStressGetCurrentPosition() throws Exception {
SurfaceHolder mSurfaceHolder;
long randomseed = System.currentTimeMillis();
Random generator = new Random(randomseed);
Log.v(TAG, "Random seed: " + randomseed);
int video_duration = MediaNames.VIDEO_H263_AAC_DURATION;
int random_play_time = 0;
int random_seek_time = 0;
int random_no_of_seek = 0;
mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
try {
for (int i = 0; i < NUMBER_OF_STRESS_LOOPS; i++) {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(MediaNames.VIDEO_H263_AMR);
mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
mp.prepare();
mp.start();
random_no_of_seek = generator.nextInt(10);
// make sure the seek at least run once.
if (random_no_of_seek == 0) {
random_no_of_seek = 1;
}
// Random seek and play
for (int j = 0; j < random_no_of_seek; j++) {
random_play_time =
generator.nextInt(video_duration / 2);
Log.v(TAG, "Play time = " + random_play_time);
Thread.sleep(random_play_time);
random_seek_time =
generator.nextInt(video_duration / 2);
Log.v(TAG, "Seek time = " + random_seek_time);
mp.seekTo(random_seek_time);
}
//wait until the movie finish and check the current position
//Make sure the wait time is long enough
long wait_until_playback_finish = video_duration - random_seek_time + PLAYBACK_END_TOLERANCE * 2;
Thread.sleep(wait_until_playback_finish);
Log.v(TAG, "CurrentPosition = " + mp.getCurrentPosition());
if ( mp.isPlaying() || mp.getCurrentPosition() > (video_duration + PLAYBACK_END_TOLERANCE)){
assertTrue("Current PlayTime greater than duration", false);
}
mp.release();
}
} catch (Exception e) {
Log.v(TAG, e.toString());
}
}
}