diff options
Diffstat (limited to 'src/multimedia/platform/android/common/qandroidvideooutput.cpp')
-rw-r--r-- | src/multimedia/platform/android/common/qandroidvideooutput.cpp | 16 |
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); |