diff options
-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_i420.cpp | 5 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_i420.h | 3 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_rgb.cpp | 5 | ||||
-rw-r--r-- | src/imports/multimedia/qsgvideonode_rgb.h | 3 | ||||
-rw-r--r-- | src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h (renamed from src/imports/multimedia/qsgvideonode_p.h) | 21 | ||||
-rw-r--r-- | src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h | 90 | ||||
-rw-r--r-- | src/qtmultimediaquicktools/qsgvideonode_p.cpp (renamed from src/imports/multimedia/qsgvideonode.cpp) | 4 | ||||
-rw-r--r-- | src/qtmultimediaquicktools/qtmultimediaquicktools.pro | 30 | ||||
-rw-r--r-- | src/src.pro | 9 |
12 files changed, 180 insertions, 11 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_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_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; }; diff --git a/src/imports/multimedia/qsgvideonode_p.h b/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h index 271eb868d..f82a337ed 100644 --- a/src/imports/multimedia/qsgvideonode_p.h +++ b/src/multimedia/qtmultimediaquicktools_headers/qsgvideonode_p.h @@ -43,12 +43,22 @@ #define QSGVIDEONODE_P_H #include <QtQuick/qsgnode.h> +#include <private/qtmultimediaquickdefs_p.h> #include <QtMultimedia/qvideoframe.h> #include <QtMultimedia/qvideosurfaceformat.h> #include <QtGui/qopenglfunctions.h> +#include <QtCore/qfactoryinterface.h> -class QSGVideoNode : public QSGGeometryNode +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Multimedia) + +const QLatin1String QSGVideoNodeFactoryPluginKey("sgvideonodes"); + +class Q_MULTIMEDIAQUICK_EXPORT QSGVideoNode : public QSGGeometryNode { public: QSGVideoNode(); @@ -64,10 +74,17 @@ private: int m_orientation; }; -class QSGVideoNodeFactory { +class QSGVideoNodeFactory : public QFactoryInterface { public: virtual QList<QVideoFrame::PixelFormat> supportedPixelFormats(QAbstractVideoBuffer::HandleType handleType) const = 0; virtual QSGVideoNode *createNode(const QVideoSurfaceFormat &format) = 0; }; +#define QSGVideoNodeFactory_iid "com.nokia.Qt.QSGVideoNodeFactory" +Q_DECLARE_INTERFACE(QSGVideoNodeFactory, QSGVideoNodeFactory_iid) + +QT_END_NAMESPACE + +QT_END_HEADER + #endif // QSGVIDEONODE_H diff --git a/src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h b/src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h new file mode 100644 index 000000000..a204b5fec --- /dev/null +++ b/src/multimedia/qtmultimediaquicktools_headers/qtmultimediaquickdefs_p.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QMULTIMEDIAQUICKDEFS_P_H +#define QMULTIMEDIAQUICKDEFS_P_H + +#include <QtCore/qglobal.h> + +QT_BEGIN_HEADER + +#if defined(Q_OS_WIN) +# if defined(QT_NODLL) +# undef QT_MAKEDLL +# undef QT_DLL +# elif defined(QT_MAKEDLL) +# if defined(QT_DLL) +# undef QT_DLL +# endif +# if defined(QT_BUILD_QTMM_QUICK_LIB) +# define Q_MULTIMEDIAQUICK_EXPORT Q_DECL_EXPORT +# else +# define Q_MULTIMEDIAQUICK_EXPORT Q_DECL_IMPORT +# endif +# elif defined(QT_DLL) /* use a Qt DLL library */ +# define Q_MULTIMEDIAQUICK_EXPORT Q_DECL_IMPORT +# endif +#endif + +#if !defined(Q_MULTIMEDIAQUICK_EXPORT) +# if defined(QT_SHARED) +# define Q_MULTIMEDIAQUICK_EXPORT Q_DECL_EXPORT +# else +# define Q_MULTIMEDIAQUICK_EXPORT +# endif +#endif + +QT_END_HEADER + + +#endif // QMULTIMEDIAQUICKDEFS_P_H + diff --git a/src/imports/multimedia/qsgvideonode.cpp b/src/qtmultimediaquicktools/qsgvideonode_p.cpp index b0d2ad32a..2c9f24101 100644 --- a/src/imports/multimedia/qsgvideonode.cpp +++ b/src/qtmultimediaquicktools/qsgvideonode_p.cpp @@ -41,6 +41,8 @@ #include "qsgvideonode_p.h" +QT_BEGIN_NAMESPACE + QSGVideoNode::QSGVideoNode() : m_orientation(-1) { @@ -122,3 +124,5 @@ void QSGVideoNode::setTexturedRectGeometry(const QRectF &rect, const QRectF &tex markDirty(DirtyGeometry); } + +QT_END_NAMESPACE diff --git a/src/qtmultimediaquicktools/qtmultimediaquicktools.pro b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro new file mode 100644 index 000000000..a94ab8482 --- /dev/null +++ b/src/qtmultimediaquicktools/qtmultimediaquicktools.pro @@ -0,0 +1,30 @@ +load(qt_module) + +TEMPLATE = lib + +TARGET = QtMultimediaQuick_p +QPRO_PWD = $$PWD +QT = core quick multimedia-private + +!static:DEFINES += QT_MAKEDLL + +DEFINES += QT_BUILD_QTMM_QUICK_LIB + +# Header files must go inside source directory of a module +# to be installed by syncqt. +INCLUDEPATH += ../multimedia/qtmultimediaquicktools_headers/ +DEPENDPATH += ../multimedia/qtmultimediaquicktools_headers/ + +PRIVATE_HEADERS += \ + qsgvideonode_p.h \ + qtmultimediaquickdefs_p.h + +SOURCES += \ + qsgvideonode_p.cpp + +HEADERS += $$PRIVATE_HEADERS + +DESTDIR = $$QT.multimedia.libs +target.path = $$[QT_INSTALL_LIBS] + +INSTALLS += target diff --git a/src/src.pro b/src/src.pro index df94ec644..8a5537109 100644 --- a/src/src.pro +++ b/src/src.pro @@ -6,6 +6,9 @@ SUBDIRS += multimedia src_qgsttools.subdir = gsttools src_qgsttools.depends = multimedia +src_qtmultimediaquicktools.subdir = qtmultimediaquicktools +src_qtmultimediaquicktools.depends = multimedia + src_qtmmwidgets.subdir = multimediawidgets src_qtmmwidgets.depends = multimedia @@ -13,9 +16,11 @@ src_plugins.subdir = plugins src_plugins.depends = multimedia src_imports.subdir = imports -src_imports.depends = multimedia +src_imports.depends = multimedia src_qtmultimediaquicktools -SUBDIRS += src_imports +SUBDIRS += \ + src_qtmultimediaquicktools \ + src_imports # Optional bits contains(config_test_gstreamer, yes):SUBDIRS += src_qgsttools |