fix [3312683] Camera mirroring problem after switching from back to front camera
the crop as well as buffer orientation can change at every frame, when that happens we need to reset the hwc HAL (ie: set the GEOMETRY_CHANGED flag). currently we achieve this by taking the same code path than an actual geometry change which is a bit more heavy than necessary. Change-Id: I751f9ed1eeec0c27db7df2e77d5d17c6bcc17a24
This commit is contained in:
parent
a034863a11
commit
ad456f9878
@ -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
|
||||
|
@ -460,7 +460,7 @@ void SurfaceFlinger::handleTransaction(uint32_t transactionFlags)
|
||||
handleTransactionLocked(transactionFlags, ditchedLayers);
|
||||
mLastTransactionTime = systemTime() - now;
|
||||
mDebugInTransaction = 0;
|
||||
mHwWorkListDirty = true;
|
||||
invalidateHwcGeometry();
|
||||
// here the transaction has been committed
|
||||
}
|
||||
|
||||
@ -726,13 +726,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;
|
||||
@ -1586,7 +1591,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);
|
||||
|
@ -208,6 +208,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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user