tests/auto/qmediarecorder/tst_qmediarecorder_mmf.cpp
changeset 0 876b1a06bc25
equal deleted inserted replaced
-1:000000000000 0:876b1a06bc25
       
     1 #include "tst_qmediarecorder_mmf.h"
       
     2 
       
     3 QT_USE_NAMESPACE
       
     4 
       
     5 void tst_QMediaRecorder_mmf::initTestCase()
       
     6 {
       
     7     qRegisterMetaType<QMediaRecorder::State>("QMediaRecorder::State");
       
     8     qRegisterMetaType<QMediaRecorder::Error>("QMediaRecorder::Error");
       
     9 
       
    10     captureSource = new QAudioCaptureSource;
       
    11     audiocapture = new QMediaRecorder(captureSource);
       
    12 
       
    13     audioEndpoint = qobject_cast<QAudioEndpointSelector*>(captureSource->service()->requestControl(QAudioEndpointSelector_iid));
       
    14     audioEncoder = qobject_cast<QAudioEncoderControl*>(captureSource->service()->requestControl(QAudioEncoderControl_iid));
       
    15 }
       
    16 
       
    17 void tst_QMediaRecorder_mmf::cleanupTestCase()
       
    18 {
       
    19     delete audiocapture;
       
    20     delete captureSource;
       
    21 }
       
    22 
       
    23 QUrl tst_QMediaRecorder_mmf::recordPathAudio(QDir outputDir)
       
    24 {
       
    25     int lastImage = 0;
       
    26     int fileCount = 0;
       
    27     foreach( QString fileName, outputDir.entryList(QStringList() << "testclip_*.amr") ) {
       
    28         int imgNumber = fileName.mid(5, fileName.size()-9).toInt();
       
    29         lastImage = qMax(lastImage, imgNumber);
       
    30         if (outputDir.exists(fileName))
       
    31             fileCount+=1;
       
    32     }
       
    33     lastImage+=fileCount;
       
    34 
       
    35     QUrl location(QDir::toNativeSeparators(outputDir.canonicalPath()+QString("/testclip_%1.amr").arg(lastImage+1,4,10,QLatin1Char('0'))));
       
    36     return location;
       
    37 }
       
    38 
       
    39 void tst_QMediaRecorder_mmf::testAudioSink()
       
    40 {
       
    41     audiocapture->setOutputLocation(QUrl("test.tmp"));
       
    42     QUrl s = audiocapture->outputLocation();
       
    43     QCOMPARE(s.toString(), QString("test.tmp"));
       
    44 }
       
    45 
       
    46 void tst_QMediaRecorder_mmf::testAudioRecord()
       
    47 {
       
    48     QSignalSpy stateSignal(audiocapture,SIGNAL(stateChanged(QMediaRecorder::State)));
       
    49     QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
       
    50     QTest::qWait(500);  // wait for recorder to initialize itself
       
    51     audiocapture->setOutputLocation(recordPathAudio(QDir::rootPath()));
       
    52     audiocapture->record();
       
    53     QTRY_COMPARE(stateSignal.count(), 1); // wait for callbacks to complete in symbian API
       
    54     QCOMPARE(audiocapture->state(), QMediaRecorder::RecordingState);
       
    55     QCOMPARE(audiocapture->error(), QMediaRecorder::NoError);
       
    56     QCOMPARE(audiocapture->errorString(), QString());
       
    57     QCOMPARE(stateSignal.count(), 1);
       
    58     audiocapture->pause();
       
    59     QTRY_COMPARE(stateSignal.count(), 2); // wait for callbacks to complete in symbian API
       
    60     QCOMPARE(audiocapture->state(), QMediaRecorder::PausedState);
       
    61     QCOMPARE(stateSignal.count(), 2);
       
    62     audiocapture->stop();
       
    63     QTRY_COMPARE(stateSignal.count(), 3); // wait for callbacks to complete in symbian API
       
    64     QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
       
    65     QCOMPARE(stateSignal.count(), 3);
       
    66 }
       
    67 
       
    68 void tst_QMediaRecorder_mmf::testAudioRecordWithAMR()
       
    69 {
       
    70     QSignalSpy stateSignal(audiocapture,SIGNAL(stateChanged(QMediaRecorder::State)));
       
    71     QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
       
    72     audiocapture->setOutputLocation(recordPathAudio(QDir::rootPath()));
       
    73     QAudioEncoderSettings audioSettings;
       
    74     QVideoEncoderSettings videoSettings;
       
    75     audioSettings.setCodec("AMR");
       
    76     QString format = audiocapture->containerMimeType();
       
    77     format = QString("audio/amr");
       
    78     audiocapture->setEncodingSettings(audioSettings,videoSettings,format);
       
    79     audiocapture->record();
       
    80     QTRY_COMPARE(stateSignal.count(), 1); // wait for callbacks to complete in symbian API
       
    81     QCOMPARE(audiocapture->state(), QMediaRecorder::RecordingState);
       
    82     QCOMPARE(audiocapture->error(), QMediaRecorder::NoError);
       
    83     QCOMPARE(audiocapture->errorString(), QString());
       
    84     QCOMPARE(stateSignal.count(), 1);
       
    85     audiocapture->pause();
       
    86     QTRY_COMPARE(stateSignal.count(), 2); // wait for callbacks to complete in symbian API
       
    87     QCOMPARE(audiocapture->state(), QMediaRecorder::PausedState);
       
    88     QCOMPARE(stateSignal.count(), 2);
       
    89     audiocapture->stop();
       
    90     QTRY_COMPARE(stateSignal.count(), 3); // wait for callbacks to complete in symbian API
       
    91     QCOMPARE(audiocapture->state(), QMediaRecorder::StoppedState);
       
    92     QCOMPARE(stateSignal.count(), 3);
       
    93 }
       
    94 
       
    95 void tst_QMediaRecorder_mmf::testAudioEndPointSelector()
       
    96 {
       
    97     QSignalSpy audioSignal(audioEndpoint,SIGNAL(activeEndpointChanged(QString)));
       
    98     QVERIFY(audioEndpoint->availableEndpoints().count() == 1);
       
    99     QVERIFY(audioEndpoint->defaultEndpoint().compare("") == 0);
       
   100     audioEndpoint->setActiveEndpoint("device2");
       
   101     QVERIFY(audioEndpoint->activeEndpoint().compare("device2") == 0);
       
   102     QVERIFY(audioSignal.count() == 1);
       
   103     QVERIFY(audioEndpoint->endpointDescription("device2").compare("") == 0);
       
   104 }
       
   105 
       
   106 void tst_QMediaRecorder_mmf::testAudioEncoderControl()
       
   107 {
       
   108     QStringList codecs = audiocapture->supportedAudioCodecs();
       
   109     QVERIFY(codecs.count() == 2);
       
   110     QVERIFY(audiocapture->audioCodecDescription("PCM") == "Pulse code modulation");
       
   111     QStringList options = audioEncoder->supportedEncodingOptions("PCM");
       
   112     QCOMPARE(options.count(), 3);
       
   113     QCOMPARE(audiocapture->supportedAudioSampleRates().count(), 12);
       
   114     audioEncoder->setEncodingOption("PCM", "channels", QVariant(2));
       
   115     QCOMPARE(audioEncoder->encodingOption("PCM","channels").toInt(), 2);
       
   116     audioEncoder->setEncodingOption("PCM", "quality", QVariant(int(QtMultimediaKit::NormalQuality)));
       
   117     QCOMPARE(audioEncoder->encodingOption("PCM","quality").toInt(), int(QtMultimediaKit::NormalQuality));
       
   118     audioEncoder->setEncodingOption("PCM", "samplerate", QVariant(44100));
       
   119     QCOMPARE(audioEncoder->encodingOption("PCM","samplerate").toInt(), 44100);
       
   120 }
       
   121 
       
   122 void tst_QMediaRecorder_mmf::testMediaFormatsControl()
       
   123 {
       
   124     //audioocontainer types
       
   125     QCOMPARE(audiocapture->supportedContainers(), QStringList() << "audio/wav" << "audio/amr");
       
   126     QCOMPARE(audiocapture->containerDescription("audio/wav"), QString("WAV Write Format"));
       
   127     QCOMPARE(audiocapture->containerDescription("audio/amr"), QString("AMR Write Format"));
       
   128 }
       
   129 
       
   130 void tst_QMediaRecorder_mmf::testDefaultAudioEncodingSettings()
       
   131 {
       
   132     QAudioEncoderSettings audioSettings = audiocapture->audioSettings();
       
   133     QCOMPARE(audioSettings.codec(), QString("AMR"));
       
   134     QString format = audiocapture->containerMimeType();
       
   135     QCOMPARE(format, QString("audio/amr"));
       
   136 }