Loading core/java/android/webkit/HTML5VideoFullScreen.java +9 −2 Original line number Diff line number Diff line Loading @@ -191,8 +191,6 @@ public class HTML5VideoFullScreen extends HTML5VideoView if (mProgressView != null) { mProgressView.setVisibility(View.GONE); mLayout.removeView(mProgressView); mProgressView = null; } mVideoWidth = mp.getVideoWidth(); Loading Loading @@ -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; } } core/java/android/webkit/HTML5VideoView.java +24 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{ TIMEUPDATE_PERIOD); } mPlayer.start(); setPlayerBuffering(false); } } Loading Loading @@ -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) { Loading @@ -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 { Loading Loading @@ -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 } } core/java/android/webkit/HTML5VideoViewProxy.java +27 −1 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; Loading Loading @@ -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. Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -342,6 +350,14 @@ class HTML5VideoViewProxy extends Handler } break; } case BUFFERING_START: { VideoPlayer.setPlayerBuffering(true); break; } case BUFFERING_END: { VideoPlayer.setPlayerBuffering(false); break; } } } Loading Loading @@ -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; } } Loading
core/java/android/webkit/HTML5VideoFullScreen.java +9 −2 Original line number Diff line number Diff line Loading @@ -191,8 +191,6 @@ public class HTML5VideoFullScreen extends HTML5VideoView if (mProgressView != null) { mProgressView.setVisibility(View.GONE); mLayout.removeView(mProgressView); mProgressView = null; } mVideoWidth = mp.getVideoWidth(); Loading Loading @@ -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; } }
core/java/android/webkit/HTML5VideoView.java +24 −2 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener{ TIMEUPDATE_PERIOD); } mPlayer.start(); setPlayerBuffering(false); } } Loading Loading @@ -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) { Loading @@ -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 { Loading Loading @@ -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 } }
core/java/android/webkit/HTML5VideoViewProxy.java +27 −1 Original line number Diff line number Diff line Loading @@ -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"; Loading @@ -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; Loading Loading @@ -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. Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -342,6 +350,14 @@ class HTML5VideoViewProxy extends Handler } break; } case BUFFERING_START: { VideoPlayer.setPlayerBuffering(true); break; } case BUFFERING_END: { VideoPlayer.setPlayerBuffering(false); break; } } } Loading Loading @@ -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; } }