diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-04-30 17:20:52 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-07 11:10:15 +0000 |
commit | 6f0de93bd6e41a0a0393d07b20a6f4af90193ab0 (patch) | |
tree | 62fda1bddcf08b5e7065e5ba3eed0a5b322da62a /tests | |
parent | 7b965a3d68423ab612e6ef9219a528b73fcaa2d9 (diff) |
Pass the remaining mediaplayerbackend autotests
* Add a notification mechanism to the pipeline so
the video output knows when QMediaPlayer is in
a stopped state (using QProperty), as we want the
pipeline to be in a paused state internally, but
not get preroll frames if we're in paused externally.
* Properly emit metadataChanged() signals, and ensure
we're in GST_STATE_PAUSED before trying a seek.
Change-Id: I1cad557e648f82909a63cba8d6144df8476524f5
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp | 77 |
1 files changed, 38 insertions, 39 deletions
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp index 01269aaa7..af26ac2e0 100644 --- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp +++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp @@ -594,7 +594,7 @@ void tst_QMediaPlayerBackend::deleteLaterAtEOS() // DeferredDelete events during the wait, which interferes with this test. QEventLoop loop; QTimer::singleShot(0, &deleter, SLOT(play())); - QTimer::singleShot(5000, &loop, SLOT(quit())); + QTimer::singleShot(1500, &loop, SLOT(quit())); connect(player.data(), SIGNAL(destroyed()), &loop, SLOT(quit())); loop.exec(); // Verify that the player was destroyed within the event loop. @@ -741,19 +741,21 @@ void tst_QMediaPlayerBackend::seekPauseSeek() player.setSource(localVideoFile); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); + QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::LoadedMedia); QVERIFY(surface->m_frameList.isEmpty()); // frame must not appear until we call pause() or play() positionSpy.clear(); qint64 position = 7000; player.setPosition(position); - QTRY_VERIFY(!positionSpy.isEmpty() && qAbs(player.position() - position) < (qint64)500); + QTRY_VERIFY(!positionSpy.isEmpty()); + QTRY_COMPARE(player.position(), position); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); QTest::qWait(250); // wait a bit to ensure the frame is not rendered QVERIFY(surface->m_frameList.isEmpty()); // still no frame, we must call pause() or play() to see a frame player.pause(); QTRY_COMPARE(player.playbackState(), QMediaPlayer::PausedState); // it might take some time for the operation to be completed - QTRY_VERIFY_WITH_TIMEOUT(!surface->m_frameList.isEmpty(), 10000); // we must see a frame at position 7000 here + QTRY_VERIFY(!surface->m_frameList.isEmpty()); // we must see a frame at position 7000 here // Make sure that the frame has a timestamp before testing - not all backends provides this if (!surface->m_frameList.back().isValid() || surface->m_frameList.back().startTime() < 0) @@ -767,13 +769,11 @@ void tst_QMediaPlayerBackend::seekPauseSeek() QCOMPARE(frame.height(), 120); // create QImage for QVideoFrame to verify RGB pixel colors - QVERIFY(frame.map(QVideoFrame::ReadOnly)); - QImage image(frame.bits(), frame.width(), frame.height(), QVideoFrameFormat::imageFormatFromPixelFormat(frame.pixelFormat())); + QImage image = frame.toImage(); QVERIFY(!image.isNull()); QVERIFY(qRed(image.pixel(0, 0)) >= 230); // conversion from YUV => RGB, that's why it's not 255 QVERIFY(qGreen(image.pixel(0, 0)) < 20); QVERIFY(qBlue(image.pixel(0, 0)) < 20); - frame.unmap(); } surface->m_frameList.clear(); @@ -782,7 +782,7 @@ void tst_QMediaPlayerBackend::seekPauseSeek() player.setPosition(position); QTRY_VERIFY(!positionSpy.isEmpty() && qAbs(player.position() - position) < (qint64)500); QCOMPARE(player.playbackState(), QMediaPlayer::PausedState); - QVERIFY(!surface->m_frameList.isEmpty()); + QTRY_VERIFY(!surface->m_frameList.isEmpty()); { QVideoFrame frame = surface->m_frameList.back(); @@ -791,13 +791,11 @@ void tst_QMediaPlayerBackend::seekPauseSeek() QCOMPARE(frame.width(), 160); QCOMPARE(frame.height(), 120); - QVERIFY(frame.map(QVideoFrame::ReadOnly)); - QImage image(frame.bits(), frame.width(), frame.height(), QVideoFrameFormat::imageFormatFromPixelFormat(frame.pixelFormat())); + QImage image = frame.toImage(); QVERIFY(!image.isNull()); QVERIFY(qRed(image.pixel(0, 0)) < 20); QVERIFY(qGreen(image.pixel(0, 0)) >= 230); QVERIFY(qBlue(image.pixel(0, 0)) < 20); - frame.unmap(); } } @@ -808,7 +806,7 @@ void tst_QMediaPlayerBackend::seekInStoppedState() QMediaPlayer player; - QSignalSpy stateSpy(&player, SIGNAL(stateChanged(QMediaPlayer::State))); + QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState))); QSignalSpy positionSpy(&player, SIGNAL(positionChanged(qint64))); player.setSource(localVideoFile); @@ -823,9 +821,9 @@ void tst_QMediaPlayerBackend::seekInStoppedState() qint64 position = 5000; player.setPosition(position); - QTRY_VERIFY(qAbs(player.position() - position) < qint64(500)); + QTRY_VERIFY(qAbs(player.position() - position) < qint64(200)); QCOMPARE(positionSpy.count(), 1); - QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(500)); + QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(200)); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); QCOMPARE(stateSpy.count(), 0); @@ -837,14 +835,14 @@ void tst_QMediaPlayerBackend::seekInStoppedState() player.play(); QCOMPARE(player.playbackState(), QMediaPlayer::PlayingState); - QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia); - QVERIFY(qAbs(player.position() - position) < qint64(500)); + QTRY_VERIFY(player.position() > position); + QCOMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia); - QTest::qWait(2000); + QTest::qWait(100); // Check that it never played from the beginning - QVERIFY(player.position() > (position - 500)); + QVERIFY(player.position() > position); for (int i = 0; i < positionSpy.count(); ++i) - QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 500)); + QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 200)); // ------ // Same tests but after play() --> stop() @@ -859,9 +857,9 @@ void tst_QMediaPlayerBackend::seekInStoppedState() player.setPosition(position); - QTRY_VERIFY(qAbs(player.position() - position) < qint64(500)); + QTRY_VERIFY(qAbs(player.position() - position) < qint64(200)); QCOMPARE(positionSpy.count(), 1); - QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(500)); + QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(200)); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); QCOMPARE(stateSpy.count(), 0); @@ -874,30 +872,30 @@ void tst_QMediaPlayerBackend::seekInStoppedState() QCOMPARE(player.playbackState(), QMediaPlayer::PlayingState); QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia); - QVERIFY(qAbs(player.position() - position) < qint64(500)); + QVERIFY(qAbs(player.position() - position) < qint64(200)); - QTest::qWait(2000); + QTest::qWait(500); // Check that it never played from the beginning - QVERIFY(player.position() > (position - 500)); + QVERIFY(player.position() > (position - 200)); for (int i = 0; i < positionSpy.count(); ++i) - QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 500)); + QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 200)); // ------ // Same tests but after reaching the end of the media - player.setPosition(player.duration() - 500); + player.setPosition(player.duration() - 100); QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); - QCOMPARE(player.position(), player.duration()); + QVERIFY(qAbs(player.position() - player.duration()) < 10); stateSpy.clear(); positionSpy.clear(); player.setPosition(position); - QTRY_VERIFY(qAbs(player.position() - position) < qint64(500)); + QTRY_VERIFY(qAbs(player.position() - position) < qint64(200)); QCOMPARE(positionSpy.count(), 1); - QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(500)); + QVERIFY(qAbs(positionSpy.last()[0].value<qint64>() - position) < qint64(200)); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); QCOMPARE(stateSpy.count(), 0); @@ -909,14 +907,14 @@ void tst_QMediaPlayerBackend::seekInStoppedState() player.play(); QCOMPARE(player.playbackState(), QMediaPlayer::PlayingState); - QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia); - QVERIFY(qAbs(player.position() - position) < qint64(500)); + QVERIFY(player.position() >= position - 200); + QCOMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia); - QTest::qWait(2000); + QTest::qWait(500); // Check that it never played from the beginning - QVERIFY(player.position() > (position - 500)); + QVERIFY(player.position() > (position - 200)); for (int i = 0; i < positionSpy.count(); ++i) - QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 500)); + QVERIFY(positionSpy.at(i)[0].value<qint64>() > (position - 200)); } void tst_QMediaPlayerBackend::subsequentPlayback() @@ -926,11 +924,12 @@ void tst_QMediaPlayerBackend::subsequentPlayback() QMediaPlayer player; player.setSource(localCompressedSoundFile); + player.setPosition(5000); player.play(); QCOMPARE(player.error(), QMediaPlayer::NoError); QTRY_COMPARE(player.playbackState(), QMediaPlayer::PlayingState); - QTRY_COMPARE_WITH_TIMEOUT(player.mediaStatus(), QMediaPlayer::EndOfMedia, 15000); + QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia); QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState); // Could differ by up to 1 compressed frame length QVERIFY(qAbs(player.position() - player.duration()) < 100); @@ -938,20 +937,20 @@ void tst_QMediaPlayerBackend::subsequentPlayback() player.play(); QTRY_COMPARE(player.playbackState(), QMediaPlayer::PlayingState); - QTRY_VERIFY_WITH_TIMEOUT(player.position() > 2000 && player.position() < 5000, 10000); + QTRY_VERIFY(player.position() > 1000); player.pause(); QCOMPARE(player.playbackState(), QMediaPlayer::PausedState); // make sure position does not "jump" closer to the end of the file - QVERIFY(player.position() > 2000 && player.position() < 5000); + QVERIFY(player.position() > 1000); // try to seek back to zero player.setPosition(0); QTRY_COMPARE(player.position(), qint64(0)); player.play(); QCOMPARE(player.playbackState(), QMediaPlayer::PlayingState); - QTRY_VERIFY_WITH_TIMEOUT(player.position() > 2000 && player.position() < 5000, 10000); + QTRY_VERIFY(player.position() > 1000); player.pause(); QCOMPARE(player.playbackState(), QMediaPlayer::PausedState); - QVERIFY(player.position() > 2000 && player.position() < 5000); + QVERIFY(player.position() > 1000); } void tst_QMediaPlayerBackend::surfaceTest() @@ -998,7 +997,7 @@ void tst_QMediaPlayerBackend::metadata() player.setSource(localFileWithMetadata); - QVERIFY(metadataChangedSpy.count() > 0); + QTRY_VERIFY(metadataChangedSpy.count() > 0); QCOMPARE(player.metaData().value(QMediaMetaData::Title).toString(), QStringLiteral("Nokia Tune")); QCOMPARE(player.metaData().value(QMediaMetaData::ContributingArtist).toString(), QStringLiteral("TestArtist")); |