package android.webkit; import android.graphics.SurfaceTexture; import android.media.MediaPlayer; import android.webkit.HTML5VideoView; import android.webkit.HTML5VideoViewProxy; import android.opengl.GLES20; /** * @hide This is only used by the browser */ public class HTML5VideoInline extends HTML5VideoView{ // Due to the fact that SurfaceTexture consume a lot of memory, we make it // as static. m_textureNames is the texture bound with this SurfaceTexture. private static SurfaceTexture mSurfaceTexture = null; private static int[] mTextureNames; // Video control FUNCTIONS: @Override public void start() { if (!getPauseDuringPreparing()) { super.start(); } } HTML5VideoInline(int videoLayerId, int position, boolean autoStart) { init(videoLayerId, position, autoStart); } @Override public void decideDisplayMode() { mPlayer.setTexture(getSurfaceTextureInstance()); } // Normally called immediately after setVideoURI. But for full screen, // this should be after surface holder created @Override public void prepareDataAndDisplayMode(HTML5VideoViewProxy proxy) { super.prepareDataAndDisplayMode(proxy); setFrameAvailableListener(proxy); } // Pause the play and update the play/pause button @Override public void pauseAndDispatch(HTML5VideoViewProxy proxy) { super.pauseAndDispatch(proxy); } // Inline Video specific FUNCTIONS: @Override public SurfaceTexture getSurfaceTexture() { return mSurfaceTexture; } @Override public void deleteSurfaceTexture() { mSurfaceTexture = null; return; } // SurfaceTexture is a singleton here , too private SurfaceTexture getSurfaceTextureInstance() { // Create the surface texture. if (mSurfaceTexture == null) { mTextureNames = new int[1]; GLES20.glGenTextures(1, mTextureNames, 0); mSurfaceTexture = new SurfaceTexture(mTextureNames[0]); } return mSurfaceTexture; } @Override public int getTextureName() { return mTextureNames[0]; } private void setFrameAvailableListener(SurfaceTexture.OnFrameAvailableListener l) { mSurfaceTexture.setOnFrameAvailableListener(l); } }