summaryrefslogtreecommitdiffstats
path: root/src/plugins/multimedia/android/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/multimedia/android/common')
-rw-r--r--src/plugins/multimedia/android/common/qandroidvideooutput.cpp18
-rw-r--r--src/plugins/multimedia/android/common/qandroidvideooutput_p.h2
2 files changed, 18 insertions, 2 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;
};