Edit

kc3-lang/angle/src/libANGLE/Stream.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2020-11-22 09:05:06
    Hash : fb82b119
    Message : EGL: Add const to several methods. This is in preparatino for auto-generating the EGL validation header. The auto-generation script will force multiple parameters to const. Bug: angleproject:2621 Change-Id: I04e442c6ff118fd7c296341f12f442901f6fb8c0 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2552979 Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Cody Northrop <cnorthrop@google.com> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/libANGLE/Stream.h
  • //
    // Copyright 2016 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // Stream.h: Defines the egl::Stream class, representing the stream
    // where frames are streamed in. Implements EGLStreanKHR.
    
    #ifndef LIBANGLE_STREAM_H_
    #define LIBANGLE_STREAM_H_
    
    #include <array>
    
    #include <EGL/egl.h>
    #include <EGL/eglext.h>
    
    #include "common/angleutils.h"
    #include "libANGLE/AttributeMap.h"
    #include "libANGLE/Debug.h"
    
    namespace rx
    {
    class StreamProducerImpl;
    }
    
    namespace gl
    {
    class Context;
    class Texture;
    }  // namespace gl
    
    namespace egl
    {
    class Display;
    class Error;
    class Thread;
    
    class Stream final : public LabeledObject, angle::NonCopyable
    {
      public:
        Stream(Display *display, const AttributeMap &attribs);
        ~Stream() override;
    
        void setLabel(EGLLabelKHR label) override;
        EGLLabelKHR getLabel() const override;
    
        enum class ConsumerType
        {
            NoConsumer,
            GLTextureRGB,
            GLTextureYUV,
        };
    
        enum class ProducerType
        {
            NoProducer,
            D3D11Texture,
        };
    
        // A GL texture interpretation of a part of a producer frame. For use with GL texture consumers
        struct GLTextureDescription
        {
            unsigned int width;
            unsigned int height;
            unsigned int internalFormat;
            unsigned int mipLevels;
        };
    
        EGLenum getState() const;
    
        void setConsumerLatency(EGLint latency);
        EGLint getConsumerLatency() const;
    
        EGLuint64KHR getProducerFrame() const;
        EGLuint64KHR getConsumerFrame() const;
    
        void setConsumerAcquireTimeout(EGLint timeout);
        EGLint getConsumerAcquireTimeout() const;
    
        ConsumerType getConsumerType() const;
        ProducerType getProducerType() const;
    
        EGLint getPlaneCount() const;
    
        rx::StreamProducerImpl *getImplementation();
    
        // Consumer creation methods
        Error createConsumerGLTextureExternal(const AttributeMap &attributes, gl::Context *context);
    
        // Producer creation methods
        Error createProducerD3D11Texture(const AttributeMap &attributes);
    
        // Consumer methods
        Error consumerAcquire(const gl::Context *context);
        Error consumerRelease(const gl::Context *context);
    
        // Some consumers are bound to GL contexts. This validates that a given context is bound to the
        // stream's consumer
        bool isConsumerBoundToContext(const gl::Context *context) const;
    
        // Producer methods
        Error validateD3D11Texture(const void *texture, const AttributeMap &attributes) const;
        Error postD3D11Texture(void *texture, const AttributeMap &attributes);
    
      private:
        EGLLabelKHR mLabel;
    
        // Associated display
        Display *mDisplay;
    
        // Producer Implementation
        rx::StreamProducerImpl *mProducerImplementation;
    
        // Associated GL context. Note that this is a weak pointer used for validation purposes only,
        // and should never be arbitrarily dereferenced without knowing the context still exists as it
        // can become dangling at any time.
        gl::Context *mContext;
    
        // EGL defined attributes
        EGLint mState;
        EGLuint64KHR mProducerFrame;
        EGLuint64KHR mConsumerFrame;
        EGLint mConsumerLatency;
    
        // EGL gltexture consumer attributes
        EGLint mConsumerAcquireTimeout;
    
        // EGL gltexture yuv consumer attributes
        EGLint mPlaneCount;
        struct PlaneTexture
        {
            EGLint textureUnit;
            gl::Texture *texture;
        };
        // Texture units and textures for all the planes
        std::array<PlaneTexture, 3> mPlanes;
    
        // Consumer and producer types
        ConsumerType mConsumerType;
        ProducerType mProducerType;
    
        // ANGLE-only method, used internally
        friend class gl::Texture;
        void releaseTextures();
    };
    }  // namespace egl
    
    #endif  // LIBANGLE_STREAM_H_