<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hello All, <br>
    <br>
    This mail is to propose a design for enabling HDR support in
    Wayland/Weston stack, using display engine capabilities, and get
    more feedback and input from community. <br>
    Here are few points (you might already know these), about HDR
    framebuffers, videos and displays:<br>
    - HDR content/buffers are composed in REC2020 colorspace, with bit
    depth 10/12/16 BPC. Some of the popular formats are P010,P012,P016.
    <br>
    - HDR content come with their own Metadata to be applied to get the
    right luminance at the display device. <br>
        - The metadata can be of two type 1. static 2. dynamic . For
    simplicity, this solution is focusing on static HDR only (HDR10
    standard)<br>
    - HDR content also provide its supported EOTF (electro optical
    transfer function) information, which is a curve (like SRGB gamma
    curve). One popular EOTF is PQ(ST2084). <br>
    - HDR capable displays mention their EOTF and HDR metadata support
    information in EDID CEA-861-G blocks.  <span style="color: rgb(34,
      34, 34); font-family: arial, sans-serif; font-size: xx-large;
      font-style: normal; font-variant-ligatures: normal;
      font-variant-caps: normal; font-weight: 100; letter-spacing:
      normal; orphans: 2; text-align: left; text-indent: 0px;
      text-transform: none; white-space: normal; widows: 2;
      word-spacing: 0px; -webkit-text-stroke-width: 0px;
      background-color: rgb(255, 255, 255); text-decoration-style:
      initial; text-decoration-color: initial; display: inline
      !important; float: none;"></span><br>
    - Normal SRGB buffers are composed in SRGB color space following
    REC709 specifications. <br>
    - For accurate blending in display engines, we need to make sure
    following:<br>
        - All the buffers are in same colorspace (Rec 709 or Rec 2020)<br>
        - All the buffers are liner (gamma/EOTF removed)<br>
        - All the buffers are tone mapped in same zone (HDR or SDR)<br>
    <br>
    Please refer to the block diagram below, which presents a simple
    case of a HDR P010 movie playback, with HDR buffers as video
    buffers, and SDR buffers as subtitles. The subsystem looks and works
    like this:<br>
    - A client decodes the buffer (using FFMpeg for example) and gets
    the two buffers, one with video (HDR) and one subtitles (SDR)<br>
    - Client passes following information to the compositor:<br>
         - The actual buffers <br>
         - Their colorspace infromation, BT2020 for HDR buffer, REC709
    for SDR buffer (planning to add a new protocol extension for this)<br>
         - The HDR metadata of the content (planning to add new protocol
    for this)<br>
    <br>
    - Compositors actions:<br>
       - Reads the End display's HDR capabilities from display EDID.
    Assume its an HDR HDMI monitor. <br>
       - Compositor tone maps every view's framebuffer to match tone of
    end display, applying a libVA filter. In this example:<br>
            - The SDR subtitles frame will go through SDR to HDR tone
    mapping (called S2H)<br>
            - The HDR video frame will go through HDR to HDR tone
    mapping (called H2H) if the HDR capabilities of monitor and content
    are different.<br>
            - Now both the buffers and the monitor are in the same tone
    mapped range. <br>
        - As the end display is HDR capable, and one of the content
    frame is HDR, the compositor will prepare all other planes for color
    space conversion (CSC) from REC709->REC2020 using plane CSC
    property. <br>
        - As the CSC and blending should be done in liner space,
    compositor will also use plane level degamma to make the buffers
    linear.<br>
        - These actions will make sure that, during blending:<br>
            - All the buffers are in same colorspace (REC2020)<br>
            - All the buffers are linear <br>
            - All the buffers are tone mapped (HDR)<br>
            - The plane level color properties patch, for DRM can be
    found here: <a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/series/30875/">https://patchwork.freedesktop.org/series/30875/</a> <br>
        - Now, in order to re-apply the HDR curve, compositor will apply
    CRTC level gamma, so that the output buffer is non-linear again. <br>
        - To pass the output HDR information to kernel, so that it can
    create and send AVI-info-frames to HDMI, compositor will set
    Connector HDR metadata property.<br>
            - Code for the same can be found here:
    <a class="moz-txt-link-freetext" href="https://patchwork.freedesktop.org/series/25091/">https://patchwork.freedesktop.org/series/25091/</a><br>
        - And they will ever live happily after :). <br>
    <br>
    Please provide inputs, feedbacks and suggestions for this design and
    plan, so that we can improve out half cooked solution, and start
    sending the patches. <br>
    <br>
                         +------------------+        
    +-------------------+<br>
                         | SDR Buffer subtitles       | HDR Buffer video<br>
                         | (REC  709 colorsp)         | (REC 2020
    colorsp |<br>
                         |                  |        
    |                   |<br>
                         +-------+----------+        
    +-------+-----------+<br>
                                 |                            |<br>
                                 |                            |<br>
                                 |                            |<br>
                         
    +------v---------------------------v------------+        
    +--------------+<br>
                          |   Compositor:                    
    v           |         | LibVA        |<br>
                          |   - assigns views to
    overlays                 +---------> Tone mapping |<br>
                          |   - prepare plane/CRTC color
    properties       <---------+ SDR to HDR   |<br>
                          |     for linear blending in
    display            |         | HDR to SDR   |<br>
                         
    +------+-----------------------------+----------+        
    +--------------+<br>
                                 |                             |<br>
                                 | Tone mapped                 | Tone
    mapped<br>
                                 | non-linear-Rec709           |
    non-linear Rec2020<br>
                          +------v------+             
    +-------v--------+<br>
                           SRGB Degamma |              |EOTF as degamma
    |<br>
                          |(Plane)      |              |(Plane)        
    |<br>
                          |             |              |               
    |<br>
                          +------+------+             
    +-------+--------+<br>
    Tone mapped linear Rec 709   |                             |<br>
                          +------v------+                      |  Tone
    mapped<br>
                          | CSC/CTM     |                      | 
    non-linear Rec2020<br>
                          | REC709->2020|                      |<br>
                          |             |                      |<br>
                          +------+------+                      |<br>
                                 | Tone mapped linear          |<br>
                                 | Rec 2020                    |<br>
                         
    +------v-----------------------------v---------+<br>
                          |           Blender                           
    |<br>
                          |                                             
    |<br>
                         
    +--------------------+-------------------------+<br>
                                               | Tone mapped linear
    Rec2020<br>
                         
    +--------------------v-------------------------+  Tone mapped<br>
                          |           OETF(CRTC Gamma, post blending)   
    |  non-linear Rec2020 +------------------+<br>
                          |                                             
    +---------------->    |  HDMI monitor    |<br>
                         
    +----------------------------------------------+                    
    +------------------+<br>
    <br>
    <br>
    <br>
  </body>
</html>