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/qdeclarativevideooutput.cpp | |
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/qdeclarativevideooutput.cpp')
-rw-r--r-- | src/qtmultimediaquicktools/qdeclarativevideooutput.cpp | 20 |
1 files changed, 5 insertions, 15 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; |