summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/HTML5VideoView.java8
-rw-r--r--core/java/android/webkit/HTML5VideoViewProxy.java28
2 files changed, 33 insertions, 3 deletions
diff --git a/core/java/android/webkit/HTML5VideoView.java b/core/java/android/webkit/HTML5VideoView.java
index 8ea73b50d4fb..ad6e5d3d4f31 100644
--- a/core/java/android/webkit/HTML5VideoView.java
+++ b/core/java/android/webkit/HTML5VideoView.java
@@ -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";
@@ -189,6 +189,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 +202,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 {
diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java
index acd7eab63a48..0ee1566196c5 100644
--- a/core/java/android/webkit/HTML5VideoViewProxy.java
+++ b/core/java/android/webkit/HTML5VideoViewProxy.java
@@ -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,8 @@ class HTML5VideoViewProxy extends Handler
// identify the exact layer on the UI thread to use the SurfaceTexture.
private static int mBaseLayer = 0;
+ // This is true only when the player is buffering and paused
+ private static boolean mPlayerBuffering = false;
// 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 +111,8 @@ class HTML5VideoViewProxy extends Handler
int currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
if (layer != 0 && surfTexture != null && currentVideoLayerId != -1) {
int playerState = mHTML5VideoView.getCurrentState();
+ if (mPlayerBuffering)
+ playerState = HTML5VideoView.STATE_NOTPREPARED;
boolean foundInTree = nativeSendSurfaceTexture(surfTexture,
layer, currentVideoLayerId, textureName,
playerState);
@@ -159,7 +166,7 @@ class HTML5VideoViewProxy extends Handler
WebChromeClient client, int videoLayerId) {
int currentVideoLayerId = -1;
boolean backFromFullScreenMode = false;
-
+ mPlayerBuffering = false;
if (mHTML5VideoView != null) {
currentVideoLayerId = mHTML5VideoView.getVideoLayerId();
if (mHTML5VideoView instanceof HTML5VideoFullScreen) {
@@ -224,6 +231,7 @@ class HTML5VideoViewProxy extends Handler
}
public static void onPrepared() {
+ mPlayerBuffering = false;
// The VideoView will decide whether to really kick off to play.
mHTML5VideoView.start();
if (mBaseLayer != 0) {
@@ -341,6 +349,14 @@ class HTML5VideoViewProxy extends Handler
}
break;
}
+ case BUFFERING_START: {
+ VideoPlayer.mPlayerBuffering = true;
+ break;
+ }
+ case BUFFERING_END: {
+ VideoPlayer.mPlayerBuffering = false;
+ break;
+ }
}
}
@@ -670,4 +686,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;
+ }
}