Name

    EXT_surface_SMPTE2086_metadata

Name Strings

    EGL_EXT_surface_SMPTE2086_metadata

Contact

    Weiwan Liu (weiwliu 'at' nvidia.com)

Contributors

    Tom Cooksey
    Mathias Heyer
    Lauri Hyvarinen
    James Jones
    Daniel Koch
    Jeff Leger
    Sandeep Shinde

IP Status

    No known IP claims.

Status

    Complete

Version

    Version 5 - Nov 29, 2016

Number

    EGL Extension #109

Dependencies

    This extension requires EGL 1.4.

    This extension is written against the wording of the EGL 1.5 specification
    (August 27, 2014).

Overview

    This extension adds a new set of EGL surface attributes for the metadata
    defined by the SMPTE (the Society of Motion Picture and Television
    Engineers) ST 2086 standard. The SMPTE 2086 metadata includes the color
    primaries, white point and luminance range of the mastering display, which
    all together define the color volume that contains all the possible colors
    the mastering display can produce. The mastering display is the display
    where creative work is done and creative intent is established. To preserve
    such creative intent as much as possible and achieve consistent color
    reproduction on different viewing displays, it is useful for the display
    pipeline to know the color volume of the original mastering display where
    content is created or tuned. This avoids performing unnecessary mapping of
    colors that are not displayable on the original mastering display.

    This extension adds the ability to pass the SMPTE 2086 metadata via EGL,
    from which the color volume can be derived. While the general purpose of the
    metadata is to assist in the transformation between different color volumes
    of different displays and help achieve better color reproduction, it is not
    in the scope of this extension to define how exactly the metadata should be
    used in such a process. It is up to the implementation to determine how to
    make use of the metadata.

New Procedures and Functions

    None.

New Tokens

    Accepted as attribute by eglSurfaceAttrib and eglQuerySurface:

        EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT       0x3341
        EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT       0x3342
        EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT       0x3343
        EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT       0x3344
        EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT       0x3345
        EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT       0x3346
        EGL_SMPTE2086_WHITE_POINT_X_EXT            0x3347
        EGL_SMPTE2086_WHITE_POINT_Y_EXT            0x3348
        EGL_SMPTE2086_MAX_LUMINANCE_EXT            0x3349
        EGL_SMPTE2086_MIN_LUMINANCE_EXT            0x334A

Additions to Chapter "3.5.6 Surface Attributes" of the EGL 1.5 Specification

    Add the following paragraph before the "Errors" section on page 43,

        If attribute is EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT, EGL_SMPTE2086_-
        DISPLAY_PRIMARY_RY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT, EGL_-
        SMPTE2086_DISPLAY_PRIMARY_GY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT
        or EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT, then value indicates the
        corresponding xy chromaticity coordinate[12] of the mastering display's
        red, green or blue color primary, as configured for the mastering
        process. The floating-point display primary coordinates should be
        multiplied by EGL_METADATA_SCALING (50000)[13], before being passed into
        eglSurfaceAttrib as integers.

        If attribute is EGL_SMPTE2086_WHITE_POINT_X_EXT or EGL_SMPTE2086_WHITE_-
        POINT_Y_EXT, then value indicates the corresponding xy chromaticity
        coordinate[12] of the mastering display's white point, as configured for
        the mastering process. The floating-point white point chromaticity
        coordinates should be multiplied by EGL_METADATA_SCALING (50000), before
        being passed into eglSurfaceAttrib as integers.

        If attribute is EGL_SMPTE2086_MAX_LUMINANCE_EXT or EGL_SMPTE2086_MIN_-
        LUMINANCE_EXT, then value indicates the maximum or minimum display
        luminance of the mastering display, as configured for the mastering
        process. The unit of value is 1 nit (candela per square meter). The
        floating-point luminance values should be multiplied by
        EGL_METADATA_SCALING, a constant scaling factor of 50000, before being
        passed into eglSurfaceAttrib as integers.

        By defining the mastering display's color volume through color
        primaries, white point, and luminance range, applications give EGL
        and the underlying display pipeline hints as to how to reproduce colors
        more closely to the original content when created on the mastering
        display. Exactly how the color volume information is used to assist the
        color reproduction process is implementation dependant.

        The initial values of EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT, EGL_-
        SMPTE2086_DISPLAY_PRIMARY_RY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT,
        EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_BX_-
        EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT, EGL_SMPTE2086_WHITE_POINT_X_-
        EXT, EGL_SMPTE2086_WHITE_POINT_Y_EXT, EGL_SMPTE2086_MAX_LUMINANCE_EXT
        and EGL_SMPTE2086_MIN_LUMINANCE_EXT are EGL_DONT_CARE, which causes the
        hints to be ignored. If value is not in the implementation's supported
        range for attribute, a EGL_INVALID_VALUE error is generated, and some or
        all of the metadata fields are ignored.

    Add the following footnote at the end of page 43, and increment all the
    subsequent footnote numbers in Chapter 3,

            [12] Chromaticity coordinates x and y are as specified in CIE
        15:2004 "Calculation of chromaticity coordinates" (Section 7.3) and are
        limited to between 0 and 1 for real colors for the mastering display.

    Change the original footnote 12 at the end of section "3.5.6 Surface
    Attributes" on page 45 to,

            [13] EGL_DISPLAY_SCALING (10000) and EGL_METADATA_SCALING (50000)
        are used where EGL needs to take or return floating-point attribute
        values, which would normally be smaller than 1, as integers while still
        retaining sufficient precision to be meaningful.

    Addition to Table 3.5 "Queryable surface attributes and types",

                      Attribute                   Type
        ------------------------------------------------
        EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT     integer
        EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT     integer
        EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT     integer
        EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT     integer
        EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT     integer
        EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT     integer
        EGL_SMPTE2086_WHITE_POINT_X_EXT          integer
        EGL_SMPTE2086_WHITE_POINT_Y_EXT          integer
        EGL_SMPTE2086_MAX_LUMINANCE_EXT          integer
        EGL_SMPTE2086_MIN_LUMINANCE_EXT          integer

                      Description
        --------------------------------------------------------------------------------------
        x chromaticity coordinate for red display primary multiplied by EGL_METADATA_SCALING
        y chromaticity coordinate for red display primary multiplied by EGL_METADATA_SCALING
        x chromaticity coordinate for green display primary multiplied by EGL_METADATA_SCALING
        y chromaticity coordinate for green display primary multiplied by EGL_METADATA_SCALING
        x chromaticity coordinate for blue display primary multiplied by EGL_METADATA_SCALING
        y chromaticity coordinate for blue display primary multiplied by EGL_METADATA_SCALING
        Maximum luminance in nit multiplied by EGL_METADATA_SCALING
        Minimum luminance in nit multiplied by EGL_METADATA_SCALING

    Add the following paragraph at the end of section "3.5.6 Surface Attributes"
    on page 45,

        Querying EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT, EGL_SMPTE2086_DISPLAY_-
        PRIMARY_RY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT, EGL_SMPTE2086_-
        DISPLAY_PRIMARY_GY_EXT, EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT or EGL_-
        SMPTE2086_DISPLAY_PRIMARY_BY_EXT returns respectively the xy
        chromaticity coordinate of the mastering display's red, green or blue
        color primary, multiplied by the constant value EGL_METADATA_SCALING
        (50000). The display primary coordinates can be set via eglSurfaceAttrib
        as described above.

        Querying EGL_SMPTE2086_WHITE_POINT_X_EXT, or EGL_SMPTE2086_WHITE_POINT_-
        Y_EXT returns respectively the xy chromaticity coordinate of the
        mastering display's white point, multiplied by the constant value EGL_-
        METADATA_SCALING (50000). The white point coordinates can be set via
        eglSurfaceAttrib as described above.

        Querying EGL_SMPTE2086_MAX_LUMINANCE_EXT or EGL_SMPTE2086_MIN_-
        LUMINANCE_EXT returns respectively the maximum and minimum display
        luminance of the mastering display. The values returned are in units of
        1 nit (candela per square meter), multiplied by the constant value EGL_-
        METADATA_SCALING (50000). The value of EGL_SMPTE2086_MAX_LUMINANCE_EXT
        and EGL_SMPTE2086_MIN_LUMINANCE_EXT can be set via eglSurfaceAttrib as
        described above.

Errors

    Described in the body text above.

Issues

    1. Should this extension define a valid data range for each metadata field?

       RESOLVED: No. It is not in the scope of this extension to define how the
       metadata hints should be used in the display pipeline and, as a result,
       what the valid data ranges are for the metadata fields. It is
       implementation dependant, but related standards, such as SMPTE ST 2086,
       can be used as reference. As described in the body, implemetations may
       generate a EGL_INVALID_VALUE error to notify applications that the input
       metadata values are invalid or not supported.

Revision History

    Version 1, 2016/04/22
      - Initial draft

    Version 2, 2016/05/25
      - Rename to EXT and introduce a new scaling factor

    Version 3, 2016/10/19
      - Add an error and revise issue 1

    Version 4, 2016/11/22
      - Change status to complete

    Version 5, 2016/11/29
      - Add token assigments

