diff --git a/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java b/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java index fd3c486ea..601c5a30e 100644 --- a/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java +++ b/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.java @@ -9,6 +9,8 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnBufferingUpdateListener; import android.media.MediaPlayer.OnCompletionListener; +import android.media.MediaPlayer.OnPreparedListener; +import android.media.MediaPlayer.OnVideoSizeChangedListener; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; @@ -21,7 +23,7 @@ import android.widget.Toast; public class MediaPlayerDemo_Video extends Activity implements OnBufferingUpdateListener, OnCompletionListener, - MediaPlayer.OnPreparedListener, SurfaceHolder.Callback { + OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { private static final String TAG = "MediaPlayerDemo"; private int mVideoWidth; @@ -37,6 +39,8 @@ public class MediaPlayerDemo_Video extends Activity implements private static final int RESOURCES_AUDIO = 3; private static final int LOCAL_VIDEO = 4; private static final int STREAM_VIDEO = 5; + private boolean mIsVideoSizeKnown = false; + private boolean mIsVideoReadyToBePlayed = false; /** * @@ -54,6 +58,7 @@ public class MediaPlayerDemo_Video extends Activity implements } private void playVideo(Integer Media) { + doCleanUp(); try { switch (Media) { @@ -109,6 +114,7 @@ public class MediaPlayerDemo_Video extends Activity implements mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); + mMediaPlayer.setOnVideoSizeChangedListener(this); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); @@ -126,15 +132,26 @@ public class MediaPlayerDemo_Video extends Activity implements Log.d(TAG, "onCompletion called"); } + public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { + Log.v(TAG, "onVideoSizeChanged called"); + if (width == 0 || height == 0) { + Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); + return; + } + mIsVideoSizeKnown = true; + mVideoWidth = width; + mVideoHeight = height; + if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { + startVideoPlayback(); + } + } + public void onPrepared(MediaPlayer mediaplayer) { Log.d(TAG, "onPrepared called"); - mVideoWidth = mMediaPlayer.getVideoWidth(); - mVideoHeight = mMediaPlayer.getVideoHeight(); - if (mVideoWidth != 0 && mVideoHeight != 0) { - holder.setFixedSize(mVideoWidth, mVideoHeight); - mMediaPlayer.start(); + mIsVideoReadyToBePlayed = true; + if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { + startVideoPlayback(); } - } public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { @@ -148,22 +165,43 @@ public class MediaPlayerDemo_Video extends Activity implements public void surfaceCreated(SurfaceHolder holder) { - // TODO Auto-generated method stub Log.d(TAG, "surfaceCreated called"); playVideo(extras.getInt(MEDIA)); } + @Override + protected void onPause() { + super.onPause(); + releaseMediaPlayer(); + doCleanUp(); + } + @Override protected void onDestroy() { super.onDestroy(); - // TODO Auto-generated method stub + releaseMediaPlayer(); + doCleanUp(); + } + + private void releaseMediaPlayer() { if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null; } - } + private void doCleanUp() { + mVideoWidth = 0; + mVideoHeight = 0; + mIsVideoReadyToBePlayed = false; + mIsVideoSizeKnown = false; + } + + private void startVideoPlayback() { + Log.v(TAG, "startVideoPlayback"); + holder.setFixedSize(mVideoWidth, mVideoHeight); + mMediaPlayer.start(); + } }