summaryrefslogtreecommitdiffstats
path: root/tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp')
-rwxr-xr-xtests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp180
1 files changed, 180 insertions, 0 deletions
diff --git a/tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp b/tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp
new file mode 100755
index 000000000..48327bdd0
--- /dev/null
+++ b/tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp
@@ -0,0 +1,180 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "tst_qmediarecorder_mmf.h"
+
+QT_USE_NAMESPACE
+
+void tst_QMediaRecorder_mmf::initTestCase()
+{
+ qRegisterMetaType<QMediaRecorder::State>("QMediaRecorder::State");
+ qRegisterMetaType<QMediaRecorder::Error>("QMediaRecorder::Error");
+
+ captureSource = new QAudioCaptureSource;
+ audiocapture = new QMediaRecorder(captureSource);
+
+ QVERIFY(captureSource->service());
+
+ audioEndpoint = qobject_cast<QAudioEndpointSelector*>(captureSource->service()->requestControl(QAudioEndpointSelector_iid));
+ audioEncoder = qobject_cast<QAudioEncoderControl*>(captureSource->service()->requestControl(QAudioEncoderControl_iid));
+}
+
+void tst_QMediaRecorder_mmf::cleanupTestCase()
+{
+ delete audiocapture;
+ delete captureSource;
+}
+
+QUrl tst_QMediaRecorder_mmf::recordPathAudio(QDir outputDir)
+{
+ int lastImage = 0;
+ int fileCount = 0;
+ foreach( QString fileName, outputDir.entryList(QStringList() << "testclip_*.amr") ) {
+ int imgNumber = fileName.mid(5, fileName.size()-9).toInt();
+ lastImage = qMax(lastImage, imgNumber);
+ if (outputDir.exists(fileName))
+ fileCount+=1;
+ }
+ lastImage+=fileCount;
+
+ QUrl location(QDir::toNativeSeparators(outputDir.canonicalPath()+QString("/testclip_%1.amr").arg(lastImage+1,4,10,QLatin1Char('0'))));
+ return location;
+}
+
+void tst_QMediaRecorder_mmf::testAudioSink()
+{
+ audiocapture->setOutputLocation(QUrl("test.tmp"));
+ QUrl s = audiocapture->outputLocation();
+ QCOMPARE(s.toString(), QString("test.tmp"));
+}
+
+void tst_QMediaRecorder_mmf::testAudioRecord()
+{
+ QSignalSpy stateSignal(audiocapture,SIGNAL(stateChanged(QMediaRecorder::State)));
+ QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
+ QTest::qWait(500); // wait for recorder to initialize itself
+ audiocapture->setOutputLocation(recordPathAudio(QDir::rootPath()));
+ audiocapture->record();
+ QTRY_COMPARE(stateSignal.count(), 1); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::RecordingState);
+ QCOMPARE(audiocapture->error(), QMediaRecorder::NoError);
+ QCOMPARE(audiocapture->errorString(), QString());
+ QCOMPARE(stateSignal.count(), 1);
+ audiocapture->pause();
+ QTRY_COMPARE(stateSignal.count(), 2); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::PausedState);
+ QCOMPARE(stateSignal.count(), 2);
+ audiocapture->stop();
+ QTRY_COMPARE(stateSignal.count(), 3); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
+ QCOMPARE(stateSignal.count(), 3);
+}
+
+void tst_QMediaRecorder_mmf::testAudioRecordWithAMR()
+{
+ QSignalSpy stateSignal(audiocapture,SIGNAL(stateChanged(QMediaRecorder::State)));
+ QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
+ audiocapture->setOutputLocation(recordPathAudio(QDir::rootPath()));
+ QAudioEncoderSettings audioSettings;
+ QVideoEncoderSettings videoSettings;
+ audioSettings.setCodec("AMR");
+ QString format = audiocapture->containerMimeType();
+ format = QString("audio/amr");
+ audiocapture->setEncodingSettings(audioSettings,videoSettings,format);
+ audiocapture->record();
+ QTRY_COMPARE(stateSignal.count(), 1); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::RecordingState);
+ QCOMPARE(audiocapture->error(), QMediaRecorder::NoError);
+ QCOMPARE(audiocapture->errorString(), QString());
+ QCOMPARE(stateSignal.count(), 1);
+ audiocapture->pause();
+ QTRY_COMPARE(stateSignal.count(), 2); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::PausedState);
+ QCOMPARE(stateSignal.count(), 2);
+ audiocapture->stop();
+ QTRY_COMPARE(stateSignal.count(), 3); // wait for callbacks to complete in symbian API
+ QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
+ QCOMPARE(stateSignal.count(), 3);
+}
+
+void tst_QMediaRecorder_mmf::testAudioEndPointSelector()
+{
+ QSignalSpy audioSignal(audioEndpoint,SIGNAL(activeEndpointChanged(QString)));
+ QVERIFY(audioEndpoint->availableEndpoints().count() == 1);
+ QVERIFY(audioEndpoint->defaultEndpoint().compare("default") == 0);
+ audioEndpoint->setActiveEndpoint("device2");
+ QVERIFY(audioEndpoint->activeEndpoint().compare("device2") == 0);
+ QVERIFY(audioSignal.count() == 1);
+ QVERIFY(audioEndpoint->endpointDescription("device2").compare("") == 0);
+}
+
+void tst_QMediaRecorder_mmf::testAudioEncoderControl()
+{
+ QStringList codecs = audiocapture->supportedAudioCodecs();
+ QVERIFY(codecs.count() == 2);
+ QVERIFY(audiocapture->audioCodecDescription("PCM") == "Pulse code modulation");
+ QStringList options = audioEncoder->supportedEncodingOptions("PCM");
+ QCOMPARE(options.count(), 3);
+ QCOMPARE(audiocapture->supportedAudioSampleRates().count(), 12);
+ audioEncoder->setEncodingOption("PCM", "channels", QVariant(2));
+ QCOMPARE(audioEncoder->encodingOption("PCM","channels").toInt(), 2);
+ audioEncoder->setEncodingOption("PCM", "quality", QVariant(int(QtMultimediaKit::NormalQuality)));
+ QCOMPARE(audioEncoder->encodingOption("PCM","quality").toInt(), int(QtMultimediaKit::NormalQuality));
+ audioEncoder->setEncodingOption("PCM", "samplerate", QVariant(44100));
+ QCOMPARE(audioEncoder->encodingOption("PCM","samplerate").toInt(), 44100);
+}
+
+void tst_QMediaRecorder_mmf::testMediaFormatsControl()
+{
+ //audioocontainer types
+ // Containers supported are dynamically queried from MMF. We cannot guarentee that 2 platforms
+ // will support the same set.
+ //QCOMPARE(audiocapture->supportedContainers(), QStringList() << "audio/wav" << "audio/amr");
+ QCOMPARE(audiocapture->containerDescription("audio/wav"), QString("WAV Write Format"));
+ QCOMPARE(audiocapture->containerDescription("audio/amr"), QString("AMR Write Format"));
+}
+
+void tst_QMediaRecorder_mmf::testDefaultAudioEncodingSettings()
+{
+ QAudioEncoderSettings audioSettings = audiocapture->audioSettings();
+ QCOMPARE(audioSettings.codec(), QString("AMR"));
+ QString format = audiocapture->containerMimeType();
+ QCOMPARE(format, QString("audio/amr"));
+}