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

Commit 88428cd0 authored by Peiyong Lin's avatar Peiyong Lin Committed by Android (Google) Code Review
Browse files

Merge "[SurfaceFlinger] Extend HDR support." into pi-dev

parents 5a5e992e 62665897
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -33,7 +33,7 @@ size_t HdrCapabilities::getFlattenedSize() const {
            sizeof(mMaxAverageLuminance) +
            sizeof(mMaxAverageLuminance) +
            sizeof(mMinLuminance) +
            sizeof(mMinLuminance) +
            sizeof(int32_t) +
            sizeof(int32_t) +
            mSupportedHdrTypes.size() * sizeof(int32_t);
            mSupportedHdrTypes.size() * sizeof(ui::Hdr);
}
}


status_t HdrCapabilities::flatten(void* buffer, size_t size) const {
status_t HdrCapabilities::flatten(void* buffer, size_t size) const {
@@ -48,7 +48,7 @@ status_t HdrCapabilities::flatten(void* buffer, size_t size) const {
    reinterpret_cast<float&>(buf[2]) = mMinLuminance;
    reinterpret_cast<float&>(buf[2]) = mMinLuminance;
    buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size());
    buf[3] = static_cast<int32_t>(mSupportedHdrTypes.size());
    for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) {
    for (size_t i = 0, c = mSupportedHdrTypes.size(); i < c; ++i) {
        buf[4 + i] = mSupportedHdrTypes[i];
        buf[4 + i] = static_cast<int32_t>(mSupportedHdrTypes[i]);
    }
    }
    return NO_ERROR;
    return NO_ERROR;
}
}
@@ -78,7 +78,7 @@ status_t HdrCapabilities::unflatten(void const* buffer, size_t size) {
    if (itemCount) {
    if (itemCount) {
        mSupportedHdrTypes.resize(itemCount);
        mSupportedHdrTypes.resize(itemCount);
        for (size_t i = 0; i < itemCount; ++i) {
        for (size_t i = 0; i < itemCount; ++i) {
            mSupportedHdrTypes[i] = buf[4 + i];
            mSupportedHdrTypes[i] = static_cast<ui::Hdr>(buf[4 + i]);
        }
        }
    }
    }
    return NO_ERROR;
    return NO_ERROR;
+1 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@
namespace android {
namespace android {
namespace ui {
namespace ui {


using android::hardware::graphics::common::V1_0::Hdr;
using android::hardware::graphics::common::V1_1::ColorMode;
using android::hardware::graphics::common::V1_1::ColorMode;
using android::hardware::graphics::common::V1_1::Dataspace;
using android::hardware::graphics::common::V1_1::Dataspace;
using android::hardware::graphics::common::V1_1::PixelFormat;
using android::hardware::graphics::common::V1_1::PixelFormat;
+4 −3
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@


#include <vector>
#include <vector>


#include <ui/GraphicTypes.h>
#include <utils/Flattenable.h>
#include <utils/Flattenable.h>


namespace android {
namespace android {
@@ -28,7 +29,7 @@ namespace android {
class HdrCapabilities : public LightFlattenable<HdrCapabilities>
class HdrCapabilities : public LightFlattenable<HdrCapabilities>
{
{
public:
public:
    HdrCapabilities(const std::vector<int32_t /*android_hdr_t*/>& types,
    HdrCapabilities(const std::vector<ui::Hdr>& types,
            float maxLuminance, float maxAverageLuminance, float minLuminance)
            float maxLuminance, float maxAverageLuminance, float minLuminance)
      : mSupportedHdrTypes(types),
      : mSupportedHdrTypes(types),
        mMaxLuminance(maxLuminance),
        mMaxLuminance(maxLuminance),
@@ -47,7 +48,7 @@ public:


    ~HdrCapabilities();
    ~HdrCapabilities();


    const std::vector<int32_t /*android_hdr_t*/>& getSupportedHdrTypes() const {
    const std::vector<ui::Hdr>& getSupportedHdrTypes() const {
        return mSupportedHdrTypes;
        return mSupportedHdrTypes;
    }
    }
    float getDesiredMaxLuminance() const { return mMaxLuminance; }
    float getDesiredMaxLuminance() const { return mMaxLuminance; }
@@ -61,7 +62,7 @@ public:
    status_t unflatten(void const* buffer, size_t size);
    status_t unflatten(void const* buffer, size_t size);


private:
private:
    std::vector<int32_t /*android_hdr_t*/> mSupportedHdrTypes;
    std::vector<ui::Hdr> mSupportedHdrTypes;
    float mMaxLuminance;
    float mMaxLuminance;
    float mMaxAverageLuminance;
    float mMaxAverageLuminance;
    float mMinLuminance;
    float mMinLuminance;
+20 −2
Original line number Original line Diff line number Diff line
@@ -55,6 +55,7 @@ namespace android {
using namespace android::hardware::configstore;
using namespace android::hardware::configstore;
using namespace android::hardware::configstore::V1_0;
using namespace android::hardware::configstore::V1_0;
using android::ui::ColorMode;
using android::ui::ColorMode;
using android::ui::Hdr;
using android::ui::RenderIntent;
using android::ui::RenderIntent;


/*
/*
@@ -77,7 +78,7 @@ DisplayDevice::DisplayDevice(
        int displayWidth,
        int displayWidth,
        int displayHeight,
        int displayHeight,
        bool hasWideColorGamut,
        bool hasWideColorGamut,
        bool hasHdr10,
        const HdrCapabilities& hdrCapabilities,
        int initialPowerMode)
        int initialPowerMode)
    : lastCompositionHadVisibleLayers(false),
    : lastCompositionHadVisibleLayers(false),
      mFlinger(flinger),
      mFlinger(flinger),
@@ -100,9 +101,26 @@ DisplayDevice::DisplayDevice(
      mActiveColorMode(ColorMode::NATIVE),
      mActiveColorMode(ColorMode::NATIVE),
      mColorTransform(HAL_COLOR_TRANSFORM_IDENTITY),
      mColorTransform(HAL_COLOR_TRANSFORM_IDENTITY),
      mHasWideColorGamut(hasWideColorGamut),
      mHasWideColorGamut(hasWideColorGamut),
      mHasHdr10(hasHdr10)
      mHasHdr10(false),
      mHasHLG(false),
      mHasDolbyVision(false)
{
{
    // clang-format on
    // clang-format on
    for (Hdr hdrType : hdrCapabilities.getSupportedHdrTypes()) {
        switch (hdrType) {
            case Hdr::HDR10:
                mHasHdr10 = true;
                break;
            case Hdr::HLG:
                mHasHLG = true;
                break;
            case Hdr::DOLBY_VISION:
                mHasDolbyVision = true;
                break;
            default:
                ALOGE("UNKNOWN HDR capability: %d", static_cast<int32_t>(hdrType));
        }
    }


    // initialize the display orientation transform.
    // initialize the display orientation transform.
    setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
    setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
+6 −2
Original line number Original line Diff line number Diff line
@@ -85,7 +85,7 @@ public:
            int displayWidth,
            int displayWidth,
            int displayHeight,
            int displayHeight,
            bool hasWideColorGamut,
            bool hasWideColorGamut,
            bool hasHdr10,
            const HdrCapabilities& hdrCapabilities,
            int initialPowerMode);
            int initialPowerMode);
    // clang-format on
    // clang-format on


@@ -136,7 +136,9 @@ public:
    status_t beginFrame(bool mustRecompose) const;
    status_t beginFrame(bool mustRecompose) const;
    status_t prepareFrame(HWComposer& hwc);
    status_t prepareFrame(HWComposer& hwc);
    bool hasWideColorGamut() const { return mHasWideColorGamut; }
    bool hasWideColorGamut() const { return mHasWideColorGamut; }
    bool hasHdr10() const { return mHasHdr10; }
    bool hasHDR10Support() const { return mHasHdr10; }
    bool hasHLGSupport() const { return mHasHLG; }
    bool hasDolbyVisionSupport() const { return mHasDolbyVision; }


    void swapBuffers(HWComposer& hwc) const;
    void swapBuffers(HWComposer& hwc) const;


@@ -255,6 +257,8 @@ private:
    // Fed to RenderEngine during composition.
    // Fed to RenderEngine during composition.
    bool mHasWideColorGamut;
    bool mHasWideColorGamut;
    bool mHasHdr10;
    bool mHasHdr10;
    bool mHasHLG;
    bool mHasDolbyVision;
};
};


struct DisplayDeviceState {
struct DisplayDeviceState {
Loading