diff options
| author | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:43 -0800 |
|---|---|---|
| committer | The Android Open Source Project <initial-contribution@android.com> | 2008-12-17 18:05:43 -0800 |
| commit | f013e1afd1e68af5e3b868c26a653bbfb39538f8 (patch) | |
| tree | 7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf /core/java/android/widget/VideoView.java | |
| parent | e70cfafe580c6f2994c4827cd8a534aabf3eb05c (diff) | |
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'core/java/android/widget/VideoView.java')
| -rw-r--r-- | core/java/android/widget/VideoView.java | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java index da3c2aa38f73..df4015670bd6 100644 --- a/core/java/android/widget/VideoView.java +++ b/core/java/android/widget/VideoView.java @@ -182,6 +182,7 @@ public class VideoView extends SurfaceView implements MediaPlayerControl { try { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnPreparedListener(mPreparedListener); + mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); mIsPrepared = false; mMediaPlayer.setOnCompletionListener(mCompletionListener); mMediaPlayer.setOnErrorListener(mErrorListener); @@ -220,6 +221,17 @@ public class VideoView extends SurfaceView implements MediaPlayerControl { } } + MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener = + new MediaPlayer.OnVideoSizeChangedListener() { + public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { + mVideoWidth = mp.getVideoWidth(); + mVideoHeight = mp.getVideoHeight(); + if (mVideoWidth != 0 && mVideoHeight != 0) { + getHolder().setFixedSize(mVideoWidth, mVideoHeight); + } + } + }; + MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() { public void onPrepared(MediaPlayer mp) { // briefly show the mediacontroller @@ -241,26 +253,32 @@ public class VideoView extends SurfaceView implements MediaPlayerControl { // start the video here instead of in the callback. if (mSeekWhenPrepared != 0) { mMediaPlayer.seekTo(mSeekWhenPrepared); + mSeekWhenPrepared = 0; } if (mStartWhenPrepared) { mMediaPlayer.start(); + mStartWhenPrepared = false; if (mMediaController != null) { mMediaController.show(); } - } else if (!isPlaying() && (mSeekWhenPrepared != 0 || getCurrentPosition() > 0)) { + } else if (!isPlaying() && + (mSeekWhenPrepared != 0 || getCurrentPosition() > 0)) { if (mMediaController != null) { - mMediaController.show(0); // show the media controls when we're paused into a video and make 'em stick. + // Show the media controls when we're paused into a video and make 'em stick. + mMediaController.show(0); } } } } else { - Log.d("VideoView", "Couldn't get video size after prepare(): " + - mVideoWidth + "/" + mVideoHeight); - // The file was probably truncated or corrupt. Start anyway, so - // that we play whatever short snippet is there and then get - // the "playback completed" event. + // We don't know the video size yet, but should start anyway. + // The video size might be reported to us later. + if (mSeekWhenPrepared != 0) { + mMediaPlayer.seekTo(mSeekWhenPrepared); + mSeekWhenPrepared = 0; + } if (mStartWhenPrepared) { mMediaPlayer.start(); + mStartWhenPrepared = false; } } } @@ -370,9 +388,10 @@ public class VideoView extends SurfaceView implements MediaPlayerControl { { mSurfaceWidth = w; mSurfaceHeight = h; - if (mIsPrepared && mVideoWidth == w && mVideoHeight == h) { + if (mMediaPlayer != null && mIsPrepared && mVideoWidth == w && mVideoHeight == h) { if (mSeekWhenPrepared != 0) { mMediaPlayer.seekTo(mSeekWhenPrepared); + mSeekWhenPrepared = 0; } mMediaPlayer.start(); if (mMediaController != null) { |
