Merge changes Ia44d880a,Ifbf63b24 into honeycomb-mr1

* changes:
  DO NOT MERGE : cherry pick of change Ieb7ae26b from master
  DO NOT MERGE : cherry pick of change I0f9f2c65 from master
This commit is contained in:
Teng-Hui Zhu
2011-04-07 14:17:52 -07:00
committed by Android (Google) Code Review
3 changed files with 60 additions and 5 deletions

View File

@ -191,8 +191,6 @@ public class HTML5VideoFullScreen extends HTML5VideoView
if (mProgressView != null) {
mProgressView.setVisibility(View.GONE);
mLayout.removeView(mProgressView);
mProgressView = null;
}
mVideoWidth = mp.getVideoWidth();
@ -314,4 +312,13 @@ public class HTML5VideoFullScreen extends HTML5VideoView
return false;
}
@Override
protected void switchProgressView(boolean playerBuffering) {
if (playerBuffering) {
mProgressView.setVisibility(View.VISIBLE);
} else {
mProgressView.setVisibility(View.GONE);
}
return;
}
}

View File

@ -15,7 +15,7 @@ import java.util.TimerTask;
/**
* @hide This is only used by the browser
*/
public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
public class HTML5VideoView implements MediaPlayer.OnPreparedListener {
protected static final String LOGTAG = "HTML5VideoView";
@ -78,6 +78,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
TIMEUPDATE_PERIOD);
}
mPlayer.start();
setPlayerBuffering(false);
}
}
@ -189,6 +190,10 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
mPlayer.setOnPreparedListener(this);
}
public void setOnInfoListener(HTML5VideoViewProxy proxy) {
mPlayer.setOnInfoListener(proxy);
}
// Normally called immediately after setVideoURI. But for full screen,
// this should be after surface holder created
public void prepareDataAndDisplayMode(HTML5VideoViewProxy proxy) {
@ -198,7 +203,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
setOnCompletionListener(proxy);
setOnPreparedListener(proxy);
setOnErrorListener(proxy);
setOnInfoListener(proxy);
// When there is exception, we could just bail out silently.
// No Video will be played though. Write the stack for debug
try {
@ -292,4 +297,21 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
return 0;
}
// This is true only when the player is buffering and paused
public boolean mPlayerBuffering = false;
public boolean getPlayerBuffering() {
return mPlayerBuffering;
}
public void setPlayerBuffering(boolean playerBuffering) {
mPlayerBuffering = playerBuffering;
switchProgressView(playerBuffering);
}
protected void switchProgressView(boolean playerBuffering) {
// Only used in HTML5VideoFullScreen
}
}

View File

@ -46,6 +46,7 @@ class HTML5VideoViewProxy extends Handler
implements MediaPlayer.OnPreparedListener,
MediaPlayer.OnCompletionListener,
MediaPlayer.OnErrorListener,
MediaPlayer.OnInfoListener,
SurfaceTexture.OnFrameAvailableListener {
// Logging tag.
private static final String LOGTAG = "HTML5VideoViewProxy";
@ -56,6 +57,8 @@ class HTML5VideoViewProxy extends Handler
private static final int PAUSE = 102;
private static final int ERROR = 103;
private static final int LOAD_DEFAULT_POSTER = 104;
private static final int BUFFERING_START = 105;
private static final int BUFFERING_END = 106;
// Message Ids to be handled on the WebCore thread
private static final int PREPARED = 200;
@ -92,6 +95,10 @@ class HTML5VideoViewProxy extends Handler
// identify the exact layer on the UI thread to use the SurfaceTexture.
private static int mBaseLayer = 0;
private static void setPlayerBuffering(boolean playerBuffering) {
mHTML5VideoView.setPlayerBuffering(playerBuffering);
}
// Every time webView setBaseLayer, this will be called.
// When we found the Video layer, then we set the Surface Texture to it.
// Otherwise, we may want to delete the Surface Texture to save memory.
@ -106,6 +113,8 @@ class HTML5VideoViewProxy extends Handler
int currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
if (layer != 0 && surfTexture != null && currentVideoLayerId != -1) {
int playerState = mHTML5VideoView.getCurrentState();
if (mHTML5VideoView.getPlayerBuffering())
playerState = HTML5VideoView.STATE_NOTPREPARED;
boolean foundInTree = nativeSendSurfaceTexture(surfTexture,
layer, currentVideoLayerId, textureName,
playerState);
@ -159,7 +168,6 @@ class HTML5VideoViewProxy extends Handler
WebChromeClient client, int videoLayerId) {
int currentVideoLayerId = -1;
boolean backFromFullScreenMode = false;
if (mHTML5VideoView != null) {
currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
if (mHTML5VideoView instanceof HTML5VideoFullScreen) {
@ -342,6 +350,14 @@ class HTML5VideoViewProxy extends Handler
}
break;
}
case BUFFERING_START: {
VideoPlayer.setPlayerBuffering(true);
break;
}
case BUFFERING_END: {
VideoPlayer.setPlayerBuffering(false);
break;
}
}
}
@ -671,4 +687,14 @@ class HTML5VideoViewProxy extends Handler
private native static boolean nativeSendSurfaceTexture(SurfaceTexture texture,
int baseLayer, int videoLayerId, int textureName,
int playerState);
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
sendMessage(obtainMessage(BUFFERING_START, what, extra));
} else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
sendMessage(obtainMessage(BUFFERING_END, what, extra));
}
return false;
}
}