summaryrefslogtreecommitdiffstats
path: root/src/imports/nativemedia/omxnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/nativemedia/omxnode.cpp')
-rw-r--r--src/imports/nativemedia/omxnode.cpp204
1 files changed, 0 insertions, 204 deletions
diff --git a/src/imports/nativemedia/omxnode.cpp b/src/imports/nativemedia/omxnode.cpp
deleted file mode 100644
index 27ec1da..0000000
--- a/src/imports/nativemedia/omxnode.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use the contact form at
-** http://www.qt.io
-**
-** This file is part of Qt Enterprise Embedded.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** the contact form at http://www.qt.io
-**
-****************************************************************************/
-#include "omxnode.h"
-
-#include <QtGui/QOpenGLContext>
-#include <QtQuick/qsgtexture.h>
-#include <QtQuick/qquickwindow.h>
-
-#include <QTimer>
-
-static const char omx_texture_material_vertex[] =
- "uniform highp mat4 qt_Matrix; \n"
- "attribute highp vec4 qt_VertexPosition; \n"
- "attribute highp vec2 qt_VertexTexCoord; \n"
- "varying highp vec2 qt_TexCoord; \n"
- "void main() { \n"
- " qt_TexCoord = qt_VertexTexCoord; \n"
- " gl_Position = qt_Matrix * qt_VertexPosition; \n"
- "}";
-
-
-static const char omx_texture_material_fragment[] =
- "#extension GL_OES_EGL_image_external : require \n"
- "varying highp vec2 qt_TexCoord; \n"
- "uniform samplerExternalOES qt_Texture; \n"
- "uniform lowp float qt_Opacity; \n"
- "void main() { \n"
- " gl_FragColor = texture2D(qt_Texture, qt_TexCoord) * qt_Opacity; \n"
- "}";
-
-QList<QByteArray> OmxTextureMaterial::attributes() const
-{
- QList<QByteArray> attributeList;
- attributeList << "qt_VertexPosition";
- attributeList << "qt_VertexTexCoord";
- return attributeList;
-}
-
-void OmxTextureMaterial::updateState(const OmxTextureState *newState, const OmxTextureState *oldState)
-{
- Q_UNUSED(oldState);
- newState->player->updateTexture();
-}
-
-const char *OmxTextureMaterial::vertexShader() const
-{
- return omx_texture_material_vertex;
-}
-
-const char *OmxTextureMaterial::fragmentShader() const
-{
- return omx_texture_material_fragment;
-}
-
-OmxNode::OmxNode(OmxPlayer *player)
- : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4)
- , m_player(player)
- , m_initialized(false)
-{
- m_textureMaterial = OmxTextureMaterial::createMaterial();
- m_textureMaterial->state()->player = player;
-
- setGeometry(&m_geometry);
- setMaterial(m_textureMaterial);
-
- setFlag(UsePreprocess, true);
-}
-
-OmxNode::~OmxNode()
-{
- delete m_textureMaterial;
-}
-
-void OmxNode::preprocess()
-{
-}
-
-void OmxNode::setRect(const QRectF &rect)
-{
- if (m_rect == rect)
- return;
-
- printf("OmxNode::setRect(%f %f %f %f)\n", rect.x(), rect.y(), rect.width(), rect.height());
- m_rect = rect;
-
- QRectF sourceRect(0, 0, 1, 1);
- QSGGeometry::updateTexturedRectGeometry(&m_geometry, m_rect, sourceRect);
-}
-
-OmxItem::OmxItem()
- : m_player(OmxPlayer::create())
- , m_hasFrame(false)
- , m_initialized(false)
- , m_paused(false)
- , m_sourceWidth(0)
- , m_sourceHeight(0)
-{
- connect(m_player, SIGNAL(frameAvailable()), this, SLOT(triggerRender()));
- connect(m_player, SIGNAL(videoSize(int, int)), this, SLOT(videoSize(int, int)));
-
- setFlag(ItemHasContents, true);
-}
-
-void OmxItem::itemChange(ItemChange change, const ItemChangeData &)
-{
- if (change == ItemSceneChange) {
- QQuickWindow *win = window();
- if (!win)
- return;
-
- // Connect the beforeRendering signal to our paint function.
- // Since this call is executed on the rendering thread it must be
- // a Qt::DirectConnection
- connect(win, SIGNAL(beforeRendering()), this, SLOT(beforeRendering()), Qt::DirectConnection);
- }
-}
-
-
-OmxItem::~OmxItem()
-{
- delete m_player;
-}
-
-void OmxItem::triggerRender()
-{
- m_hasFrame = true;
- update();
-}
-
-void OmxItem::videoSize(int w, int h)
-{
- m_sourceWidth = w;
- m_sourceHeight = h;
-
- emit sourceWidthChanged();
- emit sourceHeightChanged();
-}
-
-void OmxItem::setSource(const QString &source)
-{
- if (m_initialized || source == m_source)
- return;
-
- m_source = source;
- emit sourceChanged();
- update();
-}
-
-void OmxItem::beforeRendering()
-{
- if (m_initialized || m_source.isNull())
- return;
-
- m_initialized = m_player->initialize(m_source.toLocal8Bit());
-
- GLuint tid;
- glGenTextures(1, &tid);
-
- // start playing if not paused
- if (m_initialized && !paused())
- m_player->setPaused(false);
-}
-
-QSGNode *OmxItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
-{
- if (!m_hasFrame)
- return 0;
-
- OmxNode *node;
- if (oldNode)
- node = static_cast<OmxNode *>(oldNode);
- else
- node = new OmxNode(m_player);
-
- node->setRect(boundingRect());
- node->markDirty(QSGNode::DirtyMaterial);
-
- return node;
-}
-
-void OmxItem::setPaused(bool p)
-{
- if (p == m_paused)
- return;
- m_player->setPaused(p);
- m_paused = p;
- emit pausedChanged();
-}