Loading libs/gui/LayerState.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ status_t layer_state_t::write(Parcel& output) const SAFE_PARCEL(output.write, transparentRegion); SAFE_PARCEL(output.writeUint32, transform); SAFE_PARCEL(output.writeBool, transformToDisplayInverse); SAFE_PARCEL(output.write, crop); SAFE_PARCEL(output.write, orientedDisplaySpaceRect); if (buffer) { Loading Loading @@ -167,6 +166,7 @@ status_t layer_state_t::write(Parcel& output) const } SAFE_PARCEL(output.write, stretchEffect); SAFE_PARCEL(output.write, bufferCrop); return NO_ERROR; } Loading Loading @@ -209,7 +209,6 @@ status_t layer_state_t::read(const Parcel& input) SAFE_PARCEL(input.read, transparentRegion); SAFE_PARCEL(input.readUint32, &transform); SAFE_PARCEL(input.readBool, &transformToDisplayInverse); SAFE_PARCEL(input.read, crop); SAFE_PARCEL(input.read, orientedDisplaySpaceRect); bool tmpBool = false; Loading Loading @@ -296,6 +295,7 @@ status_t layer_state_t::read(const Parcel& input) } SAFE_PARCEL(input.read, stretchEffect); SAFE_PARCEL(input.read, bufferCrop); return NO_ERROR; } Loading Loading @@ -539,6 +539,10 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eStretchChanged; stretchEffect = other.stretchEffect; } if (other.what & eBufferCropChanged) { what |= eBufferCropChanged; bufferCrop = other.bufferCrop; } if ((other.what & what) != other.what) { ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? " "other.what=0x%" PRIu64 " what=0x%" PRIu64, Loading libs/gui/SurfaceComposerClient.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -1664,6 +1664,21 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setStret return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBufferCrop( const sp<SurfaceControl>& sc, const Rect& bufferCrop) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eBufferCropChanged; s->bufferCrop = bufferCrop; registerSurfaceControlForCallback(sc); return *this; } // --------------------------------------------------------------------------- DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) { Loading libs/gui/include/gui/LayerState.h +3 −1 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ struct layer_state_t { eReleaseBufferListenerChanged = 0x00000400, eShadowRadiusChanged = 0x00000800, eLayerCreated = 0x00001000, /* was eDetachChildren, now available 0x00002000, */ eBufferCropChanged = 0x00002000, eRelativeLayerChanged = 0x00004000, eReparent = 0x00008000, eColorChanged = 0x00010000, Loading Loading @@ -227,6 +227,8 @@ struct layer_state_t { // Stretch effect to be applied to this layer StretchEffect stretchEffect; Rect bufferCrop; // Listens to when the buffer is safe to be released. This is used for blast // layers only. The callback includes a release fence as well as the graphic // buffer id to identify the buffer. Loading libs/gui/include/gui/SurfaceComposerClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,8 @@ public: float right, float bottom, float vecX, float vecY, float maxAmount); Transaction& setBufferCrop(const sp<SurfaceControl>& sc, const Rect& bufferCrop); status_t setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); Loading services/surfaceflinger/BufferStateLayer.cpp +18 −2 Original line number Diff line number Diff line Loading @@ -284,6 +284,17 @@ bool BufferStateLayer::setCrop(const Rect& crop) { return true; } bool BufferStateLayer::setBufferCrop(const Rect& bufferCrop) { if (mCurrentState.bufferCrop == bufferCrop) return false; mCurrentState.sequence++; mCurrentState.bufferCrop = bufferCrop; mCurrentState.modified = true; setTransactionFlags(eTransactionNeeded); return true; } bool BufferStateLayer::setMatrix(const layer_state_t::matrix22_t& matrix, bool allowNonRectPreservingTransforms) { if (mCurrentState.transform.dsdx() == matrix.dsdx && Loading Loading @@ -809,10 +820,15 @@ uint32_t BufferStateLayer::getEffectiveScalingMode() const { } Rect BufferStateLayer::computeBufferCrop(const State& s) { if (s.buffer) { if (s.buffer && !s.bufferCrop.isEmpty()) { Rect bufferCrop; s.buffer->getBuffer()->getBounds().intersect(s.bufferCrop, &bufferCrop); return bufferCrop; } else if (s.buffer) { return s.buffer->getBuffer()->getBounds(); } else { return s.bufferCrop; } return Rect::INVALID_RECT; } sp<Layer> BufferStateLayer::createClone() { Loading Loading
libs/gui/LayerState.cpp +6 −2 Original line number Diff line number Diff line Loading @@ -98,7 +98,6 @@ status_t layer_state_t::write(Parcel& output) const SAFE_PARCEL(output.write, transparentRegion); SAFE_PARCEL(output.writeUint32, transform); SAFE_PARCEL(output.writeBool, transformToDisplayInverse); SAFE_PARCEL(output.write, crop); SAFE_PARCEL(output.write, orientedDisplaySpaceRect); if (buffer) { Loading Loading @@ -167,6 +166,7 @@ status_t layer_state_t::write(Parcel& output) const } SAFE_PARCEL(output.write, stretchEffect); SAFE_PARCEL(output.write, bufferCrop); return NO_ERROR; } Loading Loading @@ -209,7 +209,6 @@ status_t layer_state_t::read(const Parcel& input) SAFE_PARCEL(input.read, transparentRegion); SAFE_PARCEL(input.readUint32, &transform); SAFE_PARCEL(input.readBool, &transformToDisplayInverse); SAFE_PARCEL(input.read, crop); SAFE_PARCEL(input.read, orientedDisplaySpaceRect); bool tmpBool = false; Loading Loading @@ -296,6 +295,7 @@ status_t layer_state_t::read(const Parcel& input) } SAFE_PARCEL(input.read, stretchEffect); SAFE_PARCEL(input.read, bufferCrop); return NO_ERROR; } Loading Loading @@ -539,6 +539,10 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eStretchChanged; stretchEffect = other.stretchEffect; } if (other.what & eBufferCropChanged) { what |= eBufferCropChanged; bufferCrop = other.bufferCrop; } if ((other.what & what) != other.what) { ALOGE("Unmerged SurfaceComposer Transaction properties. LayerState::merge needs updating? " "other.what=0x%" PRIu64 " what=0x%" PRIu64, Loading
libs/gui/SurfaceComposerClient.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -1664,6 +1664,21 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setStret return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBufferCrop( const sp<SurfaceControl>& sc, const Rect& bufferCrop) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eBufferCropChanged; s->bufferCrop = bufferCrop; registerSurfaceControlForCallback(sc); return *this; } // --------------------------------------------------------------------------- DisplayState& SurfaceComposerClient::Transaction::getDisplayState(const sp<IBinder>& token) { Loading
libs/gui/include/gui/LayerState.h +3 −1 Original line number Diff line number Diff line Loading @@ -85,7 +85,7 @@ struct layer_state_t { eReleaseBufferListenerChanged = 0x00000400, eShadowRadiusChanged = 0x00000800, eLayerCreated = 0x00001000, /* was eDetachChildren, now available 0x00002000, */ eBufferCropChanged = 0x00002000, eRelativeLayerChanged = 0x00004000, eReparent = 0x00008000, eColorChanged = 0x00010000, Loading Loading @@ -227,6 +227,8 @@ struct layer_state_t { // Stretch effect to be applied to this layer StretchEffect stretchEffect; Rect bufferCrop; // Listens to when the buffer is safe to be released. This is used for blast // layers only. The callback includes a release fence as well as the graphic // buffer id to identify the buffer. Loading
libs/gui/include/gui/SurfaceComposerClient.h +2 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,8 @@ public: float right, float bottom, float vecX, float vecY, float maxAmount); Transaction& setBufferCrop(const sp<SurfaceControl>& sc, const Rect& bufferCrop); status_t setDisplaySurface(const sp<IBinder>& token, const sp<IGraphicBufferProducer>& bufferProducer); Loading
services/surfaceflinger/BufferStateLayer.cpp +18 −2 Original line number Diff line number Diff line Loading @@ -284,6 +284,17 @@ bool BufferStateLayer::setCrop(const Rect& crop) { return true; } bool BufferStateLayer::setBufferCrop(const Rect& bufferCrop) { if (mCurrentState.bufferCrop == bufferCrop) return false; mCurrentState.sequence++; mCurrentState.bufferCrop = bufferCrop; mCurrentState.modified = true; setTransactionFlags(eTransactionNeeded); return true; } bool BufferStateLayer::setMatrix(const layer_state_t::matrix22_t& matrix, bool allowNonRectPreservingTransforms) { if (mCurrentState.transform.dsdx() == matrix.dsdx && Loading Loading @@ -809,10 +820,15 @@ uint32_t BufferStateLayer::getEffectiveScalingMode() const { } Rect BufferStateLayer::computeBufferCrop(const State& s) { if (s.buffer) { if (s.buffer && !s.bufferCrop.isEmpty()) { Rect bufferCrop; s.buffer->getBuffer()->getBounds().intersect(s.bufferCrop, &bufferCrop); return bufferCrop; } else if (s.buffer) { return s.buffer->getBuffer()->getBounds(); } else { return s.bufferCrop; } return Rect::INVALID_RECT; } sp<Layer> BufferStateLayer::createClone() { Loading