summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/Stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/Stream.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/Stream.cpp271
1 files changed, 0 insertions, 271 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/Stream.cpp b/src/3rdparty/angle/src/libANGLE/Stream.cpp
deleted file mode 100644
index 68279976b7..0000000000
--- a/src/3rdparty/angle/src/libANGLE/Stream.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-//
-// Copyright (c) 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.cpp: Implements the egl::Stream class, representing the stream
-// where frames are streamed in. Implements EGLStreanKHR.
-
-#include "libANGLE/Stream.h"
-
-#include <platform/Platform.h>
-#include <EGL/eglext.h>
-
-#include "common/debug.h"
-#include "common/mathutil.h"
-#include "common/platform.h"
-#include "common/utilities.h"
-#include "libANGLE/Context.h"
-#include "libANGLE/Display.h"
-#include "libANGLE/renderer/DisplayImpl.h"
-#include "libANGLE/renderer/StreamProducerImpl.h"
-
-namespace egl
-{
-
-Stream::Stream(Display *display, const AttributeMap &attribs)
- : mDisplay(display),
- mProducerImplementation(nullptr),
- mState(EGL_STREAM_STATE_CREATED_KHR),
- mProducerFrame(0),
- mConsumerFrame(0),
- mConsumerLatency(attribs.getAsInt(EGL_CONSUMER_LATENCY_USEC_KHR, 0)),
- mConsumerAcquireTimeout(attribs.getAsInt(EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR, 0)),
- mPlaneCount(0),
- mConsumerType(ConsumerType::NoConsumer),
- mProducerType(ProducerType::NoProducer)
-{
- for (auto &plane : mPlanes)
- {
- plane.textureUnit = -1;
- plane.texture = nullptr;
- }
-}
-
-Stream::~Stream()
-{
- SafeDelete(mProducerImplementation);
- for (auto &plane : mPlanes)
- {
- if (plane.texture != nullptr)
- {
- plane.texture->releaseStream();
- }
- }
-}
-
-void Stream::setConsumerLatency(EGLint latency)
-{
- mConsumerLatency = latency;
-}
-
-EGLint Stream::getConsumerLatency() const
-{
- return mConsumerLatency;
-}
-
-EGLuint64KHR Stream::getProducerFrame() const
-{
- return mProducerFrame;
-}
-
-EGLuint64KHR Stream::getConsumerFrame() const
-{
- return mConsumerFrame;
-}
-
-EGLenum Stream::getState() const
-{
- return mState;
-}
-
-void Stream::setConsumerAcquireTimeout(EGLint timeout)
-{
- mConsumerAcquireTimeout = timeout;
-}
-
-EGLint Stream::getConsumerAcquireTimeout() const
-{
- return mConsumerAcquireTimeout;
-}
-
-Stream::ProducerType Stream::getProducerType() const
-{
- return mProducerType;
-}
-
-Stream::ConsumerType Stream::getConsumerType() const
-{
- return mConsumerType;
-}
-
-EGLint Stream::getPlaneCount() const
-{
- return mPlaneCount;
-}
-
-rx::StreamProducerImpl *Stream::getImplementation()
-{
- return mProducerImplementation;
-}
-
-Error Stream::createConsumerGLTextureExternal(const AttributeMap &attributes, gl::Context *context)
-{
- ASSERT(mState == EGL_STREAM_STATE_CREATED_KHR);
- ASSERT(mConsumerType == ConsumerType::NoConsumer);
- ASSERT(mProducerType == ProducerType::NoProducer);
- ASSERT(context != nullptr);
-
- const auto &glState = context->getGLState();
- EGLenum bufferType = attributes.getAsInt(EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER);
- if (bufferType == EGL_RGB_BUFFER)
- {
- mPlanes[0].texture = glState.getTargetTexture(GL_TEXTURE_EXTERNAL_OES);
- ASSERT(mPlanes[0].texture != nullptr);
- mPlanes[0].texture->bindStream(this);
- mConsumerType = ConsumerType::GLTextureRGB;
- mPlaneCount = 1;
- }
- else
- {
- mPlaneCount = attributes.getAsInt(EGL_YUV_NUMBER_OF_PLANES_EXT, 2);
- ASSERT(mPlaneCount <= 3);
- for (EGLint i = 0; i < mPlaneCount; i++)
- {
- // Fetch all the textures
- mPlanes[i].textureUnit = attributes.getAsInt(EGL_YUV_PLANE0_TEXTURE_UNIT_NV + i, -1);
- if (mPlanes[i].textureUnit != EGL_NONE)
- {
- mPlanes[i].texture =
- glState.getSamplerTexture(mPlanes[i].textureUnit, GL_TEXTURE_EXTERNAL_OES);
- ASSERT(mPlanes[i].texture != nullptr);
- }
- }
-
- // Bind them to the stream
- for (EGLint i = 0; i < mPlaneCount; i++)
- {
- if (mPlanes[i].textureUnit != EGL_NONE)
- {
- mPlanes[i].texture->bindStream(this);
- }
- }
- mConsumerType = ConsumerType::GLTextureYUV;
- }
-
- mContext = context;
- mState = EGL_STREAM_STATE_CONNECTING_KHR;
-
- return NoError();
-}
-
-Error Stream::createProducerD3D11TextureNV12(const AttributeMap &attributes)
-{
- ASSERT(mState == EGL_STREAM_STATE_CONNECTING_KHR);
- ASSERT(mConsumerType == ConsumerType::GLTextureYUV);
- ASSERT(mProducerType == ProducerType::NoProducer);
- ASSERT(mPlaneCount == 2);
-
- mProducerImplementation = mDisplay->getImplementation()->createStreamProducerD3DTextureNV12(
- mConsumerType, attributes);
- mProducerType = ProducerType::D3D11TextureNV12;
- mState = EGL_STREAM_STATE_EMPTY_KHR;
-
- return NoError();
-}
-
-// Called when the consumer of this stream starts using the stream
-Error Stream::consumerAcquire(const gl::Context *context)
-{
- ASSERT(mState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR ||
- mState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR);
- ASSERT(mConsumerType == ConsumerType::GLTextureRGB ||
- mConsumerType == ConsumerType::GLTextureYUV);
- ASSERT(mProducerType == ProducerType::D3D11TextureNV12);
-
- mState = EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR;
- mConsumerFrame++;
-
- // Bind the planes to the gl textures
- for (int i = 0; i < mPlaneCount; i++)
- {
- if (mPlanes[i].texture != nullptr)
- {
- ANGLE_TRY(mPlanes[i].texture->acquireImageFromStream(
- context, mProducerImplementation->getGLFrameDescription(i)));
- }
- }
-
- return NoError();
-}
-
-Error Stream::consumerRelease(const gl::Context *context)
-{
- ASSERT(mState == EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR ||
- mState == EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR);
- ASSERT(mConsumerType == ConsumerType::GLTextureRGB ||
- mConsumerType == ConsumerType::GLTextureYUV);
- ASSERT(mProducerType == ProducerType::D3D11TextureNV12);
-
- // Release the images
- for (int i = 0; i < mPlaneCount; i++)
- {
- if (mPlanes[i].texture != nullptr)
- {
- ANGLE_TRY(mPlanes[i].texture->releaseImageFromStream(context));
- }
- }
-
- return NoError();
-}
-
-bool Stream::isConsumerBoundToContext(const gl::Context *context) const
-{
- ASSERT(context != nullptr);
- return (context == mContext);
-}
-
-Error Stream::validateD3D11NV12Texture(void *texture) const
-{
- ASSERT(mConsumerType == ConsumerType::GLTextureRGB ||
- mConsumerType == ConsumerType::GLTextureYUV);
- ASSERT(mProducerType == ProducerType::D3D11TextureNV12);
- ASSERT(mProducerImplementation != nullptr);
-
- return mProducerImplementation->validateD3DNV12Texture(texture);
-}
-
-Error Stream::postD3D11NV12Texture(void *texture, const AttributeMap &attributes)
-{
- ASSERT(mConsumerType == ConsumerType::GLTextureRGB ||
- mConsumerType == ConsumerType::GLTextureYUV);
- ASSERT(mProducerType == ProducerType::D3D11TextureNV12);
-
- mProducerImplementation->postD3DNV12Texture(texture, attributes);
- mProducerFrame++;
-
- mState = EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR;
-
- return NoError();
-}
-
-// This is called when a texture object associated with this stream is destroyed. Even if multiple
-// textures are bound, one being destroyed invalidates the stream, so all the remaining textures
-// will be released and the stream will be invalidated.
-void Stream::releaseTextures()
-{
- for (auto &plane : mPlanes)
- {
- if (plane.texture != nullptr)
- {
- plane.texture->releaseStream();
- plane.texture = nullptr;
- }
- }
- mConsumerType = ConsumerType::NoConsumer;
- mProducerType = ProducerType::NoProducer;
- mState = EGL_STREAM_STATE_DISCONNECTED_KHR;
-}
-
-} // namespace egl