diff options
author | VaL Doroshchuk <valentyn.doroshchuk@qt.io> | 2020-01-27 11:36:59 +0100 |
---|---|---|
committer | Paul Wicking <paul.wicking@qt.io> | 2020-01-30 11:46:33 +0000 |
commit | d931c6c68f13285d0ca09831fd78ff757ca05fe4 (patch) | |
tree | 930d3b3e4bfa4f619db39f32e0966bfd6e2ab6c0 /src/qtmultimediaquicktools | |
parent | 81e0861c60899c14395903b053b1045210740a43 (diff) |
Make video surfaces constant
Video surface property for QVideoWidget, QGprahicsVideoItem and QDeclarativeVideoOutput
should be CONSTANT and kept the same value while the object is alive.
Note, currently this property can be suddenly changed, when videoSurface is mixed/used
together with source property.
To keep the patch simple, this will be fixed in next commits.
Change-Id: I80046524a70bcb70bb45e7f1bbae74bff1b3b0f2
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/qtmultimediaquicktools')
-rw-r--r-- | src/qtmultimediaquicktools/qdeclarativevideooutput.cpp | 20 | ||||
-rw-r--r-- | src/qtmultimediaquicktools/qdeclarativevideooutput_p.h | 2 |
2 files changed, 6 insertions, 16 deletions
diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp index 128d0a616..81dc3fcb3 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput.cpp @@ -138,7 +138,7 @@ QDeclarativeVideoOutput::QDeclarativeVideoOutput(QQuickItem *parent) : { initResource(); setFlag(ItemHasContents, true); - m_backend.reset(new QDeclarativeVideoRendererBackend(this)); + createBackend(nullptr); } QDeclarativeVideoOutput::~QDeclarativeVideoOutput() @@ -161,7 +161,7 @@ QDeclarativeVideoOutput::~QDeclarativeVideoOutput() QAbstractVideoSurface *QDeclarativeVideoOutput::videoSurface() const { - return m_backend->videoSurface(); + return m_backend ? m_backend->videoSurface() : nullptr; } /*! @@ -223,21 +223,10 @@ void QDeclarativeVideoOutput::setSource(QObject *source) } m_sourceType = MediaObjectSource; -#if QT_CONFIG(opengl) } else if (metaObject->indexOfProperty("videoSurface") != -1) { - // Make sure our backend is a QDeclarativeVideoRendererBackend - m_backend.reset(); - createBackend(0); - Q_ASSERT(m_backend); -#ifndef QT_NO_DYNAMIC_CAST - Q_ASSERT(dynamic_cast<QDeclarativeVideoRendererBackend *>(m_backend.data())); -#endif - QAbstractVideoSurface * const surface = m_backend->videoSurface(); - Q_ASSERT(surface); m_source.data()->setProperty("videoSurface", - QVariant::fromValue<QAbstractVideoSurface*>(surface)); + QVariant::fromValue<QAbstractVideoSurface *>(videoSurface())); m_sourceType = VideoSurfaceSource; -#endif } else { m_sourceType = NoSource; } @@ -259,7 +248,8 @@ bool QDeclarativeVideoOutput::createBackend(QMediaService *service) const auto instances = videoBackendFactoryLoader()->instances(QLatin1String("declarativevideobackend")); for (QObject *instance : instances) { if (QDeclarativeVideoBackendFactoryInterface *plugin = qobject_cast<QDeclarativeVideoBackendFactoryInterface*>(instance)) { - m_backend.reset(plugin->create(this)); + if (!m_backend) + m_backend.reset(plugin->create(this)); if (m_backend && m_backend->init(service)) { backendAvailable = true; break; diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h b/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h index 9e826d0ff..d14731c91 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_p.h @@ -81,7 +81,7 @@ class Q_MULTIMEDIAQUICK_EXPORT QDeclarativeVideoOutput : public QQuickItem Q_PROPERTY(QRectF contentRect READ contentRect NOTIFY contentRectChanged) Q_PROPERTY(QQmlListProperty<QAbstractVideoFilter> filters READ filters); Q_PROPERTY(FlushMode flushMode READ flushMode WRITE setFlushMode NOTIFY flushModeChanged REVISION 13) - Q_PROPERTY(QAbstractVideoSurface* videoSurface READ videoSurface REVISION 15) + Q_PROPERTY(QAbstractVideoSurface* videoSurface READ videoSurface CONSTANT REVISION 15) Q_ENUMS(FlushMode) Q_ENUMS(FillMode) |