From 933389f75814bb62e8153528f9cff2cb329b77df Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 18 Jul 2011 16:15:08 -0700 Subject: [PATCH] use SurfaceTexture new scaling mode in SF SF now obeys SurfaceTexture's scaling mode instead of inferring it from the buffer's size Change-Id: I4d50e9851abedd7e64bfcfc8af9eefb9fb668529 --- libs/gui/SurfaceTexture.cpp | 2 +- libs/gui/SurfaceTextureClient.cpp | 2 +- services/surfaceflinger/Layer.cpp | 20 +++++++++---------- services/surfaceflinger/Layer.h | 4 +--- .../surfaceflinger/SurfaceTextureLayer.cpp | 3 --- 5 files changed, 12 insertions(+), 19 deletions(-) diff --git a/libs/gui/SurfaceTexture.cpp b/libs/gui/SurfaceTexture.cpp index cc9f461f8..3ab6c79d7 100644 --- a/libs/gui/SurfaceTexture.cpp +++ b/libs/gui/SurfaceTexture.cpp @@ -545,7 +545,7 @@ status_t SurfaceTexture::disconnect(int api) { } status_t SurfaceTexture::setScalingMode(int mode) { - LOGV("SurfaceTexture::setScalingMode"); + LOGV("SurfaceTexture::setScalingMode(%d)", mode); switch (mode) { case NATIVE_WINDOW_SCALING_MODE_FREEZE: diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index fec80ef93..68475e961 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -466,7 +466,7 @@ int SurfaceTextureClient::setBuffersFormat(int format) int SurfaceTextureClient::setScalingMode(int mode) { - LOGV("SurfaceTextureClient::setScalingMode"); + LOGV("SurfaceTextureClient::setScalingMode(%d)", mode); Mutex::Autolock lock(mMutex); // mode is validated on the server status_t err = mSurfaceTexture->setScalingMode(mode); diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index f3b6c4dd2..c29aecab9 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -56,14 +56,14 @@ Layer::Layer(SurfaceFlinger* flinger, mTextureName(-1U), mQueuedFrames(0), mCurrentTransform(0), + mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), mCurrentOpacity(true), mFormat(PIXEL_FORMAT_NONE), mGLExtensions(GLExtensions::getInstance()), mOpaqueLayer(true), mNeedsDithering(false), mSecure(false), - mProtectedByApp(false), - mFixedSize(false) + mProtectedByApp(false) { mCurrentCrop.makeInvalid(); glGenTextures(1, &mTextureName); @@ -400,14 +400,7 @@ uint32_t Layer::doTransaction(uint32_t flags) } bool Layer::isFixedSize() const { - Mutex::Autolock _l(mLock); - return mFixedSize; -} - -void Layer::setFixedSize(bool fixedSize) -{ - Mutex::Autolock _l(mLock); - mFixedSize = fixedSize; + return mCurrentScalingMode != NATIVE_WINDOW_SCALING_MODE_FREEZE; } bool Layer::isCropped() const { @@ -437,9 +430,14 @@ void Layer::lockPageFlip(bool& recomputeVisibleRegions) const Rect crop(mSurfaceTexture->getCurrentCrop()); const uint32_t transform(mSurfaceTexture->getCurrentTransform()); - if ((crop != mCurrentCrop) || (transform != mCurrentTransform)) { + const uint32_t scalingMode(mSurfaceTexture->getCurrentScalingMode()); + if ((crop != mCurrentCrop) || + (transform != mCurrentTransform) || + (scalingMode != mCurrentScalingMode)) + { mCurrentCrop = crop; mCurrentTransform = transform; + mCurrentScalingMode = scalingMode; mFlinger->invalidateHwcGeometry(); } diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index e3fc13dde..ddfc66683 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -59,7 +59,6 @@ public: status_t setBuffers(uint32_t w, uint32_t h, PixelFormat format, uint32_t flags=0); - // Set this Layer's buffers size bool isFixedSize() const; // LayerBase interface @@ -88,7 +87,6 @@ private: void onFrameQueued(); virtual sp createSurface(); uint32_t getEffectiveUsage(uint32_t usage) const; - void setFixedSize(bool fixedSize); bool isCropped() const; static bool getOpacityForFormat(uint32_t format); @@ -106,6 +104,7 @@ private: GLfloat mTextureMatrix[16]; Rect mCurrentCrop; uint32_t mCurrentTransform; + uint32_t mCurrentScalingMode; bool mCurrentOpacity; // constants @@ -124,7 +123,6 @@ private: // binder thread, transaction thread mutable Mutex mLock; - bool mFixedSize; }; // --------------------------------------------------------------------------- diff --git a/services/surfaceflinger/SurfaceTextureLayer.cpp b/services/surfaceflinger/SurfaceTextureLayer.cpp index 60fa96591..a586d590f 100644 --- a/services/surfaceflinger/SurfaceTextureLayer.cpp +++ b/services/surfaceflinger/SurfaceTextureLayer.cpp @@ -64,9 +64,6 @@ status_t SurfaceTextureLayer::dequeueBuffer(int *buf, //LOGD("%s, w=%u, h=%u, format=%u, usage=%08x, effectiveUsage=%08x", // __PRETTY_FUNCTION__, w, h, format, usage, effectiveUsage); res = SurfaceTexture::dequeueBuffer(buf, w, h, format, effectiveUsage); - if (res == NO_ERROR) { - layer->setFixedSize(w && h); - } } return res; }