mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-01-15 06:20:41 +00:00
b28fabcbf6
For DXGIYCbCrTextureHostD3D11, gecko use 3 separated d3d11 A8 textures to represent the Y, Cb and Cr data. This patch try to use EGL stream to convert the d3d11 texture to gl handle. Then, WR could use the converted gl handle to show the video data without buffer copy operation. MozReview-Commit-ID: C9w9rzufTOj
102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef MOZILLA_GFX_RENDERD3D11TEXTUREHOSTOGL_H
|
|
#define MOZILLA_GFX_RENDERD3D11TEXTUREHOSTOGL_H
|
|
|
|
#include "RenderTextureHostOGL.h"
|
|
#include "GLTypes.h"
|
|
|
|
struct ID3D11Texture2D;
|
|
struct IDXGIKeyedMutex;
|
|
|
|
namespace mozilla {
|
|
|
|
namespace wr {
|
|
|
|
class RenderDXGITextureHostOGL final : public RenderTextureHostOGL
|
|
{
|
|
public:
|
|
explicit RenderDXGITextureHostOGL(WindowsHandle aHandle,
|
|
gfx::SurfaceFormat aFormat,
|
|
gfx::IntSize aSize);
|
|
|
|
virtual void SetGLContext(gl::GLContext* aContext) override;
|
|
|
|
virtual bool Lock() override;
|
|
virtual void Unlock() override;
|
|
|
|
virtual gfx::IntSize GetSize(uint8_t aChannelIndex) const;
|
|
virtual GLuint GetGLHandle(uint8_t aChannelIndex) const;
|
|
|
|
private:
|
|
virtual ~RenderDXGITextureHostOGL();
|
|
|
|
bool EnsureLockable();
|
|
|
|
void DeleteTextureHandle();
|
|
|
|
RefPtr<gl::GLContext> mGL;
|
|
|
|
WindowsHandle mHandle;
|
|
RefPtr<ID3D11Texture2D> mTexture;
|
|
RefPtr<IDXGIKeyedMutex> mKeyedMutex;
|
|
|
|
EGLSurface mSurface;
|
|
EGLStreamKHR mStream;
|
|
|
|
// We could use NV12 format for this texture. So, we might have 2 gl texture
|
|
// handles for Y and CbCr data.
|
|
GLuint mTextureHandle[2];
|
|
|
|
gfx::SurfaceFormat mFormat;
|
|
gfx::IntSize mSize;
|
|
|
|
bool mLocked;
|
|
};
|
|
|
|
class RenderDXGIYCbCrTextureHostOGL final : public RenderTextureHostOGL
|
|
{
|
|
public:
|
|
explicit RenderDXGIYCbCrTextureHostOGL(WindowsHandle (&aHandles)[3],
|
|
gfx::IntSize aSize);
|
|
|
|
virtual void SetGLContext(gl::GLContext* aContext) override;
|
|
|
|
virtual bool Lock() override;
|
|
virtual void Unlock() override;
|
|
|
|
virtual gfx::IntSize GetSize(uint8_t aChannelIndex) const;
|
|
virtual GLuint GetGLHandle(uint8_t aChannelIndex) const;
|
|
|
|
private:
|
|
virtual ~RenderDXGIYCbCrTextureHostOGL();
|
|
|
|
bool EnsureLockable();
|
|
|
|
void DeleteTextureHandle();
|
|
|
|
RefPtr<gl::GLContext> mGL;
|
|
|
|
WindowsHandle mHandles[3];
|
|
RefPtr<ID3D11Texture2D> mTextures[3];
|
|
RefPtr<IDXGIKeyedMutex> mKeyedMutexs[3];
|
|
|
|
EGLSurface mSurfaces[3];
|
|
EGLStreamKHR mStreams[3];
|
|
|
|
// The gl handles for Y, Cb and Cr data.
|
|
GLuint mTextureHandles[3];
|
|
|
|
gfx::IntSize mSize;
|
|
|
|
bool mLocked;
|
|
};
|
|
|
|
} // namespace wr
|
|
} // namespace mozilla
|
|
|
|
#endif // MOZILLA_GFX_RENDERD3D11TEXTUREHOSTOGL_H
|