From 98fbbf3af12def9ad0fb1daba9728761859a943b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 13 Mar 2013 15:13:17 +0100 Subject: Added nativemedia for video playback. See the test.qml in src/imports/nativemedia for usage. --- src/imports/nativemedia/omxnode.h | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/imports/nativemedia/omxnode.h (limited to 'src/imports/nativemedia/omxnode.h') diff --git a/src/imports/nativemedia/omxnode.h b/src/imports/nativemedia/omxnode.h new file mode 100644 index 0000000..976830c --- /dev/null +++ b/src/imports/nativemedia/omxnode.h @@ -0,0 +1,110 @@ +#ifndef OMXNODE_H +#define OMXNODE_H + +#include + +#include +#include + +#include "SurfaceTexture.h" + +#include "omxplayer.h" + +class QSGTexture; + +struct OmxTextureState { + OmxPlayer *player; +}; + +class OmxNode : public QSGGeometryNode +{ +public: + OmxNode(OmxPlayer *player); + ~OmxNode(); + + void preprocess(); + void updateTexture(); + + void setRect(const QRectF &rect); + inline void setRect(qreal x, qreal y, qreal w, qreal h) { setRect(QRectF(x, y, w, h)); } + + bool isTextureUpdated() const { return m_textureUpdated; } + void setTextureUpdated(bool textureUpdated) { m_textureUpdated = textureUpdated; } + +private: + bool m_textureUpdated; + + QSGGeometry m_geometry; + QSGSimpleMaterial *m_textureMaterial; + + QRectF m_rect; + OmxPlayer *m_player; + bool m_initialized; +}; + +class OmxTextureMaterial : public QSGSimpleMaterialShader +{ + QSG_DECLARE_SIMPLE_SHADER(OmxTextureMaterial, OmxTextureState) +public: + QList attributes() const; + + void updateState(const OmxTextureState *newState, const OmxTextureState *oldState); + +protected: + const char *vertexShader() const; + const char *fragmentShader() const; +}; + +class OmxItem : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged FINAL) + Q_PROPERTY(int sourceWidth READ sourceWidth NOTIFY sourceWidthChanged FINAL) + Q_PROPERTY(int sourceHeight READ sourceHeight NOTIFY sourceHeightChanged FINAL) + Q_PROPERTY(bool paused READ paused WRITE setPaused NOTIFY pausedChanged FINAL) +public: + OmxItem(); + virtual ~OmxItem(); + + QString source() { + return m_source; + } + + int sourceWidth() { + return m_sourceWidth; + } + + int sourceHeight() { + return m_sourceHeight; + } + + bool paused() { return m_paused; } + void setPaused(bool p); + + void setSource(const QString &source); + +signals: + void sourceChanged(); + void sourceWidthChanged(); + void sourceHeightChanged(); + void pausedChanged(); + +protected: + QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *); + +private slots: + void triggerRender(); + void videoSize(int w, int h); + +private: + OmxPlayer *m_player; + bool m_hasFrame; + bool m_initialized; + bool m_paused; + QString m_source; + int m_sourceWidth; + int m_sourceHeight; +}; + +#endif // OMXNODE_H + -- cgit v1.2.3