summaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/multimedia/multimedia.pro4
-rw-r--r--src/imports/multimedia/qdeclarativevideooutput.cpp15
-rw-r--r--src/imports/multimedia/qdeclarativevideooutput_p.h2
-rw-r--r--src/imports/multimedia/qsgvideonode.cpp124
-rw-r--r--src/imports/multimedia/qsgvideonode_i420.cpp5
-rw-r--r--src/imports/multimedia/qsgvideonode_i420.h3
-rw-r--r--src/imports/multimedia/qsgvideonode_p.h73
-rw-r--r--src/imports/multimedia/qsgvideonode_rgb.cpp5
-rw-r--r--src/imports/multimedia/qsgvideonode_rgb.h3
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;
};