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

Commit 1702341e authored by wukui1's avatar wukui1 Committed by 奎 吴
Browse files

Use pixel format from buffer to determine opacity.



The format that's passed into BufferQueueLayer creation is meant to
define what format the buffers should have that are dequeued from the
consumer. If the client submits its own buffers, they can have any
pixel format. Therefore, the format from the activeBuffer should be used
when determing opacity since that's the information about the buffer
that will be rendered.

Bug: 152162496
Test: dumpsys SurfaceFlinger
Test: LayerTypeAndRenderTypeTransactionTest#SetBufferFormat
Change-Id: Ifdaa43c28c78ef96a2e8ea4fcbb9886a6227df4d
Merged-In: I4295b837369b8ca8918d8398a29cab133a47cbf7
Signed-off-by: default avatarwukui1 <wukui1@xiaomi.com>
parent 5ce475ad
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -250,7 +250,14 @@ bool BufferLayer::isHdrY410() const {
    // pixel format is HDR Y410 masquerading as RGBA_1010102
    return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ &&
            getDrawingApi() == NATIVE_WINDOW_API_MEDIA &&
            mActiveBuffer->getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102);
            getPixelFormat() == HAL_PIXEL_FORMAT_RGBA_1010102);
}

PixelFormat BufferLayer::getPixelFormat() const {
    if (!mActiveBuffer) {
        return PIXEL_FORMAT_NONE;
    }
    return mActiveBuffer->format;
}

void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& displayDevice,
+2 −1
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ private:
    virtual Region getDrawingSurfaceDamage() const = 0;
    virtual const HdrMetadata& getDrawingHdrMetadata() const = 0;
    virtual int getDrawingApi() const = 0;
    virtual PixelFormat getPixelFormat() const = 0;

    virtual uint64_t getFrameNumber() const = 0;

@@ -191,6 +190,8 @@ private:
    std::shared_ptr<compositionengine::Layer> mCompositionLayer;

    FloatRect computeSourceBounds(const FloatRect& parentBounds) const override;

    PixelFormat getPixelFormat() const;
};

} // namespace android
+0 −6
Original line number Diff line number Diff line
@@ -192,10 +192,6 @@ int BufferQueueLayer::getDrawingApi() const {
    return mConsumer->getCurrentApi();
}

PixelFormat BufferQueueLayer::getPixelFormat() const {
    return mFormat;
}

uint64_t BufferQueueLayer::getFrameNumber() const {
    Mutex::Autolock lock(mQueueItemLock);
    uint64_t frameNumber = mQueueItems[0].mFrameNumber;
@@ -561,8 +557,6 @@ status_t BufferQueueLayer::setDefaultBufferProperties(uint32_t w, uint32_t h, Pi
        return BAD_VALUE;
    }

    mFormat = format;

    setDefaultBufferSize(w, h);
    mConsumer->setDefaultBufferFormat(format);
    mConsumer->setConsumerUsageBits(getEffectiveUsage(0));
+0 −3
Original line number Diff line number Diff line
@@ -75,7 +75,6 @@ private:
    Region getDrawingSurfaceDamage() const override;
    const HdrMetadata& getDrawingHdrMetadata() const override;
    int getDrawingApi() const override;
    PixelFormat getPixelFormat() const override;

    uint64_t getFrameNumber() const override;

@@ -119,8 +118,6 @@ private:
    sp<BufferLayerConsumer> mConsumer;
    sp<IGraphicBufferProducer> mProducer;

    PixelFormat mFormat{PIXEL_FORMAT_NONE};

    // Only accessed on the main thread.
    uint64_t mPreviousFrameNumber{0};
    bool mUpdateTexImageFailed{false};
+0 −7
Original line number Diff line number Diff line
@@ -449,13 +449,6 @@ int BufferStateLayer::getDrawingApi() const {
    return getDrawingState().api;
}

PixelFormat BufferStateLayer::getPixelFormat() const {
    if (!mActiveBuffer) {
        return PIXEL_FORMAT_NONE;
    }
    return mActiveBuffer->format;
}

uint64_t BufferStateLayer::getFrameNumber() const {
    return mFrameNumber;
}
Loading