Loading [MathJax]/jax/output/HTML-CSS/config.js
  • <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • NVIDIA DRIVE OS Linux SDK API Reference

    6.0.9 Release
    All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    EGL_NV_stream_metadata
    Name
    
        NV_stream_metadata
    
    Name Strings
    
        EGL_NV_stream_metadata
    
    Contributors
    
        Daniel Kartch
        Gajanan Bhat
        Laszlo Weber
        Lawrence Ibarria
        Miguel A. Vico
    
    Contacts
    
        Daniel Kartch, NVIDIA (dkartch 'at' nvidia 'dot' com)
    
    Status
    
        Complete
    
    Version
    
        Version 8 - July 31, 2015
    
    Number
    
        EGL Extension #93
    
    
    Extension Type
    
        EGL display extension
    
    Dependencies
    
        Requires EGL_KHR_stream
    
        Interacts with EGL_EXT_device_base
    
    Overview
    
        Application suites which make use of streams to transmit images may
        need to communicate additional data between the producer and
        consumer, synchronized with the frame updates. This data may change
        infrequently, such as a movie title and track number to be displayed
        to the user, or every frame, such as a focal length and exposure
        time used to process the image. Transmitting this data outside the
        scope of the stream may be inconvenient, particularly in the case of
        cross-process streams. But the nature of the data is highly
        application-dependent, so it is not feasible for an EGL
        implementation to define specific extensions for a broad range of
        application data.
    
        This extension provides a means for an application (or application
        suite in the cross-process case) to associate arbitrary metadata
        with a stream. Multiple metadata fields are available, allowing them
        to be updated and used independently by separate subcomponents of
        producers and consumers, respectively. The format of the data is
        determined by the application, which is responsible for writing and
        reading it correctly.
    
    New Types
    
        None
    
    New Functions
    
        EGLBoolean eglQueryDisplayAttribNV(
            EGLDisplay   dpy,
            EGLint       attribute,
            EGLAttrib*   value);
    
        EGLBoolean eglSetStreamMetadataNV(
            EGLDisplay   dpy,
            EGLStreamKHR stream,
            EGLint       n,
            EGLint       offset,
            EGLint       size,
            const void*  data);
    
        EGLBoolean eglQueryStreamMetadataNV(
            EGLDisplay   dpy,
            EGLStreamKHR stream,
            EGLenum      name,
            EGLint       n,
            EGLint       offset,
            EGLint       size,
            void*        data);
    
    New Tokens
    
        Accepted as <attribute> by eglQueryDisplayAttribNV:
    
            EGL_MAX_STREAM_METADATA_BLOCKS_NV            0x3250
            EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV        0x3251
            EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV        0x3252
    
        Accepted as <name> by eglQueryStreamMetatdataNV:
    
            EGL_PRODUCER_METADATA_NV                     0x3253
            EGL_CONSUMER_METADATA_NV                     0x3254
            EGL_PENDING_METADATA_NV                      0x3328
    
        Accepted in <attrib_list> by eglCreateStreamKHR and as <attribute>
        by eglQueryStreamKHR:
    
            EGL_METADATA0_SIZE_NV                        0x3255
            EGL_METADATA1_SIZE_NV                        0x3256
            EGL_METADATA2_SIZE_NV                        0x3257
            EGL_METADATA3_SIZE_NV                        0x3258
    
            EGL_METADATA0_TYPE_NV                        0x3259
            EGL_METADATA1_TYPE_NV                        0x325A
            EGL_METADATA2_TYPE_NV                        0x325B
            EGL_METADATA3_TYPE_NV                        0x325C
    
    
    Add to section "3.3 EGL Queries"
    
        To query attributes of an initialized display, call
    
            EGLBoolean eglQueryDisplayAttribNV(
                EGLDisplay   dpy,
                EGLint       attribute,
                EGLAttrib*   value)
    
        On success, EGL_TRUE is returned, and the value associated with
        attribute <name> is returned in <value>.
    
        If <name> is EGL_MAX_STREAM_METADATA_BLOCKS_NV, the total number
        of independent metadata blocks supported by each stream is returned.
        If <name> is EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV, the maximum size
        supported for an individual metadata block is returned. If <name> is
        EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV, the maximum combined size of
        all metadata blocks supported by a single stream is returned.
    
        On failure, EGL_FALSE is returned.  An EGL_BAD_DISPLAY error is
        generated if <dpy> is not a valid initialized display. An
        EGL_BAD_ATTRIBUTE error is generated if <name> is not a valid
        attribute name.
    
    If EGL_EXT_device_base is present, eglQueryDisplayAttribNV is equivalent
    to eglQueryDisplayAttribEXT, and calls to either will return the same
    values.
    
    Add to table "3.10.4.4 EGLStream Attributes" in EGL_KHR_stream
    
            Attribute                 Read/Write    Type    Section
            ------------------------  ----------   ------   ----------
            EGL_METADATA<n>_SIZE_NV       io       EGLint   3.10.4.x
            EGL_METADATA<n>_TYPE_NV       io       EGLint   3.10.4.x+1
    
    Add new subsections to section "3.10.4 EGLStream Attributes" of
    EGL_KHR_stream
    
        3.10.4.x EGL_METADATA<n>_SIZE_NV
    
        The EGL_METADATA<n>_SIZE_NV attribute indicates the size of the
        <n>th metadata block associated with a stream. If <n> is not less
        than the value of EGL_MAX_STREAM_METADATA_BLOCKS_NV for the parent
        EGLDisplay, the attribute is treated as unknown.
    
        These attributes may only be set when the stream is created. The
        default value is 0. The value may not exceed that of
        EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV for the parent EGLDisplay.
        Furthermore, the total size of all metadata blocks may not exceed
        the value of EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV. If either of
        these restrictions are exceeded, an EGL_BAD_PARAMETER error is
        generated.
    
        3.10.4.x+1 EGL_METADATA<n>_TYPE_NV
    
        The EGL_METADATA<n>_TYPE_NV attribute indicates an optional
        application-defined type associated with the stream's <n>th metadata
        block. If <n> is not less than the value of
        EGL_MAX_STREAM_METADATA_BLOCKS_NV for the parent EGLDisplay, the
        attribute is treated as unknown.
    
        These attributes may only be set when the stream is created. The
        default value is 0. It is not required that a type be provided for
        every metadata block for which a size has been specified. These may
        be used to help separate application components coordinate their use
        of the stream's metadata blocks.
    
    Add new section to "3.10 EGLStreams" of EGL_KHR_stream
    
        3.10.y EGLStream metadata
    
        An application may associate arbitrary blocks of additional data
        with the stream, to be updated in sync with the frames. The contents
        and format of these data blocks are left to the application, subject
        to size restrictions imposed by the implementation. The application
        must specify the sizes of its metadata blocks at the time the stream
        is created. The contents may be completely or partially modified
        every frame or less frequently, as the application chooses. When a
        new frame is inserted into the stream, a snapshot of the current
        metadata contents are associated with the frame, and may then be
        queried from the stream.
    
        The contents of all metadata blocks of non-zero size are initialized
        to zeroes. To modify the contents of a portion of a metadata block,
        call
    
            EGLBoolean eglSetStreamMetadataNV(
                EGLDisplay   dpy,
                EGLStreamKHR stream,
                EGLint       n,
                EGLint       offset,
                EGLint       size,
                const void*  data)
    
        On success, EGL_TRUE is returned and the first <size> bytes pointed
        to by <data> will be copied to the <n>th metadata block of <stream>,
        starting at <offset> bytes from the beginning of the block. This
        data will be associated with all subsequent frames inserted into the
        stream until the contents are next modified.
    
        On failure, EGL_FALSE is returned
            - An EGL_BAD_DISPLAY error is generated if <dpy> is not a valid
              display.
            - An EGL_BAD_STREAM_KHR error is generated if <stream> is not a
              valid stream associated with <dpy>.
            - An EGL_BAD_STATE_KHR error is generated if the state of
              <stream> is not EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR,
              EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR, or
              EGL_STREAM_STATE_EMPTY_KHR.
            - An EGL_BAD_ACCESS error is generated if the producer and
              consumer endpoints of the stream are represented by separate
              EGLStream objects, and the producer is not attached to
              <stream>.
            - An EGL_BAD_PARAMETER error is generated if <n> is negative or
              is equal to or greather than the value of
              EGL_MAX_STREAM_METADATA_BLOCKS_NV for <dpy>.
            - An EGL_BAD_PARAMETER error is generated if <offset> or <size>
              are negative, or if <offset>+<size> is greater than the value
              of EGL_METADATA<n>_SIZE_NV for <stream>.
    
        If <data> does not point to valid readable memory of at least <size>
        bytes, undefined behavior will result. If the value of <size> is
        zero, no error will occur, but the function will have no effect.
    
        To query the contents of a metadata block for a frame, call
    
            EGLBoolean eglQueryStreamMetadataNV(
                EGLDisplay   dpy,
                EGLStreamKHR stream,
                EGLenum      name,
                EGLint       n,
                EGLint       offset,
                EGLint       size,
                void*        data)
    
        On success, EGL_TRUE is returned and <size> bytes starting from the
        <offset>th byte of the <n>th metadata block of <stream> will be
        copied into the memory pointed to by <data>. If <name> is
        EGL_PRODUCER_METADATA_NV, the metadata will be taken from the frame
        most recently inserted into the stream by the producer. If <name> is
        EGL_CONSUMER_METADATA_NV, the metadata will be taken from the frame
        most recently acquired by the consumer. If <name> is
        EGL_PENDING_METADATA_NV, the metadata will be taken from the frame
        which would be obtained if an acquire operation were performed at
        the time of the query.
    
        On failure, EGL_FALSE is returned
            - An EGL_BAD_DISPLAY error is generated if <dpy> is not a valid
              display.
            - An EGL_BAD_STREAM_KHR error is generated if <stream> is not a
              valid stream associated with <dpy>.
            - An EGL_BAD_STATE_KHR error is generated if the state of
              <stream> is not EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR or
              EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR.
            - An EGL_BAD_ATTRIBUTE error is generated if <name> is not
              EGL_PRODUCER_METADATA_NV, EGL_CONSUMER_METADATA_NV, or
              EGL_PENDING_METADATA_NV.
            - An EGL_BAD_PARAMETER error is generated if <n> is negative or
              is equal to or greater than the value of
              EGL_MAX_STREAM_METADATA_BLOCKS_NV for <dpy>.
            - An EGL_BAD_PARAMETER error is generated if <offset> or <size>
              are negative, or if <offset>+<size> is greater than the value
              of EGL_METADATA<n>_SIZE_NV for <stream>.
    
        If <data> does not point to valid writeable memory of at least
        <size> bytes, undefined behavior will result. If the value of <size>
        is zero, no error will occur, but the function will have no effect.
    
    Issues
    
        1.  What happens if multiple calls are made to
            eglSetStreamMetadataNV without presenting a new frame?
    
            RESOLVED: If the calls specify overlapping ranges of the same
            metadata block, the earlier data in the overlapped portion is
            overwritten. Only the most recent values are associated with
            the next frame when it is inserted into the stream.
    
        2.  What happens if multiple frames are presented without calling
            eglSetStreamMetadataNV?
    
            RESOLVED: The most recently provided data is reused.
    
    Revision History
    
        #8  (July 31, 2015) Daniel Kartch
            - Cleaned up and added contact info for publication.
    
        #7  (April 2, 2015) Miguel A. Vico
            - Assigned enumerated value for metadata of pending frame.
    
        #6  (March 20, 2015) Daniel Kartch
            - Add query for metadata of pending frame.
    
        #5  (January 15, 2015) Daniel Kartch
            - Add paragraph of supported attributes to description of
              eglQueryDisplayAttribNV.
            - Added/updated error conditions to set/query functions.
            - Fixed errors in prototypes.
    
        #4  (January 6, 2015) Daniel Kartch
            - Fixed errors in prototypes.
            - Added enum values.
    
        #3  (December 12, 2014) Daniel Kartch
            - Clarified language on how metadata becomes associated with
              frames inserted into the stream.
            - Fixed typos.
    
        #2  (December 12, 2014) Daniel Kartch
            - Added offset and size to Set and Query functions.
    
        #1  (December 11, 2014) Daniel Kartch
            - Initial draft
    
    人人超碰97caoporen国产