From 88801b270f693ffd4125534724f204135f592f72 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Fri, 5 Oct 2012 14:58:33 -0700 Subject: [PATCH] Update TextureView's layer on size change Bug #7171323 Change-Id: I24bedd7775ebf585ffcbd43b661e9c961f380c29 --- core/java/android/view/TextureView.java | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java index 876b7d8479199..a9b6e097daf46 100644 --- a/core/java/android/view/TextureView.java +++ b/core/java/android/view/TextureView.java @@ -189,7 +189,7 @@ public class TextureView extends View { if (opaque != mOpaque) { mOpaque = opaque; if (mLayer != null) { - updateLayer(); + updateLayerAndInvalidate(); } } } @@ -310,6 +310,7 @@ public class TextureView extends View { super.onSizeChanged(w, h, oldw, oldh); if (mSurface != null) { nSetDefaultBufferSize(mSurface, getWidth(), getHeight()); + updateLayer(); if (mListener != null) { mListener.onSurfaceTextureSizeChanged(mSurface, getWidth(), getHeight()); } @@ -352,9 +353,7 @@ public class TextureView extends View { public void onFrameAvailable(SurfaceTexture surfaceTexture) { // Per SurfaceTexture's documentation, the callback may be invoked // from an arbitrary thread - synchronized (mLock) { - mUpdateLayer = true; - } + updateLayer(); if (Looper.myLooper() == Looper.getMainLooper()) { invalidate(); @@ -379,9 +378,7 @@ public class TextureView extends View { // Since we are updating the layer, force an update to ensure its // parameters are correct (width, height, transform, etc.) - synchronized (mLock) { - mUpdateLayer = true; - } + updateLayer(); mMatrixChanged = true; mAttachInfo.mHardwareRenderer.setSurfaceTexture(mLayer, mSurface); @@ -404,7 +401,7 @@ public class TextureView extends View { // updates listener if (visibility == VISIBLE) { mSurface.setOnFrameAvailableListener(mUpdateListener); - updateLayer(); + updateLayerAndInvalidate(); } else { mSurface.setOnFrameAvailableListener(null); } @@ -412,7 +409,15 @@ public class TextureView extends View { } private void updateLayer() { - mUpdateLayer = true; + synchronized (mLock) { + mUpdateLayer = true; + } + } + + private void updateLayerAndInvalidate() { + synchronized (mLock) { + mUpdateLayer = true; + } invalidate(); }