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

Commit 7dae9c10 authored by Alec Mouri's avatar Alec Mouri
Browse files

Propagate the 170M->sRGB lie everywhere.

If the device is configured to decode SDR video standards as sRGB, then
we need to do this for screenshots and caching as well.

See patch I64fc8f2ea77f8e595333de36fb9da2979d8316ca for why we allow for reinterpreting 170M as sRGB.

Bug: 288330598
Test: Netflix full screen, disable HW overlays, then swipe to home
Change-Id: Ie4eabd6301826fcb9e302ba6079f7f6b94e5a8b8
parent 1c5a29c7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -67,7 +67,7 @@ void OutputCompositionState::dump(std::string& out) const {
    out.append("\n   ");
    out.append("\n   ");


    out.append("\n   ");
    out.append("\n   ");
    dumpVal(out, "treate170mAsSrgb", treat170mAsSrgb);
    dumpVal(out, "treat170mAsSrgb", treat170mAsSrgb);


    out.append("\n");
    out.append("\n");
    for (const auto& borderRenderInfo : borderInfoList) {
    for (const auto& borderRenderInfo : borderInfoList) {
+13 −12
Original line number Original line Diff line number Diff line
@@ -180,8 +180,8 @@ void CachedSet::render(renderengine::RenderEngine& renderEngine, TexturePool& te
            .targetLuminanceNits = outputState.displayBrightnessNits,
            .targetLuminanceNits = outputState.displayBrightnessNits,
    };
    };


    LayerFE::ClientCompositionTargetSettings targetSettings{
    LayerFE::ClientCompositionTargetSettings
            .clip = Region(viewport),
            targetSettings{.clip = Region(viewport),
                           .needsFiltering = false,
                           .needsFiltering = false,
                           .isSecure = outputState.isSecure,
                           .isSecure = outputState.isSecure,
                           .supportsProtectedContent = false,
                           .supportsProtectedContent = false,
@@ -189,9 +189,10 @@ void CachedSet::render(renderengine::RenderEngine& renderEngine, TexturePool& te
                           .dataspace = outputDataspace,
                           .dataspace = outputDataspace,
                           .realContentIsVisible = true,
                           .realContentIsVisible = true,
                           .clearContent = false,
                           .clearContent = false,
            .blurSetting = LayerFE::ClientCompositionTargetSettings::BlurSetting::Enabled,
                           .blurSetting =
                                   LayerFE::ClientCompositionTargetSettings::BlurSetting::Enabled,
                           .whitePointNits = outputState.displayBrightnessNits,
                           .whitePointNits = outputState.displayBrightnessNits,
    };
                           .treat170mAsSrgb = outputState.treat170mAsSrgb};


    std::vector<renderengine::LayerSettings> layerSettings;
    std::vector<renderengine::LayerSettings> layerSettings;
    renderengine::LayerSettings highlight;
    renderengine::LayerSettings highlight;
+1 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ std::shared_ptr<ScreenCaptureOutput> createScreenCaptureOutput(ScreenCaptureOutp
    output->setRenderSurface(std::make_unique<ScreenCaptureRenderSurface>(std::move(args.buffer)));
    output->setRenderSurface(std::make_unique<ScreenCaptureRenderSurface>(std::move(args.buffer)));
    output->setDisplayBrightness(args.sdrWhitePointNits, args.displayBrightnessNits);
    output->setDisplayBrightness(args.sdrWhitePointNits, args.displayBrightnessNits);
    output->editState().clientTargetBrightness = args.targetBrightness;
    output->editState().clientTargetBrightness = args.targetBrightness;
    output->editState().treat170mAsSrgb = args.treat170mAsSrgb;


    output->setDisplayColorProfile(std::make_unique<compositionengine::impl::DisplayColorProfile>(
    output->setDisplayColorProfile(std::make_unique<compositionengine::impl::DisplayColorProfile>(
            compositionengine::DisplayColorProfileCreationArgsBuilder()
            compositionengine::DisplayColorProfileCreationArgsBuilder()
+1 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ struct ScreenCaptureOutputArgs {
    // Counterintuitively, when targetBrightness > 1.0 then dim the scene.
    // Counterintuitively, when targetBrightness > 1.0 then dim the scene.
    float targetBrightness;
    float targetBrightness;
    bool regionSampling;
    bool regionSampling;
    bool treat170mAsSrgb;
};
};


// ScreenCaptureOutput is used to compose a set of layers into a preallocated buffer.
// ScreenCaptureOutput is used to compose a set of layers into a preallocated buffer.
+2 −1
Original line number Original line Diff line number Diff line
@@ -7485,7 +7485,8 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
                                        .sdrWhitePointNits = sdrWhitePointNits,
                                        .sdrWhitePointNits = sdrWhitePointNits,
                                        .displayBrightnessNits = displayBrightnessNits,
                                        .displayBrightnessNits = displayBrightnessNits,
                                        .targetBrightness = targetBrightness,
                                        .targetBrightness = targetBrightness,
                                        .regionSampling = regionSampling});
                                        .regionSampling = regionSampling,
                                        .treat170mAsSrgb = mTreat170mAsSrgb});


        const float colorSaturation = grayscale ? 0 : 1;
        const float colorSaturation = grayscale ? 0 : 1;
        compositionengine::CompositionRefreshArgs refreshArgs{
        compositionengine::CompositionRefreshArgs refreshArgs{