diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-01-13 17:35:58 +0000 |
---|---|---|
committer | Samuel Mira <samuel.mira@qt.io> | 2022-01-14 13:19:35 +0000 |
commit | 15d925b561982e9f166597e420ecb63484cabe60 (patch) | |
tree | 5a1c3da2e53d45d6ed95591d3d3fd99fb4f81570 | |
parent | 27ee35aa61379e3cad749bd546460664112feb48 (diff) |
Fix SeekPauseSeek Test in Android
Changed android backend to only send frames when
the correct states. This will prevent sending frames
on Prepared which made this test to fail.
Fixes: QTBUG-99357
Change-Id: I53f26daf2c5340ce3ab02de5a4d4925b05c215aa
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
(cherry picked from commit 9e3d449925df40e849e039997dccd1d49753a611)
3 files changed, 25 insertions, 2 deletions
diff --git a/src/multimedia/platform/android/common/qandroidvideooutput.cpp b/src/multimedia/platform/android/common/qandroidvideooutput.cpp index d0f3203de..6f62e2412 100644 --- a/src/multimedia/platform/android/common/qandroidvideooutput.cpp +++ b/src/multimedia/platform/android/common/qandroidvideooutput.cpp @@ -238,9 +238,16 @@ void QAndroidTextureVideoOutput::setVideoSize(const QSize &size) m_nativeSize = size; } +void QAndroidTextureVideoOutput::start() +{ + m_started = true; + renderAndReadbackFrame(); +} + void QAndroidTextureVideoOutput::stop() { m_nativeSize = QSize(); + m_started = false; } void QAndroidTextureVideoOutput::reset() @@ -254,7 +261,7 @@ void QAndroidTextureVideoOutput::reset() void QAndroidTextureVideoOutput::onFrameAvailable() { - if (!m_nativeSize.isValid() || !m_sink) + if (!m_nativeSize.isValid() || !m_sink || !m_started) return; QRhi *rhi = m_sink ? m_sink->rhi() : nullptr; diff --git a/src/multimedia/platform/android/common/qandroidvideooutput_p.h b/src/multimedia/platform/android/common/qandroidvideooutput_p.h index fc85d74fc..2bb1004be 100644 --- a/src/multimedia/platform/android/common/qandroidvideooutput_p.h +++ b/src/multimedia/platform/android/common/qandroidvideooutput_p.h @@ -79,6 +79,7 @@ public: virtual bool isReady() { return true; } virtual void setVideoSize(const QSize &) { } + virtual void start() { } virtual void stop() { } virtual void reset() { } @@ -117,6 +118,7 @@ public: bool isReady() override; void setVideoSize(const QSize &) override; + void start() override; void stop() override; void reset() override; @@ -136,6 +138,7 @@ private: QVideoSink *m_sink = nullptr; QSize m_nativeSize; + bool m_started = false; AndroidSurfaceTexture *m_surfaceTexture = nullptr; diff --git a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp index 10ce91dfe..757f9c512 100644 --- a/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp +++ b/src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp @@ -408,6 +408,9 @@ void QAndroidMediaPlayer::play() return; } + if (mVideoOutput) + mVideoOutput->start(); + updateAudioDevice(); mMediaPlayer->play(); @@ -425,10 +428,17 @@ void QAndroidMediaPlayer::pause() if ((mState & (AndroidMediaPlayer::Started | AndroidMediaPlayer::Paused - | AndroidMediaPlayer::PlaybackCompleted)) == 0) { + | AndroidMediaPlayer::PlaybackCompleted + | AndroidMediaPlayer::Prepared + | AndroidMediaPlayer::Stopped)) == 0) { mPendingState = QMediaPlayer::PausedState; return; } + if (mVideoOutput) + mVideoOutput->start(); + + const qint64 currentPosition = mMediaPlayer->getCurrentPosition(); + setPosition(currentPosition); mMediaPlayer->pause(); } @@ -449,6 +459,9 @@ void QAndroidMediaPlayer::stop() return; } + if (mVideoOutput) + mVideoOutput->stop(); + mMediaPlayer->stop(); } |