MythTV  master
mythvideooutopengl.cpp
Go to the documentation of this file.
1 // C/C++
2 #include <utility>
3 
4 // MythTV
5 #include "mythcontext.h"
6 #include "mythmainwindow.h"
7 #include "mythplayer.h"
8 #include "videodisplayprofile.h"
9 #include "osd.h"
10 #include "mythuihelper.h"
12 #include "opengl/mythopenglperf.h"
16 #include "opengl/mythopenglvideo.h"
18 
19 #define LOC QString("VidOutGL: ")
20 
21 // Complete list of formats supported for OpenGL 2.0 and higher and OpenGL ES3.X
23 {
29 };
30 
31 // OpenGL ES 2.0 and OpenGL1.X only allow luminance textures
33 {
35 };
36 
44 {
45  QStringList safe;
46  safe << "opengl" << "opengl-yv12";
47 
48  // all profiles can handle all software frames
49  (*Options.safe_renderers)["dummy"].append(safe);
50  if (Options.decoders->contains("ffmpeg"))
51  (*Options.safe_renderers)["ffmpeg"].append(safe);
52  if (Options.decoders->contains("mediacodec-dec"))
53  (*Options.safe_renderers)["mediacodec-dec"].append(safe);
54  if (Options.decoders->contains("vaapi-dec"))
55  (*Options.safe_renderers)["vaapi-dec"].append(safe);
56  if (Options.decoders->contains("vdpau-dec"))
57  (*Options.safe_renderers)["vdpau-dec"].append(safe);
58  if (Options.decoders->contains("nvdec-dec"))
59  (*Options.safe_renderers)["nvdec-dec"].append(safe);
60  if (Options.decoders->contains("vtb-dec"))
61  (*Options.safe_renderers)["vtb-dec"].append(safe);
62  if (Options.decoders->contains("v4l2-dec"))
63  (*Options.safe_renderers)["v4l2-dec"].append(safe);
64  if (Options.decoders->contains("mmal-dec"))
65  (*Options.safe_renderers)["mmal-dec"].append(safe);
66 
67  // OpenGL UYVY
68  Options.renderers->append("opengl");
69  Options.priorities->insert("opengl", 65);
70 
71  // OpenGL YV12
72  Options.renderers->append("opengl-yv12");
73  Options.priorities->insert("opengl-yv12", 65);
74 
75 #if defined(USING_VAAPI) || defined (USING_VTB) || defined (USING_MEDIACODEC) || defined (USING_VDPAU) || defined (USING_NVDEC) || defined (USING_MMAL) || defined (USING_V4L2PRIME) || defined (USING_EGL)
76  Options.renderers->append("opengl-hw");
77  (*Options.safe_renderers)["dummy"].append("opengl-hw");
78  Options.priorities->insert("opengl-hw", 110);
79 #endif
80 #ifdef USING_VAAPI
81  if (Options.decoders->contains("vaapi"))
82  (*Options.safe_renderers)["vaapi"].append("opengl-hw");
83 #endif
84 #ifdef USING_VTB
85  if (Options.decoders->contains("vtb"))
86  (*Options.safe_renderers)["vtb"].append("opengl-hw");
87 #endif
88 #ifdef USING_MEDIACODEC
89  if (Options.decoders->contains("mediacodec"))
90  (*Options.safe_renderers)["mediacodec"].append("opengl-hw");
91 #endif
92 #ifdef USING_VDPAU
93  if (Options.decoders->contains("vdpau"))
94  (*Options.safe_renderers)["vdpau"].append("opengl-hw");
95 #endif
96 #ifdef USING_NVDEC
97  if (Options.decoders->contains("nvdec"))
98  (*Options.safe_renderers)["nvdec"].append("opengl-hw");
99 #endif
100 #ifdef USING_MMAL
101  if (Options.decoders->contains("mmal"))
102  (*Options.safe_renderers)["mmal"].append("opengl-hw");
103 #endif
104 #ifdef USING_V4L2PRIME
105  if (Options.decoders->contains("v4l2"))
106  (*Options.safe_renderers)["v4l2"].append("opengl-hw");
107 #endif
108 #ifdef USING_EGL
109  if (Options.decoders->contains("drmprime"))
110  (*Options.safe_renderers)["drmprime"].append("opengl-hw");
111 #endif
112 }
113 
115  : MythVideoOutputGPU(MythRenderOpenGL::GetOpenGLRender(), Profile)
116 {
117  // Retrieve render context
119  if (!m_openglRender)
120  {
121  LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to retrieve OpenGL context");
122  return;
123  }
124 
126 
127  // Enable performance monitoring if requested
128  // This will report the execution time for the key GL code blocks
129  // N.B. 'Upload' should always be zero when using hardware decoding and direct
130  // rendering. Any copy cost for direct rendering will be included within 'Render'
131  if (VERBOSE_LEVEL_CHECK(VB_GPUVIDEO, LOG_INFO))
132  {
133  m_openGLPerf = new MythOpenGLPerf("GLVidPerf: ", { "Upload:", "Clear:", "Render:", "Flush:", "Swap:" });
134  if (!m_openGLPerf->isCreated())
135  {
136  delete m_openGLPerf;
137  m_openGLPerf = nullptr;
138  }
139  }
140 
141  // Disallow unsupported video texturing on GLES2/GL1.X
144  else
146 
147  if (!qobject_cast<MythOpenGLPainter*>(m_painter))
148  LOG(VB_GENERAL, LOG_ERR, LOC + "No OpenGL painter");
149 
150  // Create OpenGLVideo
152  if (m_video)
153  {
155  if (!m_video->IsValid())
156  {
157  LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to create valid OpenGL video");
158  delete m_video;
159  m_video = nullptr;
160  }
161  }
162 }
163 
165 {
166  if (m_openglRender)
167  {
169  delete m_openGLPerf;
171  }
172 }
173 
174 bool MythVideoOutputOpenGL::Init(const QSize VideoDim, const QSize VideoDispDim,
175  float Aspect, const QRect DisplayVisibleRect, MythCodecID CodecId)
176 {
177  if (!(m_openglRender && m_painter && m_video))
178  {
179  LOG(VB_GENERAL, LOG_ERR, LOC + "Fatal error");
180  return false;
181  }
182 
183  if (!gCoreContext->IsUIThread())
184  {
185  LOG(VB_GENERAL, LOG_ERR, LOC + "Cannot initialise OpenGL video from this thread");
186  return false;
187  }
188 
189  OpenGLLocker ctx_lock(m_openglRender);
190 
191  if (!MythVideoOutputGPU::Init(VideoDim, VideoDispDim, Aspect, DisplayVisibleRect, CodecId))
192  return false;
193 
194  // This works around an issue with VDPAU direct rendering using legacy drivers
196 
197  return true;
198 }
199 
202 {
203  QRect dvr = GetDisplayVisibleRect();
204 
205  MythMainWindow* mainwin = GetMythMainWindow();
206  if (!mainwin)
207  return dvr;
208  QSize size = mainwin->size();
209 
210  // may be called before m_window is initialised fully
211  if (dvr.isEmpty())
212  dvr = QRect(QPoint(0, 0), size);
213 
214  // If the Video screen mode has vertically less pixels
215  // than the GUI screen mode - OpenGL coordinate adjustments
216  // must be made to put the video at the top of the display
217  // area instead of at the bottom.
218  if (dvr.height() < size.height())
219  dvr.setTop(dvr.top() - size.height() + dvr.height());
220 
221  // If the Video screen mode has horizontally less pixels
222  // than the GUI screen mode - OpenGL width must be set
223  // as the higher GUI width so that the Program Guide
224  // invoked from playback is not cut off.
225  if (dvr.width() < size.width())
226  dvr.setWidth(size.width());
227 
228  return dvr;
229 }
230 
232 {
233  if (!m_openglRender)
234  return;
235 
236  // Lock
237  OpenGLLocker ctx_lock(m_openglRender);
238 
239  // Start the first timer
240  if (m_openGLPerf)
242 
243  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
244  m_openglRender->logDebugMarker(LOC + "PROCESS_FRAME_START");
245 
246  // Update software frames
248 
249  // Time texture update
250  if (m_openGLPerf)
252 
253  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
254  m_openglRender->logDebugMarker(LOC + "PROCESS_FRAME_END");
255 }
256 
258 {
259  if (!m_openglRender)
260  return;
261 
262  // Input changes need to be handled in ProcessFrame
263  if (m_newCodecId != kCodec_NONE)
264  return;
265 
266  // Lock
267  OpenGLLocker ctx_lock(m_openglRender);
268 
269  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
270  m_openglRender->logDebugMarker(LOC + "RENDER_FRAME_START");
271 
272  // If process frame has not been called (double rate hardware deint), then
273  // we need to start the first 2 performance timers here
274  if (m_openGLPerf)
275  {
277  {
280  }
281  }
282 
284 
285  // Clear framebuffer
286  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
287  m_openglRender->logDebugMarker(LOC + "CLEAR_START");
288 
289  uint8_t gray = m_dbLetterboxColour == kLetterBoxColour_Gray25 ? 64 : 0;
290 
291  if (!Frame || Frame->m_dummy || ((m_openglRender->GetExtraFeatures() & kGLTiled) != 0))
292  {
293  m_openglRender->SetBackground(gray, gray, gray, 255);
295  }
296  // Avoid clearing the framebuffer if it will be entirely overwritten by video
297  else if (!VideoIsFullScreen())
298  {
299  if (IsEmbedding())
300  {
301  // use MythRenderOpenGL rendering as it will clear to the appropriate 'black level'
302  m_openglRender->ClearRect(nullptr, GetWindowRect(), gray);
303  }
304  else
305  {
306  // in the vast majority of cases it is significantly quicker to just
307  // clear the unused portions of the screen
308  QRegion toclear = GetBoundingRegion();
309  for (auto rect : qAsConst(toclear))
310  m_openglRender->ClearRect(nullptr, rect, gray);
311  }
312  }
313 
314  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
315  m_openglRender->logDebugMarker(LOC + "CLEAR_END");
316 
317  // Time framebuffer clearing
318  if (m_openGLPerf)
320 
321  // Render
323 
324  // Time rendering
325  if (m_openGLPerf)
327 
328  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
329  m_openglRender->logDebugMarker(LOC + "RENDER_FRAME_END");
330 }
331 
333 {
334  // Flush and time
336  if (m_openGLPerf)
338 }
339 
341 {
342  if (!m_openglRender || IsErrored())
343  return;
344 
346 
347  if (VERBOSE_LEVEL_CHECK(VB_GPU, LOG_INFO))
348  m_openglRender->logDebugMarker(LOC + "SHOW");
349 
351 
352  if (m_openGLPerf)
353  {
354  // Time buffer swap and log
355  // Results will normally be available on the next pass - and we will typically
356  // test every other frame as a result to avoid blocking in the driver.
357  // With the default of averaging over 30 samples this should give a 30 sample
358  // average over 60 frames
361  }
362 
364 }
365 
368 QStringList MythVideoOutputOpenGL::GetAllowedRenderers(MythCodecID CodecId, QSize /*VideoDim*/)
369 {
370  QStringList allowed;
371 
372  if (MythRenderOpenGL::GetOpenGLRender() == nullptr)
373  return allowed;
374 
375  if (codec_sw_copy(CodecId))
376  {
377  allowed << "opengl" << "opengl-yv12";
378  return allowed;
379  }
380 
381  VideoFrameType format = FMT_NONE;
382  if (codec_is_vaapi(CodecId))
383  format = FMT_VAAPI;
384  else if (codec_is_vdpau(CodecId))
385  format = FMT_VDPAU;
386  else if (codec_is_nvdec(CodecId))
387  format = FMT_NVDEC;
388  else if (codec_is_vtb(CodecId))
389  format = FMT_VTB;
390  else if (codec_is_mmal(CodecId))
391  format = FMT_MMAL;
392  else if (codec_is_v4l2(CodecId) || codec_is_drmprime(CodecId))
393  format = FMT_DRMPRIME;
394  else if (codec_is_mediacodec(CodecId))
395  format = FMT_MEDIACODEC;
396 
397  if (FMT_NONE == format)
398  return allowed;
399 
400  allowed += MythOpenGLInterop::GetAllowedRenderers(format);
401  return allowed;
402 }
FMT_MEDIACODEC
@ FMT_MEDIACODEC
Definition: mythframe.h:56
MythVideoBounds::IsEmbedding
bool IsEmbedding(void) const
Definition: mythvideobounds.h:68
MythVideoOutput::m_dbLetterboxColour
LetterBoxColour m_dbLetterboxColour
Definition: mythvideoout.h:95
FMT_YUV420P10
@ FMT_YUV420P10
Definition: mythframe.h:21
MythRenderOpenGL::SetBackground
void SetBackground(uint8_t Red, uint8_t Green, uint8_t Blue, uint8_t Alpha)
Definition: mythrenderopengl.cpp:616
FMT_YUV420P16
@ FMT_YUV420P16
Definition: mythframe.h:24
FMT_VTB
@ FMT_VTB
Definition: mythframe.h:57
RenderOptions::renderers
QStringList * renderers
Definition: videodisplayprofile.h:28
FMT_YUV420P14
@ FMT_YUV420P14
Definition: mythframe.h:23
MythRenderOpenGL::ClearFramebuffer
void ClearFramebuffer(void)
Definition: mythrenderopengl.cpp:802
kCodec_NONE
@ kCodec_NONE
Definition: mythcodecid.h:14
FMT_DRMPRIME
@ FMT_DRMPRIME
Definition: mythframe.h:59
FMT_YUV444P10
@ FMT_YUV444P10
Definition: mythframe.h:41
MythVideoOutputOpenGL::EndFrame
void EndFrame() override
Definition: mythvideooutopengl.cpp:340
FMT_YUV422P14
@ FMT_YUV422P14
Definition: mythframe.h:36
mythopenglinterop.h
MythVideoBounds::GetDisplayVisibleRect
QRect GetDisplayVisibleRect(void) const
Definition: mythvideobounds.h:73
MythVideoGPU::IsValid
bool IsValid() const
Definition: mythvideogpu.cpp:55
Frame
Definition: zmdefines.h:94
MythVideoOutputOpenGL::Init
bool Init(QSize VideoDim, QSize VideoDispDim, float Aspect, QRect DisplayVisibleRect, MythCodecID CodecId) override
Definition: mythvideooutopengl.cpp:174
FMT_P010
@ FMT_P010
Definition: mythframe.h:49
MythRenderOpenGL::logDebugMarker
void logDebugMarker(const QString &Message)
Definition: mythrenderopengl.cpp:193
codec_is_nvdec
#define codec_is_nvdec(id)
Definition: mythcodecid.h:328
MythRenderOpenGL::ClearRect
void ClearRect(QOpenGLFramebufferObject *Target, QRect Area, int Color)
An optimised method to clear a QRect to the given color.
Definition: mythrenderopengl.cpp:935
MythOpenGLPerf::GetTimersRunning
int GetTimersRunning(void) const
Definition: mythopenglperf.cpp:34
FrameScanType
FrameScanType
Definition: videoouttypes.h:95
MythVideoOutputOpenGL::GetRenderOptions
static void GetRenderOptions(RenderOptions &Options)
Generate the list of available OpenGL profiles.
Definition: mythvideooutopengl.cpp:43
osd.h
MythCoreContext::IsUIThread
bool IsUIThread(void)
Definition: mythcorecontext.cpp:1357
codec_is_vdpau
#define codec_is_vdpau(id)
Definition: mythcodecid.h:298
FMT_YUV422P
@ FMT_YUV422P
Definition: mythframe.h:32
codec_is_mmal
#define codec_is_mmal(id)
Definition: mythcodecid.h:341
MythVideoOutput::m_renderFrameTypes
VideoFrameTypes * m_renderFrameTypes
Definition: mythvideoout.h:104
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
MythVideoOutputGPU::m_profile
QString m_profile
Definition: mythvideooutgpu.h:66
mythplayer.h
kGLLegacyTextures
@ kGLLegacyTextures
Definition: mythrenderopengl.h:47
MythVideoOutputOpenGL::MythVideoOutputOpenGL
MythVideoOutputOpenGL(QString &Profile)
Definition: mythvideooutopengl.cpp:114
MythVideoOutputOpenGL::m_openglRender
MythRenderOpenGL * m_openglRender
Definition: mythvideooutopengl.h:42
MythOpenGLPerf::LogSamples
void LogSamples(void)
Definition: mythopenglperf.cpp:48
mythopenglvideo.h
FMT_YUV444P14
@ FMT_YUV444P14
Definition: mythframe.h:43
MythVideoOutputGPU::Init
bool Init(QSize VideoDim, QSize VideoDispDim, float Aspect, QRect DisplayVisibleRect, MythCodecID CodecId) override
Definition: mythvideooutgpu.cpp:230
FMT_YUV444P
@ FMT_YUV444P
Definition: mythframe.h:39
FMT_NONE
@ FMT_NONE
Definition: mythframe.h:17
MythVideoOutputOpenGL::GetDisplayVisibleRectAdj
QRect GetDisplayVisibleRectAdj() override
Adjust the display rectangle for OpenGL coordinates in some cases.
Definition: mythvideooutopengl.cpp:201
MythCodecID
MythCodecID
Definition: mythcodecid.h:11
videodisplayprofile.h
mythrenderopengl.h
RenderOptions::decoders
QStringList * decoders
Definition: videodisplayprofile.h:32
codec_is_mediacodec
#define codec_is_mediacodec(id)
Definition: mythcodecid.h:323
RenderOptions
Definition: videodisplayprofile.h:27
MythVideoOutputOpenGL::GetAllowedRenderers
static QStringList GetAllowedRenderers(MythCodecID CodecId, QSize VideoDim)
Generate a list of supported OpenGL profiles.
Definition: mythvideooutopengl.cpp:368
MythVideoOutputOpenGL::s_openglFrameTypesLegacy
static VideoFrameTypes s_openglFrameTypesLegacy
Definition: mythvideooutopengl.h:29
MythRenderOpenGL::Flush
void Flush(void)
Definition: mythrenderopengl.cpp:595
FMT_YUV444P9
@ FMT_YUV444P9
Definition: mythframe.h:40
FMT_YV12
@ FMT_YV12
Definition: mythframe.h:19
MythOpenGLInterop::GetAllowedRenderers
static QStringList GetAllowedRenderers(VideoFrameType Format)
Definition: mythopenglinterop.cpp:51
FMT_YUV422P10
@ FMT_YUV422P10
Definition: mythframe.h:34
FMT_YUV444P16
@ FMT_YUV444P16
Definition: mythframe.h:44
MythVideoOutputOpenGL::m_openGLPerf
MythOpenGLPerf * m_openGLPerf
Definition: mythvideooutopengl.h:43
VideoFrameTypes
std::vector< VideoFrameType > VideoFrameTypes
Definition: mythframe.h:78
MythVideoOutputGPU::m_newCodecId
MythCodecID m_newCodecId
Definition: mythvideooutgpu.h:60
MythVideoGPU::SetViewportRect
void SetViewportRect(QRect DisplayVisibleRect)
Definition: mythvideogpu.cpp:112
FMT_YUV420P12
@ FMT_YUV420P12
Definition: mythframe.h:22
RenderOptions::safe_renderers
QMap< QString, QStringList > * safe_renderers
Definition: videodisplayprofile.h:29
LOC
#define LOC
Definition: mythvideooutopengl.cpp:19
MythRenderOpenGL::swapBuffers
void swapBuffers()
Definition: mythrenderopengl.cpp:517
MythRenderOpenGL::makeCurrent
void makeCurrent()
Definition: mythrenderopengl.cpp:564
mythopenglperf.h
MythRenderOpenGL::GetExtraFeatures
int GetExtraFeatures(void) const
Definition: mythrenderopengl.cpp:461
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:60
MythVideoOutputGPU::PrepareFrame
void PrepareFrame(MythVideoFrame *Frame, FrameScanType Scan) override
Definition: mythvideooutgpu.cpp:529
MythOpenGLPerf
A simple overload of QOpenGLTimeMonitor to record and log OpenGL execution intervals.
Definition: mythopenglperf.h:38
FMT_YUV444P12
@ FMT_YUV444P12
Definition: mythframe.h:42
codec_sw_copy
#define codec_sw_copy(id)
Definition: mythcodecid.h:349
MythVideoOutput::IsErrored
bool IsErrored() const
Definition: mythvideoout.cpp:290
MythVideoOutputOpenGL::PrepareFrame
void PrepareFrame(MythVideoFrame *Frame, FrameScanType Scan) override
Definition: mythvideooutopengl.cpp:231
FMT_NVDEC
@ FMT_NVDEC
Definition: mythframe.h:58
MythRenderOpenGL::doneCurrent
void doneCurrent()
Definition: mythrenderopengl.cpp:572
codec_is_drmprime
#define codec_is_drmprime(id)
Definition: mythcodecid.h:296
mythuihelper.h
mythpainteropengl.h
MythRenderOpenGL
Definition: mythrenderopengl.h:99
FMT_YUV422P9
@ FMT_YUV422P9
Definition: mythframe.h:33
VERBOSE_LEVEL_CHECK
#define VERBOSE_LEVEL_CHECK(_MASK_, _LEVEL_)
Definition: mythlogging.h:14
FMT_YUV420P9
@ FMT_YUV420P9
Definition: mythframe.h:20
MythRenderOpenGL::BindFramebuffer
void BindFramebuffer(QOpenGLFramebufferObject *Framebuffer)
Definition: mythrenderopengl.cpp:782
MythOpenGLVideo
MythOpenGLVideo is responsible for displaying video frames on screen using OpenGL.
Definition: mythopenglvideo.h:25
MythVideoBounds::GetBoundingRegion
QRegion GetBoundingRegion(void) const
Return the region of DisplayVisibleRect that lies outside of DisplayVideoRect.
Definition: mythvideobounds.cpp:754
FMT_VDPAU
@ FMT_VDPAU
Definition: mythframe.h:52
FMT_YUV422P16
@ FMT_YUV422P16
Definition: mythframe.h:37
kLetterBoxColour_Gray25
@ kLetterBoxColour_Gray25
Definition: videoouttypes.h:90
MythVideoOutputOpenGL::RenderFrame
void RenderFrame(MythVideoFrame *Frame, FrameScanType Scan) override
Definition: mythvideooutopengl.cpp:257
codec_is_vaapi
#define codec_is_vaapi(id)
Definition: mythcodecid.h:311
MythVideoOutputGPU::RenderFrame
void RenderFrame(MythVideoFrame *Frame, FrameScanType Scan) override
Definition: mythvideooutgpu.cpp:550
FMT_YUV422P12
@ FMT_YUV422P12
Definition: mythframe.h:35
MythRenderOpenGL::GetOpenGLRender
static MythRenderOpenGL * GetOpenGLRender(void)
Definition: mythrenderopengl.cpp:66
mythcontext.h
GetMythMainWindow
MythMainWindow * GetMythMainWindow(void)
Definition: mythmainwindow.cpp:108
codec_is_v4l2
#define codec_is_v4l2(id)
Definition: mythcodecid.h:338
mythvideooutopengl.h
MythVideoOutputOpenGL::~MythVideoOutputOpenGL
~MythVideoOutputOpenGL() override
Definition: mythvideooutopengl.cpp:164
MythVideoOutputGPU
Common code shared between GPU accelerated sub-classes (e.g. OpenGL)
Definition: mythvideooutgpu.h:12
mythcodeccontext.h
FMT_MMAL
@ FMT_MMAL
Definition: mythframe.h:55
VideoFrameType
VideoFrameType
Definition: mythframe.h:16
FMT_VAAPI
@ FMT_VAAPI
Definition: mythframe.h:53
codec_is_vtb
#define codec_is_vtb(id)
Definition: mythcodecid.h:333
MythVideoOutputGPU::m_video
MythVideoGPU * m_video
Definition: mythvideooutgpu.h:58
MythVideoOutputGPU::m_painter
MythPainterGPU * m_painter
Definition: mythvideooutgpu.h:59
MythVideoBounds::GetWindowRect
QRect GetWindowRect(void) const
Definition: mythvideobounds.h:74
MythVideoFrame
Definition: mythframe.h:83
FMT_NV12
@ FMT_NV12
Definition: mythframe.h:48
MythOpenGLPerf::RecordSample
void RecordSample(void)
Definition: mythopenglperf.cpp:39
FMT_P016
@ FMT_P016
Definition: mythframe.h:50
mythmainwindow.h
MythVideoBounds::VideoIsFullScreen
bool VideoIsFullScreen(void) const
Check whether the video display rect covers the entire window/framebuffer.
Definition: mythvideobounds.cpp:742
kGLTiled
@ kGLTiled
Definition: mythrenderopengl.h:46
MythVideoOutputOpenGL::RenderEnd
void RenderEnd() override
Definition: mythvideooutopengl.cpp:332
MythMainWindow
Definition: mythmainwindow.h:35
MythVideoOutput::m_videoColourSpace
MythVideoColourSpace m_videoColourSpace
Definition: mythvideoout.h:94
RenderOptions::priorities
QMap< QString, uint > * priorities
Definition: videodisplayprofile.h:31
MythVideoOutputOpenGL::s_openglFrameTypes
static VideoFrameTypes s_openglFrameTypes
Definition: mythvideooutopengl.h:28
OpenGLLocker
Definition: mythrenderopengl.h:255