summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-03-29 14:53:50 +0300
committerSamuel Mira <samuel.mira@qt.io>2022-03-29 15:28:00 +0300
commit424fa7a0419e98d54cc373acf20744953845043a (patch)
tree316685e5b7596b422688a32582c0af2f00d9762b
parente1727ca1b6eddcdb96685357a768eebadfb2c625 (diff)
downloadqtmultimedia-424fa7a0419e98d54cc373acf20744953845043a.tar.gz
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)
-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
-rw-r--r--tests/auto/integration/qmediaplayerbackend/testdata/BigBuckBunny.mp4bin45969 -> 36724 bytes
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp13
5 files changed, 33 insertions, 7 deletions
diff --git a/src/multimedia/platform/android/common/qandroidvideooutput.cpp b/src/multimedia/platform/android/common/qandroidvideooutput.cpp
index 9f8d29430..6508cb554 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);
diff --git a/tests/auto/integration/qmediaplayerbackend/testdata/BigBuckBunny.mp4 b/tests/auto/integration/qmediaplayerbackend/testdata/BigBuckBunny.mp4
index 8aa192503..6cf08011c 100644
--- a/tests/auto/integration/qmediaplayerbackend/testdata/BigBuckBunny.mp4
+++ b/tests/auto/integration/qmediaplayerbackend/testdata/BigBuckBunny.mp4
Binary files differ
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index 0cbee4ba8..afce5052f 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -93,6 +93,7 @@ private:
QUrl localWavFile2;
QUrl localVideoFile;
QUrl localVideoFile2;
+ QUrl videoDimensionTestFile;
QUrl localCompressedSoundFile;
QUrl localFileWithMetadata;
@@ -187,6 +188,10 @@ void tst_QMediaPlayerBackend::initTestCase()
localVideoFile2 = MediaFileSelector::selectMediaFile(mediaCandidates);
mediaCandidates.clear();
+ mediaCandidates << "qrc:/testdata/BigBuckBunny.mp4";
+ videoDimensionTestFile = MediaFileSelector::selectMediaFile(mediaCandidates);
+
+ mediaCandidates.clear();
mediaCandidates << "qrc:/testdata/nokia-tune.mp3";
mediaCandidates << "qrc:/testdata/nokia-tune.mkv";
localCompressedSoundFile = MediaFileSelector::selectMediaFile(mediaCandidates);
@@ -1224,12 +1229,14 @@ void tst_QMediaPlayerBackend::videoDimensions()
QEXPECT_FAIL("", "On Android isSeekable() is always set to true due to QTBUG-96952", Continue);
#endif
QVERIFY(!player.isSeekable());
- player.setSource(localVideoFile);
+ player.setSource(videoDimensionTestFile);
QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::LoadedMedia);
player.pause();
QTRY_COMPARE(surface.m_totalFrames, 1);
- QCOMPARE(surface.m_frameList.last().height(), 120);
- QCOMPARE(surface.videoSize().height(), 120);
+ QCOMPARE(surface.m_frameList.last().width(), 540);
+ QCOMPARE(surface.videoSize().width(), 540);
+ QCOMPARE(surface.m_frameList.last().height(), 320);
+ QCOMPARE(surface.videoSize().height(), 320);
}
void tst_QMediaPlayerBackend::position()