Loading include/android/surface_control.h +11 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,17 @@ void ASurfaceTransaction_setBuffer(ASurfaceTransaction* transaction, ASurfaceControl* surface_control, AHardwareBuffer* buffer, int acquire_fence_fd = -1) __INTRODUCED_IN(29); /** * Updates the color for |surface_control|. This will make the background color for the * ASurfaceControl visible in transparent regions of the surface. Colors |r|, |g|, * and |b| must be within the range that is valid for |dataspace|. |dataspace| and |alpha| * will be the dataspace and alpha set for the background color layer. */ void ASurfaceTransaction_setColor(ASurfaceTransaction* transaction, ASurfaceControl* surface_control, float r, float g, float b, float alpha, ADataSpace dataspace) __INTRODUCED_IN(29); /** * |source| the sub-rect within the buffer's content to be rendered inside the surface's area * The surface's source rect is clipped by the bounds of its current buffer. The source rect's width Loading libs/gui/LayerState.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,9 @@ status_t layer_state_t::write(Parcel& output) const output.writeStrongBinder(cachedBuffer.token); output.writeInt32(cachedBuffer.bufferId); output.writeFloat(colorAlpha); output.writeUint32(static_cast<uint32_t>(colorDataspace)); return NO_ERROR; } Loading Loading @@ -170,6 +173,9 @@ status_t layer_state_t::read(const Parcel& input) cachedBuffer.token = input.readStrongBinder(); cachedBuffer.bufferId = input.readInt32(); colorAlpha = input.readFloat(); colorDataspace = static_cast<ui::Dataspace>(input.readUint32()); return NO_ERROR; } Loading Loading @@ -382,6 +388,14 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eCachedBufferChanged; cachedBuffer = other.cachedBuffer; } if (other.what & eColorAlphaChanged) { what |= eColorAlphaChanged; colorAlpha = other.colorAlpha; } if (other.what & eColorDataspaceChanged) { what |= eColorDataspaceChanged; colorDataspace = other.colorDataspace; } 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 +30 −0 Original line number Diff line number Diff line Loading @@ -643,6 +643,36 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColor return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColorAlpha( const sp<SurfaceControl>& sc, float alpha) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eColorAlphaChanged; s->colorAlpha = alpha; registerSurfaceControlForCallback(sc); return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColorDataspace( const sp<SurfaceControl>& sc, ui::Dataspace dataspace) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eColorDataspaceChanged; s->colorDataspace = dataspace; registerSurfaceControlForCallback(sc); return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setTransform( const sp<SurfaceControl>& sc, uint32_t transform) { layer_state_t* s = getLayerState(sc); Loading libs/gui/include/gui/LayerState.h +8 −1 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ struct layer_state_t { eCornerRadiusChanged = 0x80000000, eFrameChanged = 0x1'00000000, eCachedBufferChanged = 0x2'00000000, eColorAlphaChanged = 0x3'00000000, eColorDataspaceChanged = 0x4'00000000, }; layer_state_t() Loading @@ -110,7 +112,9 @@ struct layer_state_t { dataspace(ui::Dataspace::UNKNOWN), surfaceDamageRegion(), api(-1), colorTransform(mat4()) { colorTransform(mat4()), colorAlpha(0), colorDataspace(ui::Dataspace::UNKNOWN) { matrix.dsdx = matrix.dtdy = 1.0f; matrix.dsdy = matrix.dtdx = 0.0f; hdrMetadata.validTypes = 0; Loading Loading @@ -180,6 +184,9 @@ struct layer_state_t { #endif cached_buffer_t cachedBuffer; float colorAlpha; ui::Dataspace colorDataspace; }; struct ComposerState { Loading libs/gui/include/gui/SurfaceComposerClient.h +6 −0 Original line number Diff line number Diff line Loading @@ -324,6 +324,12 @@ public: Transaction& setColor(const sp<SurfaceControl>& sc, const half3& color); // Sets the alpha of the background color layer if it exists. Transaction& setColorAlpha(const sp<SurfaceControl>& sc, float alpha); // Sets the dataspace of the background color layer if it exists. Transaction& setColorDataspace(const sp<SurfaceControl>& sc, ui::Dataspace dataspace); Transaction& setTransform(const sp<SurfaceControl>& sc, uint32_t transform); Transaction& setTransformToDisplayInverse(const sp<SurfaceControl>& sc, bool transformToDisplayInverse); Loading Loading
include/android/surface_control.h +11 −0 Original line number Diff line number Diff line Loading @@ -240,6 +240,17 @@ void ASurfaceTransaction_setBuffer(ASurfaceTransaction* transaction, ASurfaceControl* surface_control, AHardwareBuffer* buffer, int acquire_fence_fd = -1) __INTRODUCED_IN(29); /** * Updates the color for |surface_control|. This will make the background color for the * ASurfaceControl visible in transparent regions of the surface. Colors |r|, |g|, * and |b| must be within the range that is valid for |dataspace|. |dataspace| and |alpha| * will be the dataspace and alpha set for the background color layer. */ void ASurfaceTransaction_setColor(ASurfaceTransaction* transaction, ASurfaceControl* surface_control, float r, float g, float b, float alpha, ADataSpace dataspace) __INTRODUCED_IN(29); /** * |source| the sub-rect within the buffer's content to be rendered inside the surface's area * The surface's source rect is clipped by the bounds of its current buffer. The source rect's width Loading
libs/gui/LayerState.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,9 @@ status_t layer_state_t::write(Parcel& output) const output.writeStrongBinder(cachedBuffer.token); output.writeInt32(cachedBuffer.bufferId); output.writeFloat(colorAlpha); output.writeUint32(static_cast<uint32_t>(colorDataspace)); return NO_ERROR; } Loading Loading @@ -170,6 +173,9 @@ status_t layer_state_t::read(const Parcel& input) cachedBuffer.token = input.readStrongBinder(); cachedBuffer.bufferId = input.readInt32(); colorAlpha = input.readFloat(); colorDataspace = static_cast<ui::Dataspace>(input.readUint32()); return NO_ERROR; } Loading Loading @@ -382,6 +388,14 @@ void layer_state_t::merge(const layer_state_t& other) { what |= eCachedBufferChanged; cachedBuffer = other.cachedBuffer; } if (other.what & eColorAlphaChanged) { what |= eColorAlphaChanged; colorAlpha = other.colorAlpha; } if (other.what & eColorDataspaceChanged) { what |= eColorDataspaceChanged; colorDataspace = other.colorDataspace; } 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 +30 −0 Original line number Diff line number Diff line Loading @@ -643,6 +643,36 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColor return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColorAlpha( const sp<SurfaceControl>& sc, float alpha) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eColorAlphaChanged; s->colorAlpha = alpha; registerSurfaceControlForCallback(sc); return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setColorDataspace( const sp<SurfaceControl>& sc, ui::Dataspace dataspace) { layer_state_t* s = getLayerState(sc); if (!s) { mStatus = BAD_INDEX; return *this; } s->what |= layer_state_t::eColorDataspaceChanged; s->colorDataspace = dataspace; registerSurfaceControlForCallback(sc); return *this; } SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setTransform( const sp<SurfaceControl>& sc, uint32_t transform) { layer_state_t* s = getLayerState(sc); Loading
libs/gui/include/gui/LayerState.h +8 −1 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ struct layer_state_t { eCornerRadiusChanged = 0x80000000, eFrameChanged = 0x1'00000000, eCachedBufferChanged = 0x2'00000000, eColorAlphaChanged = 0x3'00000000, eColorDataspaceChanged = 0x4'00000000, }; layer_state_t() Loading @@ -110,7 +112,9 @@ struct layer_state_t { dataspace(ui::Dataspace::UNKNOWN), surfaceDamageRegion(), api(-1), colorTransform(mat4()) { colorTransform(mat4()), colorAlpha(0), colorDataspace(ui::Dataspace::UNKNOWN) { matrix.dsdx = matrix.dtdy = 1.0f; matrix.dsdy = matrix.dtdx = 0.0f; hdrMetadata.validTypes = 0; Loading Loading @@ -180,6 +184,9 @@ struct layer_state_t { #endif cached_buffer_t cachedBuffer; float colorAlpha; ui::Dataspace colorDataspace; }; struct ComposerState { Loading
libs/gui/include/gui/SurfaceComposerClient.h +6 −0 Original line number Diff line number Diff line Loading @@ -324,6 +324,12 @@ public: Transaction& setColor(const sp<SurfaceControl>& sc, const half3& color); // Sets the alpha of the background color layer if it exists. Transaction& setColorAlpha(const sp<SurfaceControl>& sc, float alpha); // Sets the dataspace of the background color layer if it exists. Transaction& setColorDataspace(const sp<SurfaceControl>& sc, ui::Dataspace dataspace); Transaction& setTransform(const sp<SurfaceControl>& sc, uint32_t transform); Transaction& setTransformToDisplayInverse(const sp<SurfaceControl>& sc, bool transformToDisplayInverse); Loading