4#ifndef EVRD3DPRESENTENGINE_H
5#define EVRD3DPRESENTENGINE_H
20#include <QVideoFrameFormat>
21#include <private/qcomptr_p.h>
27struct IDirect3DDevice9Ex;
28struct IDirect3DDeviceManager9;
29struct IDirect3DSurface9;
30struct IDirect3DTexture9;
41{ 0xb0bb83cc, 0xf10f, 0x4e2e, { 0xaa, 0x2b, 0x29, 0xea, 0x5e, 0x92, 0xef, 0x85 } };
55 Q_DISABLE_COPY(EGLWrapper)
59 __eglMustCastToProperFunctionPointerType
getProcAddress(
const char *procname);
66 typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP EglGetProcAddress)(
const char *procname);
72 EglGetProcAddress m_eglGetProcAddress;
73 EglCreatePbufferSurface m_eglCreatePbufferSurface;
74 EglDestroySurface m_eglDestroySurface;
75 EglBindTexImage m_eglBindTexImage;
76 EglReleaseTexImage m_eglReleaseTexImage;
83struct WglNvDxInterop {
84 HANDLE (WINAPI* wglDXOpenDeviceNV) (
void* dxDevice);
85 BOOL (WINAPI* wglDXCloseDeviceNV) (
HANDLE hDevice);
87 BOOL (WINAPI* wglDXSetResourceShareHandleNV) (
void *dxResource,
HANDLE shareHandle);
90 BOOL (WINAPI* wglDXUnregisterObjectNV) (
HANDLE hDevice,
HANDLE hObject);
92 static const int WGL_ACCESS_READ_ONLY_NV = 0;
119 static const int PRESENTER_BUFFER_COUNT = 3;
124 std::pair<IMFSample *, HANDLE> m_sampleTextureHandle[PRESENTER_BUFFER_COUNT] = {};
126 UINT m_deviceResetToken;
127 D3DDISPLAYMODE m_displayMode;
129 ComPtr<IDirect3D9Ex> m_D3D9;
130 ComPtr<IDirect3DDevice9Ex> m_device;
131 ComPtr<IDirect3DDeviceManager9> m_devices;
135 QPointer<QVideoSink> m_sink;
136 bool m_useTextureRendering =
false;
138 WglNvDxInterop m_wglNvDxInterop;
142 unsigned int updateTexture(IDirect3DSurface9 *
src);
144 OpenGLResources *m_glResources;
145 IDirect3DTexture9 *m_texture;
148 friend class IMFSampleVideoBuffer;
void setSink(QVideoSink *sink)
HRESULT createVideoSamples(IMFMediaType *format, QList< ComPtr< IMFSample > > &videoSampleQueue, QSize frameSize)
QVideoFrameFormat videoSurfaceFormat() const
HRESULT getService(REFGUID guidService, REFIID riid, void **ppv)
virtual ~D3DPresentEngine()
D3DPresentEngine(QVideoSink *sink)
HRESULT checkFormat(D3DFORMAT format)
QVideoFrame makeVideoFrame(const ComPtr< IMFSample > &sample)
The QVideoFrame class represents a frame of video data.
The QVideoSink class represents a generic sink for video data.
static QT_END_NAMESPACE const GUID MFSamplePresenter_SampleCounter
Combined button and popup list for selecting options.
typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC)(EGLint max_devices
typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
void const EGLint * attrib_list
typedef GLint(GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC)(GLuint program
GLenum GLenum GLsizei count
typedef GLenum(GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void)
GLint GLsizei GLsizei GLenum format
const void * getProcAddress
GLsizei GLenum GLboolean sink
static constexpr QSize frameSize(const T &frame)
IUIViewSettingsInterop __RPC__in REFIID riid
IUIViewSettingsInterop __RPC__in REFIID __RPC__deref_out_opt void ** ppv