diff options
3 files changed, 20 insertions, 3 deletions
diff --git a/src/plugins/multimedia/android/common/qandroidvideooutput.cpp b/src/plugins/multimedia/android/common/qandroidvideooutput.cpp index 62959dba9..43f2cd760 100644 --- a/src/plugins/multimedia/android/common/qandroidvideooutput.cpp +++ b/src/plugins/multimedia/android/common/qandroidvideooutput.cpp @@ -362,14 +362,28 @@ void QAndroidTextureVideoOutput::setSubtitle(const QString &subtitle) } } +bool QAndroidTextureVideoOutput::shouldTextureBeUpdated() const +{ + return m_sink->rhi() && m_surfaceCreatedWithoutRhi; +} + AndroidSurfaceTexture *QAndroidTextureVideoOutput::surfaceTexture() { if (!m_sink) return nullptr; AndroidSurfaceTexture *surface = nullptr; - QMetaObject::invokeMethod(m_surfaceThread.get(), - [&](){ surface = m_surfaceThread->createSurfaceTexture(m_sink->rhi()); }, + QMetaObject::invokeMethod(m_surfaceThread.get(), [&]() { + auto rhi = m_sink->rhi(); + if (!rhi) { + m_surfaceCreatedWithoutRhi = true; + } + else if (m_surfaceCreatedWithoutRhi) { + m_surfaceThread->clearSurfaceTexture(); + m_surfaceCreatedWithoutRhi = false; + } + surface = m_surfaceThread->createSurfaceTexture(rhi); + }, Qt::BlockingQueuedConnection); return surface; } diff --git a/src/plugins/multimedia/android/common/qandroidvideooutput_p.h b/src/plugins/multimedia/android/common/qandroidvideooutput_p.h index 81b2fb809..cc7e2413e 100644 --- a/src/plugins/multimedia/android/common/qandroidvideooutput_p.h +++ b/src/plugins/multimedia/android/common/qandroidvideooutput_p.h @@ -60,6 +60,7 @@ public: ~QAndroidTextureVideoOutput() override; QVideoSink *surface() const { return m_sink; } + bool shouldTextureBeUpdated() const; AndroidSurfaceTexture *surfaceTexture() override; @@ -74,6 +75,7 @@ private Q_SLOTS: private: QVideoSink *m_sink = nullptr; QSize m_nativeSize; + bool m_surfaceCreatedWithoutRhi = false; std::unique_ptr<class AndroidTextureThread> m_surfaceThread; }; diff --git a/src/plugins/multimedia/android/mediaplayer/qandroidmediaplayer.cpp b/src/plugins/multimedia/android/mediaplayer/qandroidmediaplayer.cpp index 512523a20..d88bcbc27 100644 --- a/src/plugins/multimedia/android/mediaplayer/qandroidmediaplayer.cpp +++ b/src/plugins/multimedia/android/mediaplayer/qandroidmediaplayer.cpp @@ -272,7 +272,8 @@ void QAndroidMediaPlayer::setMedia(const QUrl &mediaContent, if (mVideoSize.isValid() && mVideoOutput) mVideoOutput->setVideoSize(mVideoSize); - if ((mMediaPlayer->display() == 0) && mVideoOutput) + if (mVideoOutput && + (mMediaPlayer->display() == 0 || mVideoOutput->shouldTextureBeUpdated())) mMediaPlayer->setDisplay(mVideoOutput->surfaceTexture()); mMediaPlayer->setDataSource(QNetworkRequest(mediaContent)); mMediaPlayer->prepareAsync(); |