Skip to content

Regarding the gamma 2.2 transfer function #18

@dantmnf

Description

@dantmnf

TL;DR

  • Gamma 2.2 is a popular calibration target but unfortunately not supported in Windows MHC/ACM/HDR pipelines.
  • You can't change color reproduction of color-managed apps by simply changing the calibration target tone curve.

The Problem

Think of a random color-managed app, given specified content (e.g. an image) and display profile, tell the rendering behavior.

Content Profile Display Profile Rendering Behavior
Unspecified Unspecified
sRGB Unspecified
Apple Display P3 Unspecified
Unspecified sRGB
Unspecified Rec. 709 with gamma 2.2
sRGB Rec. 709 with gamma 2.2
Apple Display P3 Rec. 709 with gamma 2.2
sRGB Apple Display P3

Note

  • Chromium discards TRCs in display profiles and always assumes sRGB TRC for SDR.
  • Few content is encoded in Rec. 709 (or sRGB, if you like) gamut with gamma 2.2
  • Apple Display P3 consists of DCI-P3 gamut, D65 white point and sRGB transfer function.

Facts

  • In the current implementation, if an MHC2 transform or ACM/HDR mode is in effect, the display is always tagged with either the original MHC ICC profile or a pseudo profile with sRGB TRC.
  • For the MHC CSC pipeline to work properly with color-managed apps, tone curves in MHC ICC profiles should be sRGB TRC to ensure encoded RGB values are correctly converted back to linear XYZ.
  • For good old non-MHC ICC profiles, if you choose gamma 2.2 as calibration target, the resulting profile will have a gamma 2.2 TRC. When the profile is associated with a display, CMMs will convert sRGB-encoded contents from sRGB piecewise TRC to pure-power gamma 2.2 TRC before sending them to the display.
    • No known CMM will passthrough sRGB-encoded content, without conversion, to a gamma-2.2 tagged display.

My Views

  • Given the pipelines are fixed to sRGB TRC, it doesn't make sense to use gamma 2.2 in some stages in the pipeline.
    • Yes, gamma 2.2 can be used for non-color-managed apps/contents, but this is unfortunately not supported in current Windows MHC/ACM/HDR pipelines.
  • Don't treat sRGB TRC special - it's just like some other gamma curve with different power.
    • For SDR display: either ignore the curve and accept different OETF/EOTF combination (just like BT.1886-encoded video), or follow the full source EOTF - linear XYZ - destination OETF pipeline
    • Avoid explicitly tagging your content with sRGB TRC, especially if it's not created under sRGB TRC (like gamma 2.2)

Feel free to drop your thoughts here, or upvote the related Feedback Hub ticket1.

Footnotes

  1. https://aka.ms/AAnpmrt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions