summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-01-13 17:27:37 +0000
committerSamuel Mira <samuel.mira@qt.io>2022-01-14 13:20:05 +0000
commitb74c3301e805ac117158be050c1ec08516d02b21 (patch)
tree83620ea817883b45e048a2bc7e5bbcf8067fc277
parentf4cb911140fcfcf9160b5cb32a7bff5b04731f8d (diff)
downloadqtmultimedia-b74c3301e805ac117158be050c1ec08516d02b21.tar.gz
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();
}