summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-01-13 17:35:58 +0000
committerSamuel Mira <samuel.mira@qt.io>2022-01-14 13:19:35 +0000
commit15d925b561982e9f166597e420ecb63484cabe60 (patch)
tree5a1c3da2e53d45d6ed95591d3d3fd99fb4f81570
parent27ee35aa61379e3cad749bd546460664112feb48 (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)
-rw-r--r--src/multimedia/platform/android/common/qandroidvideooutput.cpp9
-rw-r--r--src/multimedia/platform/android/common/qandroidvideooutput_p.h3
-rw-r--r--src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp15
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();
}