Name

    EXT_surface_SMPTE2086_metadata

Name Strings

    EGL_EXT_surface_SMPTE2086_metadata

Contact

    Weiwan Liu (weiwliu 'at' nvidia.com)

Contributors

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

IP Status

    No known IP claims.

Status

    Complete

Version

    Version 8 - Oct 16, 2017

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_EXT (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_EXT (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_EXT, 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_BAD_PARAMETER 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_EXT (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_EXT
        y chromaticity coordinate for red display primary multiplied by EGL_METADATA_SCALING_EXT
        x chromaticity coordinate for green display primary multiplied by EGL_METADATA_SCALING_EXT
        y chromaticity coordinate for green display primary multiplied by EGL_METADATA_SCALING_EXT
        x chromaticity coordinate for blue display primary multiplied by EGL_METADATA_SCALING_EXT
        y chromaticity coordinate for blue display primary multiplied by EGL_METADATA_SCALING_EXT
        x chromaticity coordinate for white point multiplied by EGL_METADATA_SCALING_EXT
        y chromaticity coordinate for white point multiplied by EGL_METADATA_SCALING_EXT
        Maximum luminance in nit multiplied by EGL_METADATA_SCALING_EXT
        Minimum luminance in nit multiplied by EGL_METADATA_SCALING_EXT

    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_EXT
        (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_BAD_PARAMTER 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

    Version 6, 2017/02/28
      - Add 'EXT' suffix to 'EGL_METADATA_SCALING'

    Version 7, 2017/10/13
      - Rename EGL_INVALID_VALUE (which doesn't exist) to EGL_FALSE

    Version 8, 2017/10/16
      - Fix v7 change to use EGL_BAD_PARAMETER as the error code
	generated vs. EGL_FALSE which is the expected return value of
	the function.

