summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/HTML5VideoInline.java15
-rw-r--r--core/java/android/webkit/HTML5VideoView.java21
-rw-r--r--core/java/android/webkit/HTML5VideoViewProxy.java13
3 files changed, 25 insertions, 24 deletions
diff --git a/core/java/android/webkit/HTML5VideoInline.java b/core/java/android/webkit/HTML5VideoInline.java
index f1d91890ea92..4f042a6af5f7 100644
--- a/core/java/android/webkit/HTML5VideoInline.java
+++ b/core/java/android/webkit/HTML5VideoInline.java
@@ -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);
}
diff --git a/core/java/android/webkit/HTML5VideoView.java b/core/java/android/webkit/HTML5VideoView.java
index 663497c76c5c..b9d55e07d62b 100644
--- a/core/java/android/webkit/HTML5VideoView.java
+++ b/core/java/android/webkit/HTML5VideoView.java
@@ -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;
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index d3fcfa510eef..d12b965f66f0 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -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);
}