diff options
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/multimedia/multimedia.pro | 4 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativevideooutput.cpp | 15 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativevideooutput_p.h | 2 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode.cpp | 124 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_i420.cpp | 5 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_i420.h | 3 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_p.h | 73 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_rgb.cpp | 5 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_rgb.h | 3 |
9 files changed, 30 insertions, 204 deletions
diff --git a/src/imports/multimedia/multimedia.pro b/src/imports/multimedia/multimedia.pro index df01cc6b6..6bf5fbadd 100644 --- a/src/imports/multimedia/multimedia.pro +++ b/src/imports/multimedia/multimedia.pro @@ -8,12 +8,13 @@ QT += declarative quick network multimedia-private DESTDIR = $$QT.multimedia.imports/$$TARGETPATH target.path = $$[QT_INSTALL_IMPORTS]/$$TARGETPATH +LIBS += -lQtMultimediaQuick_p + HEADERS += \ qdeclarativeaudio_p.h \ qdeclarativemediabase_p.h \ qdeclarativemediametadata_p.h \ qdeclarativevideooutput_p.h \ - qsgvideonode_p.h \ qsgvideonode_i420.h \ qsgvideonode_rgb.h \ qdeclarativeradio_p.h \ @@ -36,7 +37,6 @@ SOURCES += \ qdeclarativeaudio.cpp \ qdeclarativemediabase.cpp \ qdeclarativevideooutput.cpp \ - qsgvideonode.cpp \ qsgvideonode_i420.cpp \ qsgvideonode_rgb.cpp \ qdeclarativeradio.cpp \ diff --git a/src/imports/multimedia/qdeclarativevideooutput.cpp b/src/imports/multimedia/qdeclarativevideooutput.cpp index 21c09904b..58a2c8191 100644 --- a/src/imports/multimedia/qdeclarativevideooutput.cpp +++ b/src/imports/multimedia/qdeclarativevideooutput.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include "qdeclarativevideooutput_p.h" -#include "qsgvideonode_p.h" +#include <private/qsgvideonode_p.h> #include "qsgvideonode_i420.h" #include "qsgvideonode_rgb.h" @@ -50,7 +50,7 @@ #include <QtMultimedia/qmediaservice.h> #include <QtMultimedia/qvideorenderercontrol.h> #include <QtMultimedia/qvideosurfaceformat.h> - +#include <private/qmediapluginloader_p.h> #include <QtCore/qmetaobject.h> @@ -59,6 +59,9 @@ Q_DECLARE_METATYPE(QAbstractVideoSurface*) QT_BEGIN_NAMESPACE +Q_GLOBAL_STATIC_WITH_ARGS(QMediaPluginLoader, videoNodeFactoryLoader, + (QSGVideoNodeFactory_iid, QLatin1String("video"), Qt::CaseInsensitive)) + class QSGVideoItemSurface : public QAbstractVideoSurface { public: @@ -172,6 +175,14 @@ QDeclarativeVideoOutput::QDeclarativeVideoOutput(QQuickItem *parent) : connect(m_surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)), this, SLOT(_q_updateNativeSize(QVideoSurfaceFormat)), Qt::QueuedConnection); + foreach (QObject *instance, videoNodeFactoryLoader()->instances(QSGVideoNodeFactoryPluginKey)) { + QSGVideoNodeFactory* plugin = qobject_cast<QSGVideoNodeFactory*>(instance); + if (plugin) { + m_videoNodeFactories.append(plugin); + } + } + + // Append existing node factories as fallback if we have no plugins m_videoNodeFactories.append(new QSGVideoNodeFactory_I420); m_videoNodeFactories.append(new QSGVideoNodeFactory_RGB); } diff --git a/src/imports/multimedia/qdeclarativevideooutput_p.h b/src/imports/multimedia/qdeclarativevideooutput_p.h index 59e2ce371..13710b1a6 100644 --- a/src/imports/multimedia/qdeclarativevideooutput_p.h +++ b/src/imports/multimedia/qdeclarativevideooutput_p.h @@ -52,7 +52,7 @@ #include <QtCore/qsharedpointer.h> #include <QtCore/qmutex.h> -#include "qsgvideonode_p.h" +#include <private/qsgvideonode_p.h> QT_BEGIN_NAMESPACE diff --git a/src/imports/multimedia/qsgvideonode.cpp b/src/imports/multimedia/qsgvideonode.cpp deleted file mode 100644 index b0d2ad32a..000000000 --- a/src/imports/multimedia/qsgvideonode.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsgvideonode_p.h" - -QSGVideoNode::QSGVideoNode() - : m_orientation(-1) -{ -} - -/* Helpers */ -static inline void qSetGeom(QSGGeometry::TexturedPoint2D *v, const QPointF &p) -{ - v->x = p.x(); - v->y = p.y(); -} - -static inline void qSetTex(QSGGeometry::TexturedPoint2D *v, const QPointF &p) -{ - v->tx = p.x(); - v->ty = p.y(); -} - -/* Update the vertices and texture coordinates. Orientation must be in {0,90,180,270} */ -void QSGVideoNode::setTexturedRectGeometry(const QRectF &rect, const QRectF &textureRect, int orientation) -{ - if (rect == m_rect && textureRect == m_textureRect && orientation == m_orientation) - return; - - m_rect = rect; - m_textureRect = textureRect; - m_orientation = orientation; - - QSGGeometry *g = geometry(); - - if (g == 0) - g = new QSGGeometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4); - - QSGGeometry::TexturedPoint2D *v = g->vertexDataAsTexturedPoint2D(); - - // Set geometry first - qSetGeom(v + 0, rect.topLeft()); - qSetGeom(v + 1, rect.bottomLeft()); - qSetGeom(v + 2, rect.topRight()); - qSetGeom(v + 3, rect.bottomRight()); - - // and then texture coordinates - switch (orientation) { - default: - // tl, bl, tr, br - qSetTex(v + 0, textureRect.topLeft()); - qSetTex(v + 1, textureRect.bottomLeft()); - qSetTex(v + 2, textureRect.topRight()); - qSetTex(v + 3, textureRect.bottomRight()); - break; - - case 90: - // tr, tl, br, bl - qSetTex(v + 0, textureRect.topRight()); - qSetTex(v + 1, textureRect.topLeft()); - qSetTex(v + 2, textureRect.bottomRight()); - qSetTex(v + 3, textureRect.bottomLeft()); - break; - - case 180: - // br, tr, bl, tl - qSetTex(v + 0, textureRect.bottomRight()); - qSetTex(v + 1, textureRect.topRight()); - qSetTex(v + 2, textureRect.bottomLeft()); - qSetTex(v + 3, textureRect.topLeft()); - break; - - case 270: - // bl, br, tl, tr - qSetTex(v + 0, textureRect.bottomLeft()); - qSetTex(v + 1, textureRect.bottomRight()); - qSetTex(v + 2, textureRect.topLeft()); - qSetTex(v + 3, textureRect.topRight()); - break; - } - - if (!geometry()) - setGeometry(g); - - markDirty(DirtyGeometry); -} diff --git a/src/imports/multimedia/qsgvideonode_i420.cpp b/src/imports/multimedia/qsgvideonode_i420.cpp index ef075eb95..3ee9e851b 100644 --- a/src/imports/multimedia/qsgvideonode_i420.cpp +++ b/src/imports/multimedia/qsgvideonode_i420.cpp @@ -65,6 +65,11 @@ QSGVideoNode *QSGVideoNodeFactory_I420::createNode(const QVideoSurfaceFormat &fo return 0; } +QStringList QSGVideoNodeFactory_I420::keys() const +{ + return QStringList() << QSGVideoNodeFactoryPluginKey; +} + class QSGVideoMaterialShader_YUV420 : public QSGMaterialShader { diff --git a/src/imports/multimedia/qsgvideonode_i420.h b/src/imports/multimedia/qsgvideonode_i420.h index e37abd9aa..4ab1139fe 100644 --- a/src/imports/multimedia/qsgvideonode_i420.h +++ b/src/imports/multimedia/qsgvideonode_i420.h @@ -42,7 +42,7 @@ #ifndef QSGVIDEONODE_I420_H #define QSGVIDEONODE_I420_H -#include "qsgvideonode_p.h" +#include <private/qsgvideonode_p.h> #include <QtMultimedia/qvideosurfaceformat.h> class QSGVideoMaterial_YUV420; @@ -68,6 +68,7 @@ class QSGVideoNodeFactory_I420 : public QSGVideoNodeFactory { public: QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const; QSGVideoNode *createNode(const QVideoSurfaceFormat &format); + QStringList keys() const; }; diff --git a/src/imports/multimedia/qsgvideonode_p.h b/src/imports/multimedia/qsgvideonode_p.h deleted file mode 100644 index 271eb868d..000000000 --- a/src/imports/multimedia/qsgvideonode_p.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSGVIDEONODE_P_H -#define QSGVIDEONODE_P_H - -#include <QtQuick/qsgnode.h> - -#include <QtMultimedia/qvideoframe.h> -#include <QtMultimedia/qvideosurfaceformat.h> -#include <QtGui/qopenglfunctions.h> - -class QSGVideoNode : public QSGGeometryNode -{ -public: - QSGVideoNode(); - - virtual void setCurrentFrame(const QVideoFrame &frame) = 0; - virtual QVideoFrame::PixelFormat pixelFormat() const = 0; - - void setTexturedRectGeometry(const QRectF &boundingRect, const QRectF &textureRect, int orientation); - -private: - QRectF m_rect; - QRectF m_textureRect; - int m_orientation; -}; - -class QSGVideoNodeFactory { -public: - virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const = 0; - virtual QSGVideoNode *createNode(const QVideoSurfaceFormat &format) = 0; -}; - -#endif // QSGVIDEONODE_H diff --git a/src/imports/multimedia/qsgvideonode_rgb.cpp b/src/imports/multimedia/qsgvideonode_rgb.cpp index b7fd9c793..30ebd54a4 100644 --- a/src/imports/multimedia/qsgvideonode_rgb.cpp +++ b/src/imports/multimedia/qsgvideonode_rgb.cpp @@ -70,6 +70,11 @@ QSGVideoNode *QSGVideoNodeFactory_RGB::createNode(const QVideoSurfaceFormat &for return 0; } +QStringList QSGVideoNodeFactory_RGB::keys() const +{ + return QStringList() << QSGVideoNodeFactoryPluginKey; +} + class QSGVideoMaterialShader_RGB : public QSGMaterialShader { diff --git a/src/imports/multimedia/qsgvideonode_rgb.h b/src/imports/multimedia/qsgvideonode_rgb.h index dd5a852e3..d43653525 100644 --- a/src/imports/multimedia/qsgvideonode_rgb.h +++ b/src/imports/multimedia/qsgvideonode_rgb.h @@ -42,7 +42,7 @@ #ifndef QSGVIDEONODE_RGB_H #define QSGVIDEONODE_RGB_H -#include "qsgvideonode_p.h" +#include <private/qsgvideonode_p.h> #include <QtMultimedia/qvideosurfaceformat.h> class QSGVideoMaterial_RGB; @@ -68,6 +68,7 @@ class QSGVideoNodeFactory_RGB : public QSGVideoNodeFactory { public: QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const; QSGVideoNode *createNode(const QVideoSurfaceFormat &format); + QStringList keys() const; }; |