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

Commit 96611b93 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Fix Surface HDR meta reset"

parents a236a2c1 8f0a3805
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -1107,8 +1107,11 @@ void Surface::applyGrallocMetadataLocked(
    ATRACE_CALL();
    auto& mapper = GraphicBufferMapper::get();
    mapper.setDataspace(buffer->handle, static_cast<ui::Dataspace>(queueBufferInput.dataSpace));
    if (mHdrMetadataIsSet & HdrMetadata::SMPTE2086)
        mapper.setSmpte2086(buffer->handle, queueBufferInput.getHdrMetadata().getSmpte2086());
    if (mHdrMetadataIsSet & HdrMetadata::CTA861_3)
        mapper.setCta861_3(buffer->handle, queueBufferInput.getHdrMetadata().getCta8613());
    if (mHdrMetadataIsSet & HdrMetadata::HDR10PLUS)
        mapper.setSmpte2094_40(buffer->handle, queueBufferInput.getHdrMetadata().getHdr10Plus());
}

@@ -2250,6 +2253,7 @@ int Surface::setBuffersDataSpace(Dataspace dataSpace)
int Surface::setBuffersSmpte2086Metadata(const android_smpte2086_metadata* metadata) {
    ALOGV("Surface::setBuffersSmpte2086Metadata");
    Mutex::Autolock lock(mMutex);
    mHdrMetadataIsSet |= HdrMetadata::SMPTE2086;
    if (metadata) {
        mHdrMetadata.smpte2086 = *metadata;
        mHdrMetadata.validTypes |= HdrMetadata::SMPTE2086;
@@ -2262,6 +2266,7 @@ int Surface::setBuffersSmpte2086Metadata(const android_smpte2086_metadata* metad
int Surface::setBuffersCta8613Metadata(const android_cta861_3_metadata* metadata) {
    ALOGV("Surface::setBuffersCta8613Metadata");
    Mutex::Autolock lock(mMutex);
    mHdrMetadataIsSet |= HdrMetadata::CTA861_3;
    if (metadata) {
        mHdrMetadata.cta8613 = *metadata;
        mHdrMetadata.validTypes |= HdrMetadata::CTA861_3;
@@ -2274,6 +2279,7 @@ int Surface::setBuffersCta8613Metadata(const android_cta861_3_metadata* metadata
int Surface::setBuffersHdr10PlusMetadata(const size_t size, const uint8_t* metadata) {
    ALOGV("Surface::setBuffersBlobMetadata");
    Mutex::Autolock lock(mMutex);
    mHdrMetadataIsSet |= HdrMetadata::HDR10PLUS;
    if (size > 0) {
        mHdrMetadata.hdr10plus.assign(metadata, metadata + size);
        mHdrMetadata.validTypes |= HdrMetadata::HDR10PLUS;
+5 −0
Original line number Diff line number Diff line
@@ -462,6 +462,11 @@ protected:
    // queue operation.  There is no HDR metadata by default.
    HdrMetadata mHdrMetadata;

    // mHdrMetadataIsSet is a bitfield to track which HDR metadata has been set.
    // Prevent Surface from resetting HDR metadata that was set on a bufer when
    // HDR metadata is not set on this Surface.
    uint32_t mHdrMetadataIsSet{0};

    // mCrop is the crop rectangle that will be used for the next buffer
    // that gets queued. It is set by calling setCrop.
    Rect mCrop;