summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/android/common/qandroidvideooutput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/android/common/qandroidvideooutput.cpp')
-rw-r--r--src/multimedia/platform/android/common/qandroidvideooutput.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/multimedia/platform/android/common/qandroidvideooutput.cpp b/src/multimedia/platform/android/common/qandroidvideooutput.cpp
index 9f8d29430..6508cb554 100644
--- a/src/multimedia/platform/android/common/qandroidvideooutput.cpp
+++ b/src/multimedia/platform/android/common/qandroidvideooutput.cpp
@@ -250,6 +250,18 @@ void QAndroidTextureVideoOutput::stop()
m_started = false;
}
+void QAndroidTextureVideoOutput::renderFrame()
+{
+ if (!m_started) {
+ m_renderFrame = true;
+ bool frameok = renderAndReadbackFrame();
+ if (!frameok) {
+ m_renderFrame = true;
+ renderAndReadbackFrame();
+ }
+ }
+}
+
void QAndroidTextureVideoOutput::reset()
{
// flush pending frame
@@ -289,9 +301,11 @@ bool QAndroidTextureVideoOutput::moveToOpenGLContextThread()
void QAndroidTextureVideoOutput::onFrameAvailable()
{
- if (!m_nativeSize.isValid() || !m_sink || !m_started)
+ if (!(m_nativeSize.isValid() && m_sink) || !(m_started || m_renderFrame))
return;
+ m_renderFrame = false;
+
QRhi *rhi = m_sink ? m_sink->rhi() : nullptr;
auto *buffer = new AndroidTextureVideoBuffer(rhi, this, m_nativeSize);