MythTV master
mythvideotextureopengl.h
Go to the documentation of this file.
1#ifndef MYTHVIDEOTEXTURE_H
2#define MYTHVIDEOTEXTURE_H
3
4// MythTV
5#include "libmythbase/mythconfig.h"
7#include "mythavutil.h"
8#include "mythframe.h"
9
10// FFmpeg
11extern "C" {
12#include "libavutil/pixfmt.h"
13}
14
15// Std
16#include <vector>
17
18class QMatrix4x4;
20using VideoFramebuffer = std::pair<QOpenGLFramebufferObject*, MythVideoTextureOpenGL*>;
21
23{
24 public:
25 explicit MythVideoTextureOpenGL(GLuint Texture);
26 static std::vector<MythVideoTextureOpenGL*> CreateTextures(MythRenderOpenGL* Context,
27 VideoFrameType Type,
29 std::vector<QSize> Sizes,
30 GLenum Target = QOpenGLTexture::Target2D);
31 static void UpdateTextures(MythRenderOpenGL* Context, const MythVideoFrame *Frame,
32 const std::vector<MythVideoTextureOpenGL*> &Textures);
33 static void DeleteTexture (MythRenderOpenGL* Context, MythVideoTextureOpenGL *Texture);
34 static void DeleteTextures(MythRenderOpenGL* Context, std::vector<MythVideoTextureOpenGL*> &Textures);
35 static void SetTextureFilters(MythRenderOpenGL* Context, const std::vector<MythVideoTextureOpenGL*> &Textures,
36 QOpenGLTexture::Filter Filter,
37 QOpenGLTexture::WrapMode Wrap = QOpenGLTexture::ClampToEdge);
38 static MythVideoTextureOpenGL* CreateTexture(MythRenderOpenGL *Context, QSize Size,
39 GLenum Target = QOpenGLTexture::Target2D,
40 QOpenGLTexture::PixelType PixelType = QOpenGLTexture::UInt8,
41 QOpenGLTexture::PixelFormat PixelFormat = QOpenGLTexture::RGBA,
42 QOpenGLTexture::TextureFormat Format = QOpenGLTexture::NoFormat,
43 QOpenGLTexture::Filter Filter = QOpenGLTexture::Linear,
44 QOpenGLTexture::WrapMode Wrap = QOpenGLTexture::ClampToEdge);
46 QSize Size, bool HighPrecision = true);
47 ~MythVideoTextureOpenGL() override = default;
48
49 public:
50 bool m_valid { false };
51 QOpenGLTexture::Filter m_filter { QOpenGLTexture::Linear };
56 bool m_allowGLSLDeint { false };
57#if CONFIG_MEDIACODEC
58 QMatrix4x4 *m_transform { nullptr };
59#endif
61
62 protected:
63 explicit MythVideoTextureOpenGL(QOpenGLTexture* Texture);
64
65 private:
66 static std::vector<MythVideoTextureOpenGL*> CreateHardwareTextures(MythRenderOpenGL* Context,
68 std::vector<QSize> Sizes, GLenum Target);
69 static std::vector<MythVideoTextureOpenGL*> CreateSoftwareTextures(MythRenderOpenGL* Context,
71 std::vector<QSize> Sizes, GLenum Target);
72
73 Q_DISABLE_COPY(MythVideoTextureOpenGL)
74 static void YV12ToYV12 (MythRenderOpenGL *Context, const MythVideoFrame *Frame,
75 MythVideoTextureOpenGL* Texture, uint Plane);
76 static void YV12ToYUYV (const MythVideoFrame *Frame, MythVideoTextureOpenGL* Texture);
77 static void NV12ToNV12 (MythRenderOpenGL *Context, const MythVideoFrame *Frame,
78 MythVideoTextureOpenGL* Texture, uint Plane);
79 static bool CreateBuffer (MythVideoTextureOpenGL* Texture, int Size);
80};
81
82#endif
static void SetTextureFilters(MythRenderOpenGL *Context, const std::vector< MythVideoTextureOpenGL * > &Textures, QOpenGLTexture::Filter Filter, QOpenGLTexture::WrapMode Wrap=QOpenGLTexture::ClampToEdge)
MythVideoTextureOpenGL(GLuint Texture)
static std::vector< MythVideoTextureOpenGL * > CreateTextures(MythRenderOpenGL *Context, VideoFrameType Type, VideoFrameType Format, std::vector< QSize > Sizes, GLenum Target=QOpenGLTexture::Target2D)
Create a set of textures suitable for the given Type and Format.
static VideoFramebuffer CreateVideoFrameBuffer(MythRenderOpenGL *Context, VideoFrameType OutputType, QSize Size, bool HighPrecision=true)
~MythVideoTextureOpenGL() override=default
static std::vector< MythVideoTextureOpenGL * > CreateHardwareTextures(MythRenderOpenGL *Context, VideoFrameType Type, VideoFrameType Format, std::vector< QSize > Sizes, GLenum Target)
Create a set of hardware textures suitable for the given format.
static void DeleteTextures(MythRenderOpenGL *Context, std::vector< MythVideoTextureOpenGL * > &Textures)
static MythVideoTextureOpenGL * CreateTexture(MythRenderOpenGL *Context, QSize Size, GLenum Target=QOpenGLTexture::Target2D, QOpenGLTexture::PixelType PixelType=QOpenGLTexture::UInt8, QOpenGLTexture::PixelFormat PixelFormat=QOpenGLTexture::RGBA, QOpenGLTexture::TextureFormat Format=QOpenGLTexture::NoFormat, QOpenGLTexture::Filter Filter=QOpenGLTexture::Linear, QOpenGLTexture::WrapMode Wrap=QOpenGLTexture::ClampToEdge)
Create and initialise a MythVideoTexture that is backed by a QOpenGLTexture.
static void YV12ToYUYV(const MythVideoFrame *Frame, MythVideoTextureOpenGL *Texture)
Copy YV12 frame data to a YUYV texture.
QOpenGLTexture::Filter m_filter
static void NV12ToNV12(MythRenderOpenGL *Context, const MythVideoFrame *Frame, MythVideoTextureOpenGL *Texture, uint Plane)
Copy NV12 video frame data to 'NV12' textures.
static bool CreateBuffer(MythVideoTextureOpenGL *Texture, int Size)
Create a data buffer for holding CPU side texture data.
static void DeleteTexture(MythRenderOpenGL *Context, MythVideoTextureOpenGL *Texture)
static void YV12ToYV12(MythRenderOpenGL *Context, const MythVideoFrame *Frame, MythVideoTextureOpenGL *Texture, uint Plane)
Copy YV12 frame data to 'YV12' textures.
static std::vector< MythVideoTextureOpenGL * > CreateSoftwareTextures(MythRenderOpenGL *Context, VideoFrameType Type, VideoFrameType Format, std::vector< QSize > Sizes, GLenum Target)
Create a set of OpenGL textures to represent the given Format.
static void UpdateTextures(MythRenderOpenGL *Context, const MythVideoFrame *Frame, const std::vector< MythVideoTextureOpenGL * > &Textures)
Update the contents of the given Textures for data held in Frame.
unsigned int uint
Definition: freesurround.h:24
VideoFrameType
Definition: mythframe.h:20
@ FMT_NONE
Definition: mythframe.h:21
std::pair< QOpenGLFramebufferObject *, MythVideoTextureOpenGL * > VideoFramebuffer