Name

    ANDROID_recordable

Name Strings

    EGL_ANDROID_recordable

Contributors

    Jamie Gennis

Contact

    Jamie Gennis, Google Inc. (jgennis 'at' google.com)

Status

    Draft.

Version

    Version 1, July 8, 2011

Number

    EGL Extension #XXX

Dependencies

    Requires EGL 1.0

    This extension is written against the wording of the EGL 1.4 Specification

Overview

    Android supports a number of different ANativeWindow implementations that
    can be used to create an EGLSurface.  One implementation, which records the
    rendered image as a video each time eglSwapBuffers gets called, may have
    some device-specific restrictions.  Because of this, some EGLConfigs may be
    incompatible with these ANativeWindows.  This extension introduces a new
    boolean EGLConfig attribute that indicates whether the EGLConfig supports
    rendering to an ANativeWindow that records images to a video.

New Types

    None.

New Procedures and Functions

    None.

New Tokens

    Accepted by the <attribute> parameter of eglGetConfigAttrib and
    the <attrib_list> parameter of eglChooseConfig:

        EGL_RECORDABLE_ANDROID                      0x3142

Changes to Chapter 3 of the EGL 1.4 Specification (EGL Functions and Errors)

    Section 3.4, Configuration Management, add a row to Table 3.1.
    
              Attribute             Type                 Notes
        ----------------------     -------     --------------------------
        EGL_RECORDABLE_ANDROID     boolean     whether video recording is
                                               supported

    Section 3.4, Configuration Management, add a row to Table 3.4.

              Attribute            Default     Selection  Sort   Sort
                                               Criteria   Order  Priority
        ----------------------  -------------  ---------  -----  --------
        EGL_RECORDABLE_ANDROID  EGL_DONT_CARE    Exact    None

    Section 3.4, Configuration Management, add a paragraph at the end of the
    subsection titled Other EGLConfig Attribute Descriptions.

        EGL_RECORDABLE_ANDROID is a boolean indicating whether the config may
        be used to create an EGLSurface from an ANativeWindow that is a video
        recorder as indicated by the NATIVE_WINDOW_IS_VIDEO_RECORDER query on
        the ANativeWindow.

    Section 3.4.1, Querying Configurations, change the last paragraph as follow

        EGLConfigs are not sorted with respect to the parameters
        EGL_BIND_TO_TEXTURE_RGB, EGL_BIND_TO_TEXTURE_RGBA, EGL_CONFORMANT,
        EGL_LEVEL, EGL_NATIVE_RENDERABLE, EGL_MAX_SWAP_INTERVAL,
        EGL_MIN_SWAP_INTERVAL, EGL_RENDERABLE_TYPE, EGL_SURFACE_TYPE,
        EGL_TRANSPARENT_TYPE, EGL_TRANSPARENT_RED_VALUE,
        EGL_TRANSPARENT_GREEN_VALUE, EGL_TRANSPARENT_BLUE_VALUE, and
        EGL_RECORDABLE_ANDROID.

Issues

    1. Should this functionality be exposed as a new attribute or as a bit in
    the EGL_SURFACE_TYPE bitfield?

    RESOLVED: It should be a new attribute.  It does not make sense to use up a
    bit in the limit-size bitfield for a platform-specific extension.

    2. How should the new attribute affect the sorting of EGLConfigs?

    RESOLVED: It should not affect sorting.  Some implementations may not have
    any drawback associated with using a recordable EGLConfig.  Such
    implementations should not have to double-up some of their configs to  one
    sort earlier than .  Implementations that do have drawbacks can use the
    existing caveat mechanism to report this drawback to the client.

    3. How is this extension expected to be implemented?

    RESPONSE: There are two basic approaches to implementing this extension
    that were considered during its design.  In both cases it is assumed that a
    color space conversion must be performed at some point because most video
    encoding formats use a YUV color space.  The two approaches are
    distinguished by the point at which this color space conversion is
    performed.

    One approach involves performing the color space conversion as part of the
    eglSwapBuffers call before queuing the rendered image to the ANativeWindow.
    In this case, the VisualID of the EGLConfig would correspond to a YUV
    Android HAL pixel format from which the video encoder can read.  The
    EGLConfig would likely have the EGL_SLOW_CONFIG caveat because using that
    config to render normal window contents would result in an RGB -> YUV color
    space conversion when rendering the frame as well as a YUV -> RGB
    conversion when compositing the window.

    The other approach involves performing the color space conversion in the
    video encoder.  In this case, the VisualID of the EGLConfig would
    correspond to an RGB HAL pixel format from which the video encoder can
    read.  The EGLConfig would likely not need to have any caveat set, as using
    this config for normal window rendering would not have any added cost.

Revision History

#2 (Jamie Gennis, July 15, 2011)
    - Added issue 3.

#1 (Jamie Gennis, July 8, 2011)
    - Initial draft.
