Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b9c8878 authored by Valerie Hau's avatar Valerie Hau Committed by Android (Google) Code Review
Browse files

Merge "Add Color Layer to ASurfaceControl"

parents 3c252c2c ed54efa6
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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;
}

@@ -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;
}

@@ -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,
+30 −0
Original line number Diff line number Diff line
@@ -664,6 +664,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);
+8 −1
Original line number Diff line number Diff line
@@ -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()
@@ -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;
@@ -180,6 +184,9 @@ struct layer_state_t {
#endif

    cached_buffer_t cachedBuffer;

    float colorAlpha;
    ui::Dataspace colorDataspace;
};

struct ComposerState {
+6 −0
Original line number Diff line number Diff line
@@ -326,6 +326,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