diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-03-29 14:45:11 +0300 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2022-03-29 14:50:55 +0300 |
commit | 8d13911b94ca2f1be652fb09c84f68cd2775bd52 (patch) | |
tree | 0f9831c66edfc6de2271bfb69ffd504574da2314 /src | |
parent | 26c5d4ba1c0a08646a05fc927e4f73c8747b1866 (diff) |
Fix Multimedia auto test videoDimension on Android
Added a seekTo in the android mediaPlayer setPosition to update position
and a function on videooutput to render one single frame.
Both changes were added for consistency between different platforms.
Fixes: QTBUG-99361
Change-Id: I2ad0d1bb71ddd7cbc31a97587506050b9969fdd0
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 78891c03ec3675373ef6b54559d244cda32a9402)
Diffstat (limited to 'src')
3 files changed, 23 insertions, 4 deletions
diff --git a/src/multimedia/platform/android/common/qandroidvideooutput.cpp b/src/multimedia/platform/android/common/qandroidvideooutput.cpp index edb0d8f93..c1603e0f2 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); diff --git a/src/multimedia/platform/android/common/qandroidvideooutput_p.h b/src/multimedia/platform/android/common/qandroidvideooutput_p.h index 4db1bba76..473c58552 100644 --- a/src/multimedia/platform/android/common/qandroidvideooutput_p.h +++ b/src/multimedia/platform/android/common/qandroidvideooutput_p.h @@ -121,6 +121,7 @@ public: void start() override; void stop() override; void reset() override; + void renderFrame(); void setSubtitle(const QString &subtitle); private Q_SLOTS: @@ -141,6 +142,7 @@ private: QVideoSink *m_sink = nullptr; QSize m_nativeSize; bool m_started = false; + bool m_renderFrame = false; AndroidSurfaceTexture *m_surfaceTexture = nullptr; diff --git a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp index 757f9c512..01a57c298 100644 --- a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp +++ b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp @@ -146,9 +146,12 @@ void QAndroidMediaPlayer::setPosition(qint64 position) const int seekPosition = (position > INT_MAX) ? INT_MAX : position; qint64 currentPosition = mMediaPlayer->getCurrentPosition(); - if (seekPosition == currentPosition) + if (seekPosition == currentPosition) { + // update position - will send a new frame of this position + // for consistency with other platforms + mMediaPlayer->seekTo(seekPosition); return; - + } StateChangeNotifier notifier(this); if (mediaStatus() == QMediaPlayer::EndOfMedia) @@ -435,7 +438,7 @@ void QAndroidMediaPlayer::pause() return; } if (mVideoOutput) - mVideoOutput->start(); + mVideoOutput->renderFrame(); const qint64 currentPosition = mMediaPlayer->getCurrentPosition(); setPosition(currentPosition); |