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

Commit 8766fc4e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use max mastering luminance and max content luminance from HdrMetadata."

parents 046a7e29 1a70eca9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -983,6 +983,8 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,

    Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2, 2);
    for (auto layer : layers) {
        mState.maxMasteringLuminance = layer.source.buffer.maxMasteringLuminance;
        mState.maxContentLuminance = layer.source.buffer.maxContentLuminance;
        mState.projectionMatrix = projectionMatrix * layer.geometry.positionTransform;

        const FloatRect bounds = layer.geometry.boundaries;
@@ -998,7 +1000,6 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,
        bool usePremultipliedAlpha = true;
        bool disableTexture = true;
        bool isOpaque = false;

        if (layer.source.buffer.buffer != nullptr) {
            disableTexture = false;
            isOpaque = layer.source.buffer.isOpaque;
+8 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ Program::Program(const ProgramCache::Key& /*needs*/, const char* vertex, const c
        mSamplerLoc = glGetUniformLocation(programId, "sampler");
        mColorLoc = glGetUniformLocation(programId, "color");
        mDisplayMaxLuminanceLoc = glGetUniformLocation(programId, "displayMaxLuminance");
        mMaxMasteringLuminanceLoc = glGetUniformLocation(programId, "maxMasteringLuminance");
        mMaxContentLuminanceLoc = glGetUniformLocation(programId, "maxContentLuminance");
        mInputTransformMatrixLoc = glGetUniformLocation(programId, "inputTransformMatrix");
        mOutputTransformMatrixLoc = glGetUniformLocation(programId, "outputTransformMatrix");
        mCornerRadiusLoc = glGetUniformLocation(programId, "cornerRadius");
@@ -138,6 +140,12 @@ void Program::setUniforms(const Description& desc) {
    if (mDisplayMaxLuminanceLoc >= 0) {
        glUniform1f(mDisplayMaxLuminanceLoc, desc.displayMaxLuminance);
    }
    if (mMaxMasteringLuminanceLoc >= 0) {
        glUniform1f(mMaxMasteringLuminanceLoc, desc.maxMasteringLuminance);
    }
    if (mMaxContentLuminanceLoc >= 0) {
        glUniform1f(mMaxContentLuminanceLoc, desc.maxContentLuminance);
    }
    if (mCornerRadiusLoc >= 0) {
        glUniform1f(mCornerRadiusLoc, desc.cornerRadius);
    }
+4 −0
Original line number Diff line number Diff line
@@ -90,6 +90,10 @@ private:

    /* location of display luminance uniform */
    GLint mDisplayMaxLuminanceLoc;
    /* location of max mastering luminance uniform */
    GLint mMaxMasteringLuminanceLoc;
    /* location of max content luminance uniform */
    GLint mMaxContentLuminanceLoc;

    /* location of transform matrix */
    GLint mInputTransformMatrixLoc;
+5 −4
Original line number Diff line number Diff line
@@ -339,9 +339,9 @@ void ProgramCache::generateToneMappingProcess(Formatter& fs, const Key& needs) {
                default:
                    fs << R"__SHADER__(
                        highp vec3 ToneMap(highp vec3 color) {
                            const float maxMasteringLumi = 1000.0;
                            const float maxContentLumi = 1000.0;
                            const float maxInLumi = min(maxMasteringLumi, maxContentLumi);
                            float maxMasteringLumi = maxMasteringLuminance;
                            float maxContentLumi = maxContentLuminance;
                            float maxInLumi = min(maxMasteringLumi, maxContentLumi);
                            float maxOutLumi = displayMaxLuminance;

                            float nits = color.y;
@@ -633,9 +633,10 @@ String8 ProgramCache::generateFragmentShader(const Key& needs) {
    }

    if (needs.hasTransformMatrix() || (needs.getInputTF() != needs.getOutputTF())) {
        // Currently, display maximum luminance is needed when doing tone mapping.
        if (needs.needsToneMapping()) {
            fs << "uniform float displayMaxLuminance;";
            fs << "uniform float maxMasteringLuminance;";
            fs << "uniform float maxContentLuminance;";
        }

        if (needs.hasInputTransformMatrix()) {
+2 −0
Original line number Diff line number Diff line
@@ -60,6 +60,8 @@ struct Buffer {

    // HDR color-space setting for Y410.
    bool isY410BT2020 = false;
    float maxMasteringLuminance = 0.0;
    float maxContentLuminance = 0.0;
};

// Metadata describing the layer geometry.
Loading