diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-04-27 13:09:18 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-05-03 07:05:45 +0000 |
commit | 89dafd3bd315d940a7a40e65f226eea8df0887e9 (patch) | |
tree | 289fa79aa6ab4b3863679703c2d36930db8b0082 /tests | |
parent | 884663bfbe07ddf2f5a7def27c024f49677471a8 (diff) |
Fix part of the QAudioOutput test failures on gstreamer
Change-Id: I016a84cdfcc93cee4c8c7b1b3c50588644a94566
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp | 120 |
1 files changed, 43 insertions, 77 deletions
diff --git a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp index bf5321aea..5a6a0ded7 100644 --- a/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp +++ b/tests/auto/integration/qaudiooutput/tst_qaudiooutput.cpp @@ -43,21 +43,6 @@ #define AUDIO_BUFFER 192000 -#ifndef QTRY_VERIFY2 -#define QTRY_VERIFY2(__expr,__msg) \ - do { \ - const int __step = 50; \ - const int __timeout = 5000; \ - if (!(__expr)) { \ - QTest::qWait(0); \ - } \ - for (int __i = 0; __i < __timeout && !(__expr); __i+=__step) { \ - QTest::qWait(__step); \ - } \ - QVERIFY2(__expr,__msg); \ - } while (0) -#endif - class tst_QAudioOutput : public QObject { Q_OBJECT @@ -172,7 +157,7 @@ void tst_QAudioOutput::generate_audiofile_testrows() QTest::addColumn<QAudioFormat>("audioFormat"); for (int i=0; i<audioFiles.count(); i++) { - QTest::newRow(QString("Audio File %1").arg(i).toLocal8Bit().constData()) + QTest::newRow(QString("Audio File %1").arg(i).toUtf8().constData()) << audioFiles.at(i) << testFormats.at(i); } @@ -194,13 +179,6 @@ void tst_QAudioOutput::initTestCase() if (audioDevice.isFormatSupported(audioDevice.preferredFormat())) testFormats.append(audioDevice.preferredFormat()); - // PCM 8000 mono S8 - format.setSampleRate(8000); - format.setSampleFormat(QAudioFormat::UInt8); - format.setChannelCount(1); - if (audioDevice.isFormatSupported(format)) - testFormats.append(format); - // PCM 11025 mono S16LE format.setSampleRate(11025); format.setSampleFormat(QAudioFormat::Int16); @@ -240,7 +218,7 @@ void tst_QAudioOutput::initTestCase() const QString temporaryAudioPath = m_temporaryDir->path() + slash; for (const QAudioFormat &format : qAsConst(testFormats)) { - qint64 len = format.sampleRate()*format.bytesPerFrame()*2; // 2 seconds + qint64 len = format.sampleRate()*format.bytesPerFrame(); // 1 second createSineWaveData(format, len); // Write generate sine wave data to file const QString fileName = temporaryAudioPath + QStringLiteral("generated") @@ -265,11 +243,11 @@ void tst_QAudioOutput::format() QAudioFormat actual = audioOutput.format(); QVERIFY2((requested.channelCount() == actual.channelCount()), - QString("channels: requested=%1, actual=%2").arg(requested.channelCount()).arg(actual.channelCount()).toLocal8Bit().constData()); + QString("channels: requested=%1, actual=%2").arg(requested.channelCount()).arg(actual.channelCount()).toUtf8().constData()); QVERIFY2((requested.sampleRate() == actual.sampleRate()), - QString("sampleRate: requested=%1, actual=%2").arg(requested.sampleRate()).arg(actual.sampleRate()).toLocal8Bit().constData()); + QString("sampleRate: requested=%1, actual=%2").arg(requested.sampleRate()).arg(actual.sampleRate()).toUtf8().constData()); QVERIFY2((requested.sampleFormat() == actual.sampleFormat()), - QString("sampleFormat: requested=%1, actual=%2").arg(requested.sampleFormat()).arg(actual.sampleFormat()).toLocal8Bit().constData()); + QString("sampleFormat: requested=%1, actual=%2").arg(requested.sampleFormat()).arg(actual.sampleFormat()).toUtf8().constData()); QVERIFY(requested == actual); } @@ -329,12 +307,12 @@ void tst_QAudioOutput::bufferSize() QFETCH(int, bufferSize); QAudioOutput audioOutput(audioDevice.preferredFormat(), this); - QVERIFY2((audioOutput.error() == QAudio::NoError), QString("error() was not set to QAudio::NoError on creation(%1)").arg(bufferSize).toLocal8Bit().constData()); + QVERIFY2((audioOutput.error() == QAudio::NoError), QString("error() was not set to QAudio::NoError on creation(%1)").arg(bufferSize).toUtf8().constData()); audioOutput.setBufferSize(bufferSize); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after setBufferSize"); QVERIFY2((audioOutput.bufferSize() == bufferSize), - QString("bufferSize: requested=%1, actual=%2").arg(bufferSize).arg(audioOutput.bufferSize()).toLocal8Bit().constData()); + QString("bufferSize: requested=%1, actual=%2").arg(bufferSize).arg(audioOutput.bufferSize()).toUtf8().constData()); } void tst_QAudioOutput::stopWhileStopped() @@ -406,7 +384,6 @@ void tst_QAudioOutput::pull() audioOutput.setVolume(0.1f); - QSignalSpy notifySignal(&audioOutput, SIGNAL(notify())); QSignalSpy stateSignal(&audioOutput, SIGNAL(stateChanged(QAudio::State))); // Check that we are in the default state before calling start @@ -422,7 +399,7 @@ void tst_QAudioOutput::pull() // Check that QAudioOutput immediately transitions to ActiveState QTRY_VERIFY2((stateSignal.count() == 1), - QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after start()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after start()"); QVERIFY(audioOutput.periodSize() > 0); @@ -444,14 +421,13 @@ void tst_QAudioOutput::pull() audioOutput.stop(); QTest::qWait(40); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::StoppedState), "didn't transitions to StoppedState after stop()"); - QVERIFY2((processedUs == 2000000), - QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toLocal8Bit().constData()); + QVERIFY2((processedUs == 1000000), + QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toUtf8().constData()); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after stop()"); QVERIFY2((audioOutput.elapsedUSecs() == (qint64)0), "elapsedUSecs() not equal to zero in StoppedState"); - QVERIFY2(notifySignal.count() > 0, "not emitting notify() signal"); audioFile->close(); } @@ -464,7 +440,6 @@ void tst_QAudioOutput::pullSuspendResume() audioOutput.setVolume(0.1f); - QSignalSpy notifySignal(&audioOutput, SIGNAL(notify())); QSignalSpy stateSignal(&audioOutput, SIGNAL(stateChanged(QAudio::State))); // Check that we are in the default state before calling start @@ -479,23 +454,21 @@ void tst_QAudioOutput::pullSuspendResume() audioOutput.start(audioFile.data()); // Check that QAudioOutput immediately transitions to ActiveState QTRY_VERIFY2((stateSignal.count() == 1), - QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after start()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after start()"); QVERIFY(audioOutput.periodSize() > 0); stateSignal.clear(); // Wait for half of clip to play - QTest::qWait(1000); + QTest::qWait(500); audioOutput.suspend(); - - // Give backends running in separate threads a chance to suspend. QTest::qWait(100); - QVERIFY2((stateSignal.count() == 1), + QTRY_VERIFY2((stateSignal.count() == 1), QString("didn't emit SuspendedState signal after suspend(), got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::SuspendedState), "didn't transition to SuspendedState after suspend()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after suspend()"); stateSignal.clear(); @@ -503,7 +476,7 @@ void tst_QAudioOutput::pullSuspendResume() // Check that only 'elapsed', and not 'processed' increases while suspended qint64 elapsedUs = audioOutput.elapsedUSecs(); qint64 processedUs = audioOutput.processedUSecs(); - QTest::qWait(1000); + QTest::qWait(100); QVERIFY(audioOutput.elapsedUSecs() > elapsedUs); QVERIFY(audioOutput.processedUSecs() == processedUs); @@ -511,16 +484,14 @@ void tst_QAudioOutput::pullSuspendResume() // Check that QAudioOutput immediately transitions to ActiveState QVERIFY2((stateSignal.count() == 1), - QString("didn't emit signal after resume(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal after resume(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after resume()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after resume()"); stateSignal.clear(); // Wait until playback finishes - QTest::qWait(3000); // 3 seconds should be plenty - - QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); - QVERIFY(stateSignal.count() > 0); + QTRY_VERIFY2(audioFile->atEnd(), "didn't play to EOF"); + QTRY_VERIFY(stateSignal.count() > 0); QCOMPARE(qvariant_cast<QAudio::State>(stateSignal.last().at(0)), QAudio::IdleState); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); @@ -530,11 +501,11 @@ void tst_QAudioOutput::pullSuspendResume() audioOutput.stop(); QTest::qWait(40); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::StoppedState), "didn't transitions to StoppedState after stop()"); - QVERIFY2((processedUs == 2000000), - QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toLocal8Bit().constData()); + QVERIFY2((processedUs == 1000000), + QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toUtf8().constData()); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after stop()"); QVERIFY2((audioOutput.elapsedUSecs() == (qint64)0), "elapsedUSecs() not equal to zero in StoppedState"); @@ -550,7 +521,6 @@ void tst_QAudioOutput::push() audioOutput.setVolume(0.1f); - QSignalSpy notifySignal(&audioOutput, SIGNAL(notify())); QSignalSpy stateSignal(&audioOutput, SIGNAL(stateChanged(QAudio::State))); // Check that we are in the default state before calling start @@ -566,7 +536,7 @@ void tst_QAudioOutput::push() // Check that QAudioOutput immediately transitions to IdleState QTRY_VERIFY2((stateSignal.count() == 1), - QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transition to IdleState after start()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after start()"); QVERIFY(audioOutput.periodSize() > 0); @@ -591,7 +561,7 @@ void tst_QAudioOutput::push() // Check for transition to ActiveState when data is provided QVERIFY2((stateSignal.count() == 1), QString("didn't emit signal after receiving data, got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after receiving data"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after receiving data"); firstBuffer = false; @@ -602,10 +572,9 @@ void tst_QAudioOutput::push() } // Wait until playback finishes - QTest::qWait(3000); // 3 seconds should be plenty - QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); - QVERIFY(stateSignal.count() > 0); + QTRY_VERIFY(audioOutput.state() == QAudio::IdleState); + QTRY_VERIFY(stateSignal.count() > 0); QCOMPARE(qvariant_cast<QAudio::State>(stateSignal.last().at(0)), QAudio::IdleState); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); @@ -615,14 +584,13 @@ void tst_QAudioOutput::push() audioOutput.stop(); QTest::qWait(40); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::StoppedState), "didn't transitions to StoppedState after stop()"); - QVERIFY2((processedUs == 2000000), - QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toLocal8Bit().constData()); + QVERIFY2((processedUs == 1000000), + QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toUtf8().constData()); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after stop()"); QVERIFY2((audioOutput.elapsedUSecs() == (qint64)0), "elapsedUSecs() not equal to zero in StoppedState"); - QVERIFY2(notifySignal.count() > 0, "not emitting notify signal"); audioFile->close(); } @@ -636,7 +604,6 @@ void tst_QAudioOutput::pushSuspendResume() audioOutput.setVolume(0.1f); - QSignalSpy notifySignal(&audioOutput, SIGNAL(notify())); QSignalSpy stateSignal(&audioOutput, SIGNAL(stateChanged(QAudio::State))); // Check that we are in the default state before calling start @@ -652,7 +619,7 @@ void tst_QAudioOutput::pushSuspendResume() // Check that QAudioOutput immediately transitions to IdleState QTRY_VERIFY2((stateSignal.count() == 1), - QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transition to IdleState after start()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after start()"); QVERIFY(audioOutput.periodSize() > 0); @@ -678,7 +645,7 @@ void tst_QAudioOutput::pushSuspendResume() // Check for transition to ActiveState when data is provided QVERIFY2((stateSignal.count() == 1), QString("didn't emit signal after receiving data, got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after receiving data"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after receiving data"); firstBuffer = false; @@ -695,7 +662,7 @@ void tst_QAudioOutput::pushSuspendResume() QVERIFY2((stateSignal.count() == 1), QString("didn't emit SuspendedState signal after suspend(), got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::SuspendedState), "didn't transition to SuspendedState after suspend()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after suspend()"); stateSignal.clear(); @@ -715,7 +682,7 @@ void tst_QAudioOutput::pushSuspendResume() // Check that QAudioOutput immediately transitions to IdleState QVERIFY2((stateSignal.count() == 1), - QString("didn't emit signal after resume(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal after resume(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transition to IdleState after resume()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after resume()"); stateSignal.clear(); @@ -745,11 +712,11 @@ void tst_QAudioOutput::pushSuspendResume() audioOutput.stop(); QTest::qWait(40); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::StoppedState), "didn't transitions to StoppedState after stop()"); - QVERIFY2((processedUs == 2000000), - QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toLocal8Bit().constData()); + QVERIFY2((processedUs == 1000000), + QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toUtf8().constData()); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after stop()"); QVERIFY2((audioOutput.elapsedUSecs() == (qint64)0), "elapsedUSecs() not equal to zero in StoppedState"); @@ -765,7 +732,6 @@ void tst_QAudioOutput::pushUnderrun() audioOutput.setVolume(0.1f); - QSignalSpy notifySignal(&audioOutput, SIGNAL(notify())); QSignalSpy stateSignal(&audioOutput, SIGNAL(stateChanged(QAudio::State))); // Check that we are in the default state before calling start @@ -781,7 +747,7 @@ void tst_QAudioOutput::pushUnderrun() // Check that QAudioOutput immediately transitions to IdleState QTRY_VERIFY2((stateSignal.count() == 1), - QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit signal on start(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transition to IdleState after start()"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after start()"); QVERIFY(audioOutput.periodSize() > 0); @@ -807,7 +773,7 @@ void tst_QAudioOutput::pushUnderrun() // Check for transition to ActiveState when data is provided QVERIFY2((stateSignal.count() == 1), QString("didn't emit signal after receiving data, got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after receiving data"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after receiving data"); firstBuffer = false; @@ -822,7 +788,7 @@ void tst_QAudioOutput::pushUnderrun() QVERIFY2((stateSignal.count() == 1), QString("didn't emit IdleState signal after suspend(), got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transition to IdleState, no data"); QVERIFY2((audioOutput.error() == QAudio::UnderrunError), "error state is not equal to QAudio::UnderrunError, no data"); stateSignal.clear(); @@ -837,7 +803,7 @@ void tst_QAudioOutput::pushUnderrun() // Check for transition to ActiveState when data is provided QVERIFY2((stateSignal.count() == 1), QString("didn't emit signal after receiving data, got %1 signals instead") - .arg(stateSignal.count()).toLocal8Bit().constData()); + .arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::ActiveState), "didn't transition to ActiveState after receiving data"); QVERIFY2((audioOutput.error() == QAudio::NoError), "error state is not equal to QAudio::NoError after receiving data"); firstBuffer = false; @@ -852,7 +818,7 @@ void tst_QAudioOutput::pushUnderrun() QVERIFY2(audioFile->atEnd(), "didn't play to EOF"); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit IdleState signal when at EOF, got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit IdleState signal when at EOF, got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::IdleState), "didn't transitions to IdleState when at EOF"); stateSignal.clear(); @@ -861,11 +827,11 @@ void tst_QAudioOutput::pushUnderrun() audioOutput.stop(); QTest::qWait(40); QVERIFY2((stateSignal.count() == 1), - QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toLocal8Bit().constData()); + QString("didn't emit StoppedState signal after stop(), got %1 signals instead").arg(stateSignal.count()).toUtf8().constData()); QVERIFY2((audioOutput.state() == QAudio::StoppedState), "didn't transitions to StoppedState after stop()"); QVERIFY2((processedUs == 2000000), - QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toLocal8Bit().constData()); + QString("processedUSecs() doesn't equal file duration in us (%1)").arg(processedUs).toUtf8().constData()); QVERIFY2((audioOutput.error() == QAudio::NoError), "error() is not QAudio::NoError after stop()"); QVERIFY2((audioOutput.elapsedUSecs() == (qint64)0), "elapsedUSecs() not equal to zero in StoppedState"); |