Merge "Support loading image and paused image for inline video" into honeycomb-mr1

This commit is contained in:
Teng-Hui Zhu
2011-03-21 14:01:10 -07:00
committed by Android (Google) Code Review
3 changed files with 25 additions and 24 deletions

View File

@@ -17,24 +17,15 @@ public class HTML5VideoInline extends HTML5VideoView{
private static SurfaceTexture mSurfaceTexture = null;
private static int[] mTextureNames;
// Only when the video is prepared, we render using SurfaceTexture.
// This in fact is used to avoid showing the obsolete content when
// switching videos.
private static boolean mReadyToUseSurfTex = false;
// Video control FUNCTIONS:
@Override
public void start() {
super.start();
if (mCurrentState == STATE_PREPARED) {
mReadyToUseSurfTex = true;
}
}
HTML5VideoInline(int videoLayerId, int position,
boolean autoStart) {
init(videoLayerId, position, autoStart);
mReadyToUseSurfTex = false;
}
@Override
@@ -54,7 +45,6 @@ public class HTML5VideoInline extends HTML5VideoView{
@Override
public void pauseAndDispatch(HTML5VideoViewProxy proxy) {
super.pauseAndDispatch(proxy);
mReadyToUseSurfTex = false;
}
// Inline Video specific FUNCTIONS:
@@ -87,11 +77,6 @@ public class HTML5VideoInline extends HTML5VideoView{
return mTextureNames[0];
}
@Override
public boolean getReadyToUseSurfTex() {
return mReadyToUseSurfTex;
}
private void setFrameAvailableListener(SurfaceTexture.OnFrameAvailableListener l) {
mSurfaceTexture.setOnFrameAvailableListener(l);
}

View File

@@ -27,9 +27,12 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
// prepared and not prepared.
// When the video is not prepared, we will have to save the seekTo time,
// and use it when prepared to play.
protected static final int STATE_NOTPREPARED = 0;
protected static final int STATE_PREPARED = 1;
// NOTE: these values are in sync with VideoLayerAndroid.h in webkit side.
// Please keep them in sync when changed.
static final int STATE_INITIALIZED = 0;
static final int STATE_NOTPREPARED = 1;
static final int STATE_PREPARED = 2;
static final int STATE_PLAYING = 3;
protected int mCurrentState;
protected HTML5VideoViewProxy mProxy;
@@ -121,7 +124,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
// Every time we start a new Video, we create a VideoView and a MediaPlayer
public void init(int videoLayerId, int position, boolean autoStart) {
mPlayer = new MediaPlayer();
mCurrentState = STATE_NOTPREPARED;
mCurrentState = STATE_INITIALIZED;
mProxy = null;
mVideoLayerId = videoLayerId;
mSaveSeekTime = position;
@@ -190,6 +193,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
} catch (IOException e) {
e.printStackTrace();
}
mCurrentState = STATE_NOTPREPARED;
}
@@ -198,6 +202,15 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{
return mVideoLayerId;
}
public int getCurrentState() {
if (mPlayer.isPlaying()) {
return STATE_PLAYING;
} else {
return mCurrentState;
}
}
private static final class TimeupdateTask extends TimerTask {
private HTML5VideoViewProxy mProxy;

View File

@@ -105,12 +105,12 @@ class HTML5VideoViewProxy extends Handler
int currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
if (layer != 0 && surfTexture != null && currentVideoLayerId != -1) {
boolean readyToUseSurfTex =
mHTML5VideoView.getReadyToUseSurfTex();
int playerState = mHTML5VideoView.getCurrentState();
boolean foundInTree = nativeSendSurfaceTexture(surfTexture,
layer, currentVideoLayerId, textureName,
readyToUseSurfTex);
if (readyToUseSurfTex && !foundInTree) {
playerState);
if (playerState == HTML5VideoView.STATE_PREPARED
&& !foundInTree) {
mHTML5VideoView.pauseAndDispatch(mCurrentProxy);
mHTML5VideoView.deleteSurfaceTexture();
}
@@ -228,6 +228,9 @@ class HTML5VideoViewProxy extends Handler
mHTML5VideoView.isFullScreenMode() &&
mHTML5VideoView.getAutostart() )
mHTML5VideoView.start();
if (mBaseLayer != 0) {
setBaseLayer(mBaseLayer);
}
}
public static void end() {
@@ -668,5 +671,5 @@ class HTML5VideoViewProxy extends Handler
private native void nativeOnTimeupdate(int position, int nativePointer);
private native static boolean nativeSendSurfaceTexture(SurfaceTexture texture,
int baseLayer, int videoLayerId, int textureName,
boolean updateTexture);
int playerState);
}