diff options
author | Mathias Agopian <mathias@google.com> | 2011-01-14 10:54:47 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-14 10:54:47 -0800 |
commit | 010719c2fff4ab40757984f29d7755ff7f79e3de (patch) | |
tree | 678676360e0babeeb897e5db890b48098f60d8cd /services | |
parent | 05db1af9bb42b4b2e668aba2dfcd61878a235764 (diff) | |
parent | fb4dcb1a679000c029bb8e76fea7066d002235d5 (diff) | |
download | frameworks_base-010719c2fff4ab40757984f29d7755ff7f79e3de.zip frameworks_base-010719c2fff4ab40757984f29d7755ff7f79e3de.tar.gz frameworks_base-010719c2fff4ab40757984f29d7755ff7f79e3de.tar.bz2 |
Merge "fix [3312683] Camera mirroring problem after switching from back to front camera" into honeycomb
Diffstat (limited to 'services')
-rw-r--r-- | services/surfaceflinger/LayerBase.cpp | 10 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 11 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.h | 1 |
3 files changed, 17 insertions, 5 deletions
diff --git a/services/surfaceflinger/LayerBase.cpp b/services/surfaceflinger/LayerBase.cpp index 8a021cb..0c1fcf9 100644 --- a/services/surfaceflinger/LayerBase.cpp +++ b/services/surfaceflinger/LayerBase.cpp @@ -503,12 +503,18 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const void LayerBase::setBufferCrop(const Rect& crop) { if (!crop.isEmpty()) { - mBufferCrop = crop; + if (mBufferCrop != crop) { + mBufferCrop = crop; + mFlinger->invalidateHwcGeometry(); + } } } void LayerBase::setBufferTransform(uint32_t transform) { - mBufferTransform = transform; + if (mBufferTransform != transform) { + mBufferTransform = transform; + mFlinger->invalidateHwcGeometry(); + } } void LayerBase::dump(String8& result, char* buffer, size_t SIZE) const diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 967ff1a..77695d7 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -465,7 +465,7 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags) handleTransactionLocked(transactionFlags, ditchedLayers); mLastTransactionTime = systemTime() - now; mDebugInTransaction = 0; - mHwWorkListDirty = true; + invalidateHwcGeometry(); // here the transaction has been committed } @@ -731,13 +731,18 @@ void SurfaceFlinger::handlePageFlip() mWormholeRegion = screenRegion.subtract(opaqueRegion); mVisibleRegionsDirty = false; - mHwWorkListDirty = true; + invalidateHwcGeometry(); } unlockPageFlip(currentLayers); mDirtyRegion.andSelf(screenRegion); } +void SurfaceFlinger::invalidateHwcGeometry() +{ + mHwWorkListDirty = true; +} + bool SurfaceFlinger::lockPageFlip(const LayerVector& currentLayers) { bool recomputeVisibleRegions = false; @@ -1591,7 +1596,7 @@ status_t SurfaceFlinger::onTransact( case 1008: // toggle use of hw composer n = data.readInt32(); mDebugDisableHWC = n ? 1 : 0; - mHwWorkListDirty = true; + invalidateHwcGeometry(); // fall-through... case 1004:{ // repaint everything Mutex::Autolock _l(mStateLock); diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h index 2f2977a..2591123 100644 --- a/services/surfaceflinger/SurfaceFlinger.h +++ b/services/surfaceflinger/SurfaceFlinger.h @@ -225,6 +225,7 @@ public: status_t removeLayer(const sp<LayerBase>& layer); status_t addLayer(const sp<LayerBase>& layer); status_t invalidateLayerVisibility(const sp<LayerBase>& layer); + void invalidateHwcGeometry(); sp<Layer> getLayer(const sp<ISurface>& sur) const; |