summaryrefslogtreecommitdiffstats
path: root/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/winrt/qwinrtabstractvideorenderercontrol.h')
-rw-r--r--src/plugins/winrt/qwinrtabstractvideorenderercontrol.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h
index ed8b76a6e..70227c53c 100644
--- a/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h
+++ b/src/plugins/winrt/qwinrtabstractvideorenderercontrol.h
@@ -40,6 +40,8 @@
#include <QtMultimedia/QVideoRendererControl>
#include <QtMultimedia/QVideoSurfaceFormat>
+#include <qt_windows.h>
+
struct ID3D11Device;
struct ID3D11Texture2D;
@@ -53,6 +55,11 @@ public:
explicit QWinRTAbstractVideoRendererControl(const QSize &size, QObject *parent = 0);
~QWinRTAbstractVideoRendererControl();
+ enum BlitMode {
+ DirectVideo,
+ MediaFoundation
+ };
+
QAbstractVideoSurface *surface() const Q_DECL_OVERRIDE;
void setSurface(QAbstractVideoSurface *surface) Q_DECL_OVERRIDE;
@@ -63,7 +70,11 @@ public:
void setActive(bool active);
+ BlitMode blitMode() const;
+ void setBlitMode(BlitMode mode);
+
virtual bool render(ID3D11Texture2D *texture) = 0;
+ virtual bool dequeueFrame(QVideoFrame *frame);
static ID3D11Device *d3dDevice();
@@ -74,12 +85,29 @@ private slots:
void syncAndRender();
private:
+ void textureToFrame();
Q_INVOKABLE void present();
QScopedPointer<QWinRTAbstractVideoRendererControlPrivate> d_ptr;
Q_DECLARE_PRIVATE(QWinRTAbstractVideoRendererControl)
};
+class CriticalSectionLocker
+{
+public:
+ CriticalSectionLocker(CRITICAL_SECTION *section)
+ : m_section(section)
+ {
+ EnterCriticalSection(m_section);
+ }
+ ~CriticalSectionLocker()
+ {
+ LeaveCriticalSection(m_section);
+ }
+private:
+ CRITICAL_SECTION *m_section;
+};
+
QT_END_NAMESPACE
#endif // QWINRTABSTRACTVIDEORENDERERCONTROL_H