summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-03-29 14:45:11 +0300
committerSamuel Mira <samuel.mira@qt.io>2022-03-29 14:50:55 +0300
commit8d13911b94ca2f1be652fb09c84f68cd2775bd52 (patch)
tree0f9831c66edfc6de2271bfb69ffd504574da2314 /src
parent26c5d4ba1c0a08646a05fc927e4f73c8747b1866 (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')
-rw-r--r--src/multimedia/platform/android/common/qandroidvideooutput.cpp16
-rw-r--r--src/multimedia/platform/android/common/qandroidvideooutput_p.h2
-rw-r--r--src/multimedia/platform/android/mediaplayer/qandroidmediaplayer.cpp9
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);