summaryrefslogtreecommitdiffstats
path: root/tests/auto/integration
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/integration')
-rw-r--r--tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp101
-rw-r--r--tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp28
-rw-r--r--tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp116
-rw-r--r--tests/auto/integration/shared/mediafileselector.h3
4 files changed, 192 insertions, 56 deletions
diff --git a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
index b3ccb0a10..8a948e905 100644
--- a/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
+++ b/tests/auto/integration/qaudiodecoderbackend/tst_qaudiodecoderbackend.cpp
@@ -35,6 +35,7 @@
#define TEST_FILE_NAME "testdata/test.wav"
#define TEST_UNSUPPORTED_FILE_NAME "testdata/test-unsupported.avi"
#define TEST_CORRUPTED_FILE_NAME "testdata/test-corrupted.wav"
+#define TEST_INVALID_SOURCE "invalid"
QT_USE_NAMESPACE
@@ -57,6 +58,7 @@ private slots:
void fileTest();
void unsupportedFileTest();
void corruptedFileTest();
+ void invalidSource();
void deviceTest();
private:
@@ -139,8 +141,10 @@ void tst_QAudioDecoderBackend::fileTest()
QCOMPARE(buffer.format().sampleFormat(), QAudioFormat::Int16);
QCOMPARE(buffer.byteCount(), buffer.sampleCount() * 2); // 16bit mono
- // The decoder should still have no format set
- QVERIFY(d.audioFormat() == QAudioFormat());
+ // This does not make a lot of sense
+ // The decoder's audioFormat() should report the actual buffer format?
+ // // The decoder should still have no format set
+ // QVERIFY(d.audioFormat() == QAudioFormat());
QVERIFY(errorSpy.isEmpty());
@@ -425,6 +429,98 @@ void tst_QAudioDecoderBackend::corruptedFileTest()
QVERIFY(!d.bufferAvailable());
}
+void tst_QAudioDecoderBackend::invalidSource()
+{
+ QAudioDecoder d;
+ if (d.error() == QAudioDecoder::NotSupportedError)
+ QSKIP("There is no audio decoding support on this platform.");
+ QAudioBuffer buffer;
+
+ QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(d.bufferAvailable() == false);
+ QCOMPARE(d.source(), QUrl());
+ QVERIFY(d.audioFormat() == QAudioFormat());
+
+ // Test invalid file source
+ QFileInfo fileInfo(TEST_INVALID_SOURCE);
+ QUrl url = QUrl::fromLocalFile(fileInfo.absoluteFilePath());
+ d.setSource(url);
+ QVERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.bufferAvailable());
+ QCOMPARE(d.source(), url);
+
+ QSignalSpy readySpy(&d, SIGNAL(bufferReady()));
+ QSignalSpy bufferChangedSpy(&d, SIGNAL(bufferAvailableChanged(bool)));
+ QSignalSpy errorSpy(&d, SIGNAL(error(QAudioDecoder::Error)));
+ QSignalSpy stateSpy(&d, SIGNAL(stateChanged(QAudioDecoder::State)));
+ QSignalSpy durationSpy(&d, SIGNAL(durationChanged(qint64)));
+ QSignalSpy finishedSpy(&d, SIGNAL(finished()));
+ QSignalSpy positionSpy(&d, SIGNAL(positionChanged(qint64)));
+
+ d.start();
+ QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.bufferAvailable());
+ QCOMPARE(d.audioFormat(), QAudioFormat());
+ QCOMPARE(d.duration(), qint64(-1));
+ QCOMPARE(d.position(), qint64(-1));
+
+ // Check the error code.
+ QTRY_VERIFY(!errorSpy.isEmpty());
+
+ // Have to use qvariant_cast, toInt will return 0 because unrecognized type;
+ QAudioDecoder::Error errorCode = qvariant_cast<QAudioDecoder::Error>(errorSpy.takeLast().at(0));
+ QCOMPARE(errorCode, QAudioDecoder::ResourceError);
+ QCOMPARE(d.error(), QAudioDecoder::ResourceError);
+
+ // Check all other spies.
+ QVERIFY(readySpy.isEmpty());
+ QVERIFY(bufferChangedSpy.isEmpty());
+ QVERIFY(stateSpy.isEmpty());
+ QVERIFY(finishedSpy.isEmpty());
+ QVERIFY(positionSpy.isEmpty());
+ QVERIFY(durationSpy.isEmpty());
+
+ errorSpy.clear();
+
+ d.stop();
+ QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QCOMPARE(d.duration(), qint64(-1));
+ QVERIFY(!d.bufferAvailable());
+
+ QFile file;
+ file.setFileName(TEST_INVALID_SOURCE);
+ file.open(QIODevice::ReadOnly);
+ d.setSourceDevice(&file);
+
+ d.start();
+ QTRY_VERIFY(d.state() == QAudioDecoder::StoppedState);
+ QVERIFY(!d.bufferAvailable());
+ QCOMPARE(d.audioFormat(), QAudioFormat());
+ QCOMPARE(d.duration(), qint64(-1));
+ QCOMPARE(d.position(), qint64(-1));
+
+ // Check the error code.
+ QTRY_VERIFY(!errorSpy.isEmpty());
+ errorCode = qvariant_cast<QAudioDecoder::Error>(errorSpy.takeLast().at(0));
+ QCOMPARE(errorCode, QAudioDecoder::AccessDeniedError);
+ QCOMPARE(d.error(), QAudioDecoder::AccessDeniedError);
+
+ // Check all other spies.
+ QVERIFY(readySpy.isEmpty());
+ QVERIFY(bufferChangedSpy.isEmpty());
+ QVERIFY(stateSpy.isEmpty());
+ QVERIFY(finishedSpy.isEmpty());
+ QVERIFY(positionSpy.isEmpty());
+ QVERIFY(durationSpy.isEmpty());
+
+ errorSpy.clear();
+
+ d.stop();
+ QTRY_COMPARE(d.state(), QAudioDecoder::StoppedState);
+ QCOMPARE(d.duration(), qint64(-1));
+ QVERIFY(!d.bufferAvailable());
+}
+
void tst_QAudioDecoderBackend::deviceTest()
{
if (!isWavSupported())
@@ -462,6 +558,7 @@ void tst_QAudioDecoderBackend::deviceTest()
QVERIFY(d.audioFormat() == QAudioFormat());
d.start();
+
QTRY_VERIFY(d.state() == QAudioDecoder::DecodingState);
QTRY_VERIFY(!stateSpy.isEmpty());
QTRY_VERIFY(!readySpy.isEmpty());
diff --git a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
index 5a653c1f8..428c06dcb 100644
--- a/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
+++ b/tests/auto/integration/qcamerabackend/tst_qcamerabackend.cpp
@@ -40,7 +40,7 @@
#include <qmediacapturesession.h>
#include <qobject.h>
#include <qmediadevices.h>
-#include <qmediaencoder.h>
+#include <qmediarecorder.h>
QT_USE_NAMESPACE
@@ -446,24 +446,26 @@ void tst_QCameraBackend::testVideoRecording_data()
void tst_QCameraBackend::testVideoRecording()
{
+ if (noCamera)
+ QSKIP("No camera available");
QFETCH(QCameraDevice, device);
QMediaCaptureSession session;
QScopedPointer<QCamera> camera(new QCamera(device));
session.setCamera(camera.data());
- QMediaEncoder recorder;
+ QMediaRecorder recorder;
session.setEncoder(&recorder);
QSignalSpy errorSignal(camera.data(), SIGNAL(errorOccurred(QCamera::Error, const QString &)));
- QSignalSpy recorderErrorSignal(&recorder, SIGNAL(errorOccurred(QMediaEncoder::Error, const QString &)));
- QSignalSpy recorderStatusSignal(&recorder, SIGNAL(statusChanged(QMediaEncoder::Status)));
+ QSignalSpy recorderErrorSignal(&recorder, SIGNAL(errorOccurred(Error, const QString &)));
+ QSignalSpy recorderStatusSignal(&recorder, SIGNAL(statusChanged(Status)));
QMediaEncoderSettings videoSettings;
videoSettings.setVideoResolution(320, 240);
recorder.setEncoderSettings(videoSettings);
- QCOMPARE(recorder.status(), QMediaEncoder::StoppedStatus);
+ QCOMPARE(recorder.status(), QMediaRecorder::StoppedStatus);
camera->start();
if (noCamera || device.isNull()) {
@@ -473,26 +475,26 @@ void tst_QCameraBackend::testVideoRecording()
QTRY_VERIFY(camera->isActive());
QTRY_COMPARE(camera->status(), QCamera::ActiveStatus);
- QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus);
+ QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus);
for (int recordings = 0; recordings < 2; ++recordings) {
//record 200ms clip
recorder.record();
- QTRY_COMPARE(recorder.status(), QMediaEncoder::RecordingStatus);
- QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status());
+ QTRY_COMPARE(recorder.status(), QMediaRecorder::RecordingStatus);
+ QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status());
QTest::qWait(200);
recorderStatusSignal.clear();
recorder.stop();
bool foundFinalizingStatus = false;
for (auto &list : recorderStatusSignal) {
- if (qvariant_cast<QMediaEncoder::Status>(list.first()) == QMediaEncoder::FinalizingStatus) {
+ if (qvariant_cast<QMediaRecorder::Status>(list.first()) == QMediaRecorder::FinalizingStatus) {
foundFinalizingStatus = true;
break;
}
}
QVERIFY(foundFinalizingStatus);
- QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus);
- QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status());
+ QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus);
+ QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status());
QVERIFY(errorSignal.isEmpty());
QVERIFY(recorderErrorSignal.isEmpty());
@@ -503,8 +505,8 @@ void tst_QCameraBackend::testVideoRecording()
QVERIFY(QFileInfo(fileName).size() > 0);
QFile(fileName).remove();
- QTRY_COMPARE(recorder.status(), QMediaEncoder::StoppedStatus);
- QCOMPARE(recorderStatusSignal.last().first().value<QMediaEncoder::Status>(), recorder.status());
+ QTRY_COMPARE(recorder.status(), QMediaRecorder::StoppedStatus);
+ QCOMPARE(recorderStatusSignal.last().first().value<QMediaRecorder::Status>(), recorder.status());
}
}
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index 5200edb40..0a4897c25 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -34,6 +34,7 @@
#include <qaudiobuffer.h>
#include <qvideosink.h>
#include <qvideoframe.h>
+#include <qaudiooutput.h>
#include "../shared/mediafileselector.h"
//TESTED_COMPONENT=src/multimedia
@@ -200,6 +201,8 @@ void tst_QMediaPlayerBackend::loadMedia()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QCOMPARE(player.playbackState(), QMediaPlayer::StoppedState);
QCOMPARE(player.mediaStatus(), QMediaPlayer::NoMedia);
@@ -233,6 +236,8 @@ void tst_QMediaPlayerBackend::unloadMedia()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState)));
QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
@@ -278,6 +283,8 @@ void tst_QMediaPlayerBackend::loadMediaInLoadingState()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
player.setSource(localWavFile2);
QCOMPARE(player.mediaStatus(), QMediaPlayer::LoadingMedia);
QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::LoadedMedia);
@@ -298,6 +305,8 @@ void tst_QMediaPlayerBackend::playPauseStop()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState)));
QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
@@ -452,6 +461,8 @@ void tst_QMediaPlayerBackend::processEOS()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState)));
QSignalSpy statusSpy(&player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
@@ -586,6 +597,8 @@ void tst_QMediaPlayerBackend::deleteLaterAtEOS()
QSKIP("Sound format is not supported");
QPointer<QMediaPlayer> player(new QMediaPlayer);
+ QAudioOutput output;
+ player->setAudioOutput(&output);
DeleteLaterAtEos deleter(player);
player->setSource(localWavFile);
@@ -606,46 +619,48 @@ void tst_QMediaPlayerBackend::volumeAndMuted()
{
//volume and muted properties should be independent
QMediaPlayer player;
- QVERIFY(player.volume() > 0);
- QVERIFY(!player.isMuted());
+ QAudioOutput output;
+ player.setAudioOutput(&output);
+ QCOMPARE(output.volume(), 1.);
+ QVERIFY(!output.isMuted());
player.setSource(localWavFile);
player.pause();
- QVERIFY(player.volume() > 0);
- QVERIFY(!player.isMuted());
+ QCOMPARE(output.volume(), 1.);
+ QVERIFY(!output.isMuted());
- QSignalSpy volumeSpy(&player, SIGNAL(volumeChanged(int)));
- QSignalSpy mutedSpy(&player, SIGNAL(mutedChanged(bool)));
+ QSignalSpy volumeSpy(&output, SIGNAL(volumeChanged(float)));
+ QSignalSpy mutedSpy(&output, SIGNAL(mutedChanged(bool)));
//setting volume to 0 should not trigger muted
- player.setVolume(0);
- QTRY_COMPARE(player.volume(), 0);
- QVERIFY(!player.isMuted());
+ output.setVolume(0);
+ QTRY_COMPARE(output.volume(), 0);
+ QVERIFY(!output.isMuted());
QCOMPARE(volumeSpy.count(), 1);
- QCOMPARE(volumeSpy.last()[0].toInt(), player.volume());
+ QCOMPARE(volumeSpy.last()[0].toFloat(), output.volume());
QCOMPARE(mutedSpy.count(), 0);
- player.setVolume(50);
- QTRY_COMPARE(player.volume(), 50);
- QVERIFY(!player.isMuted());
+ output.setVolume(0.5);
+ QTRY_COMPARE(output.volume(), 0.5);
+ QVERIFY(!output.isMuted());
QCOMPARE(volumeSpy.count(), 2);
- QCOMPARE(volumeSpy.last()[0].toInt(), player.volume());
+ QCOMPARE(volumeSpy.last()[0].toFloat(), output.volume());
QCOMPARE(mutedSpy.count(), 0);
- player.setMuted(true);
- QTRY_VERIFY(player.isMuted());
- QVERIFY(player.volume() > 0);
+ output.setMuted(true);
+ QTRY_VERIFY(output.isMuted());
+ QVERIFY(output.volume() > 0);
QCOMPARE(volumeSpy.count(), 2);
QCOMPARE(mutedSpy.count(), 1);
- QCOMPARE(mutedSpy.last()[0].toBool(), player.isMuted());
+ QCOMPARE(mutedSpy.last()[0].toBool(), output.isMuted());
- player.setMuted(false);
- QTRY_VERIFY(!player.isMuted());
- QVERIFY(player.volume() > 0);
+ output.setMuted(false);
+ QTRY_VERIFY(!output.isMuted());
+ QVERIFY(output.volume() > 0);
QCOMPARE(volumeSpy.count(), 2);
QCOMPARE(mutedSpy.count(), 2);
- QCOMPARE(mutedSpy.last()[0].toBool(), player.isMuted());
+ QCOMPARE(mutedSpy.last()[0].toBool(), output.isMuted());
}
@@ -666,40 +681,43 @@ void tst_QMediaPlayerBackend::volumeAcrossFiles()
{
QFETCH(int, volume);
QFETCH(bool, muted);
+ float vol = volume/100.;
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
//volume and muted should not be preserved between player instances
- QVERIFY(player.volume() > 0);
- QVERIFY(!player.isMuted());
+ QVERIFY(output.volume() > 0);
+ QVERIFY(!output.isMuted());
- player.setVolume(volume);
- player.setMuted(muted);
+ output.setVolume(vol);
+ output.setMuted(muted);
- QTRY_COMPARE(player.volume(), volume);
- QTRY_COMPARE(player.isMuted(), muted);
+ QTRY_COMPARE(output.volume(), vol);
+ QTRY_COMPARE(output.isMuted(), muted);
player.setSource(localWavFile);
- QCOMPARE(player.volume(), volume);
- QCOMPARE(player.isMuted(), muted);
+ QCOMPARE(output.volume(), vol);
+ QCOMPARE(output.isMuted(), muted);
player.pause();
//to ensure the backend doesn't change volume/muted
//async during file loading.
- QTRY_COMPARE(player.volume(), volume);
- QCOMPARE(player.isMuted(), muted);
+ QTRY_COMPARE(output.volume(), vol);
+ QCOMPARE(output.isMuted(), muted);
player.setSource(QUrl());
- QTRY_COMPARE(player.volume(), volume);
- QCOMPARE(player.isMuted(), muted);
+ QTRY_COMPARE(output.volume(), vol);
+ QCOMPARE(output.isMuted(), muted);
player.setSource(localWavFile);
player.pause();
- QTRY_COMPARE(player.volume(), volume);
- QCOMPARE(player.isMuted(), muted);
+ QTRY_COMPARE(output.volume(), vol);
+ QCOMPARE(output.isMuted(), muted);
}
void tst_QMediaPlayerBackend::initialVolume()
@@ -709,21 +727,25 @@ void tst_QMediaPlayerBackend::initialVolume()
{
QMediaPlayer player;
- player.setVolume(1);
+ QAudioOutput output;
+ player.setAudioOutput(&output);
+ output.setVolume(1);
player.setSource(localWavFile);
- QCOMPARE(player.volume(), 1);
+ QCOMPARE(output.volume(), 1);
player.play();
QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia);
- QCOMPARE(player.volume(), 1);
+ QCOMPARE(output.volume(), 1);
}
{
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
player.setSource(localWavFile);
- QCOMPARE(player.volume(), 100);
+ QCOMPARE(output.volume(), 1);
player.play();
QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::EndOfMedia);
- QCOMPARE(player.volume(), 100);
+ QCOMPARE(output.volume(), 1);
}
}
@@ -733,6 +755,8 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
QSKIP("No supported video file");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy positionSpy(&player, SIGNAL(positionChanged(qint64)));
@@ -805,6 +829,8 @@ void tst_QMediaPlayerBackend::seekInStoppedState()
QSKIP("No supported video file");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy stateSpy(&player, SIGNAL(playbackStateChanged(QMediaPlayer::PlaybackState)));
QSignalSpy positionSpy(&player, SIGNAL(positionChanged(qint64)));
@@ -923,6 +949,8 @@ void tst_QMediaPlayerBackend::subsequentPlayback()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
player.setSource(localCompressedSoundFile);
player.setPosition(5000);
player.play();
@@ -961,6 +989,8 @@ void tst_QMediaPlayerBackend::surfaceTest()
TestVideoSink surface(false);
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
player.setVideoOutput(&surface);
player.setSource(localVideoFile);
player.play();
@@ -994,6 +1024,8 @@ void tst_QMediaPlayerBackend::metadata()
QSKIP("No supported media file");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy metadataChangedSpy(&player, SIGNAL(metaDataChanged()));
@@ -1019,6 +1051,8 @@ void tst_QMediaPlayerBackend::playerStateAtEOS()
QSKIP("Sound format is not supported");
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
bool endOfMediaReceived = false;
connect(&player, &QMediaPlayer::mediaStatusChanged, [&](QMediaPlayer::MediaStatus status) {
diff --git a/tests/auto/integration/shared/mediafileselector.h b/tests/auto/integration/shared/mediafileselector.h
index b12cb6525..a9699fc0a 100644
--- a/tests/auto/integration/shared/mediafileselector.h
+++ b/tests/auto/integration/shared/mediafileselector.h
@@ -31,6 +31,7 @@
#include <QUrl>
#include <QMediaPlayer>
+#include <QAudioOutput>
#include <qsignalspy.h>
#include <qfileinfo.h>
#include <qtest.h>
@@ -42,6 +43,8 @@ namespace MediaFileSelector {
static QUrl selectMediaFile(const QStringList& mediaCandidates)
{
QMediaPlayer player;
+ QAudioOutput output;
+ player.setAudioOutput(&output);
QSignalSpy errorSpy(&player, SIGNAL(errorOccurred(QMediaPlayer::Error, const QString&)));