qtmobility/tests/auto/qmediarecorder/tst_qmediarecorder.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    44 #include <qmediaobject.h>
    44 #include <qmediaobject.h>
    45 #include <qmediacontrol.h>
    45 #include <qmediacontrol.h>
    46 #include <qmediaservice.h>
    46 #include <qmediaservice.h>
    47 #include <qmediarecordercontrol.h>
    47 #include <qmediarecordercontrol.h>
    48 #include <qmediarecorder.h>
    48 #include <qmediarecorder.h>
       
    49 #include <qmetadatawritercontrol.h>
    49 #include <qaudioendpointselector.h>
    50 #include <qaudioendpointselector.h>
    50 #include <qaudioencodercontrol.h>
    51 #include <qaudioencodercontrol.h>
    51 #include <qmediacontainercontrol.h>
    52 #include <qmediacontainercontrol.h>
    52 #include <qvideoencodercontrol.h>
    53 #include <qvideoencodercontrol.h>
    53 
    54 
    54 #include <QtMultimedia/qaudioformat.h>
    55 #include <qaudioformat.h>
    55 
    56 
    56 QT_USE_NAMESPACE
    57 QT_USE_NAMESPACE
    57 class MockMediaContainerControl : public QMediaContainerControl
    58 class MockMediaContainerControl : public QMediaContainerControl
    58 {
    59 {
    59     Q_OBJECT
    60     Q_OBJECT
   295 
   296 
   296 public:
   297 public:
   297     MockProvider(QObject *parent):
   298     MockProvider(QObject *parent):
   298         QMediaRecorderControl(parent),
   299         QMediaRecorderControl(parent),
   299     m_state(QMediaRecorder::StoppedState),
   300     m_state(QMediaRecorder::StoppedState),
   300     m_position(0) {}
   301     m_position(0),
       
   302     m_muted(false) {}
   301 
   303 
   302     QUrl outputLocation() const
   304     QUrl outputLocation() const
   303     {
   305     {
   304         return m_sink;
   306         return m_sink;
   305     }
   307     }
   316     }
   318     }
   317 
   319 
   318     qint64 duration() const
   320     qint64 duration() const
   319     {
   321     {
   320         return m_position;
   322         return m_position;
       
   323     }
       
   324 
       
   325     bool isMuted() const
       
   326     {
       
   327         return m_muted;
   321     }
   328     }
   322 
   329 
   323     void applySettings() {}
   330     void applySettings() {}
   324 
   331 
   325     using QMediaRecorderControl::error;
   332     using QMediaRecorderControl::error;
   344         m_position=0;
   351         m_position=0;
   345         m_state = QMediaRecorder::StoppedState;
   352         m_state = QMediaRecorder::StoppedState;
   346         emit stateChanged(m_state);
   353         emit stateChanged(m_state);
   347     }
   354     }
   348 
   355 
       
   356     void setMuted(bool muted)
       
   357     {
       
   358         if (m_muted != muted)
       
   359             emit mutedChanged(m_muted = muted);
       
   360     }
       
   361 
   349 public:
   362 public:
   350     QUrl       m_sink;
   363     QUrl       m_sink;
   351     QMediaRecorder::State m_state;
   364     QMediaRecorder::State m_state;
   352     qint64     m_position;
   365     qint64     m_position;
       
   366     bool m_muted;
       
   367 };
       
   368 
       
   369 
       
   370 class QtTestMetaDataProvider : public QMetaDataWriterControl
       
   371 {
       
   372     Q_OBJECT
       
   373 public:
       
   374     QtTestMetaDataProvider(QObject *parent = 0)
       
   375         : QMetaDataWriterControl(parent)
       
   376         , m_available(false)
       
   377         , m_writable(false)
       
   378     {
       
   379     }
       
   380 
       
   381     bool isMetaDataAvailable() const { return m_available; }
       
   382     void setMetaDataAvailable(bool available) {
       
   383         if (m_available != available)
       
   384             emit metaDataAvailableChanged(m_available = available);
       
   385     }
       
   386     QList<QtMultimedia::MetaData> availableMetaData() const { return m_data.keys(); }
       
   387 
       
   388     bool isWritable() const { return m_writable; }
       
   389     void setWritable(bool writable) { emit writableChanged(m_writable = writable); }
       
   390 
       
   391     QVariant metaData(QtMultimedia::MetaData key) const { return m_data.value(key); }
       
   392     void setMetaData(QtMultimedia::MetaData key, const QVariant &value) {
       
   393         m_data.insert(key, value); }
       
   394 
       
   395     QVariant extendedMetaData(const QString &key) const { return m_extendedData.value(key); }
       
   396     void setExtendedMetaData(const QString &key, const QVariant &value) {
       
   397         m_extendedData.insert(key, value); }
       
   398 
       
   399     QStringList availableExtendedMetaData() const { return m_extendedData.keys(); }
       
   400 
       
   401     using QMetaDataWriterControl::metaDataChanged;
       
   402 
       
   403     void populateMetaData()
       
   404     {
       
   405         m_available = true;
       
   406     }
       
   407 
       
   408     bool m_available;
       
   409     bool m_writable;
       
   410     QMap<QtMultimedia::MetaData, QVariant> m_data;
       
   411     QMap<QString, QVariant> m_extendedData;
   353 };
   412 };
   354 
   413 
   355 class MockService : public QMediaService
   414 class MockService : public QMediaService
   356 {
   415 {
   357     Q_OBJECT
   416     Q_OBJECT
   363     {
   422     {
   364         mockAudioEndpointSelector = new MockAudioEndpointSelectorProvider(parent);
   423         mockAudioEndpointSelector = new MockAudioEndpointSelectorProvider(parent);
   365         mockAudioEncodeControl = new MockAudioEncodeProvider(parent);
   424         mockAudioEncodeControl = new MockAudioEncodeProvider(parent);
   366         mockFormatControl = new MockMediaContainerControl(parent);
   425         mockFormatControl = new MockMediaContainerControl(parent);
   367         mockVideoEncodeControl = new MockVideoEncodeProvider(parent);
   426         mockVideoEncodeControl = new MockVideoEncodeProvider(parent);
   368     }
   427         mockMetaDataControl = new QtTestMetaDataProvider(parent);
   369 
   428     }
   370     QMediaControl* control(const char *name) const
   429 
       
   430     QMediaControl* requestControl(const char *name)
   371     {
   431     {
   372         if(hasControls && qstrcmp(name,QAudioEncoderControl_iid) == 0)
   432         if(hasControls && qstrcmp(name,QAudioEncoderControl_iid) == 0)
   373             return mockAudioEncodeControl;
   433             return mockAudioEncodeControl;
   374         if(hasControls && qstrcmp(name,QAudioEndpointSelector_iid) == 0)
   434         if(hasControls && qstrcmp(name,QAudioEndpointSelector_iid) == 0)
   375             return mockAudioEndpointSelector;
   435             return mockAudioEndpointSelector;
   377             return mockControl;
   437             return mockControl;
   378         if(hasControls && qstrcmp(name,QMediaContainerControl_iid) == 0)
   438         if(hasControls && qstrcmp(name,QMediaContainerControl_iid) == 0)
   379             return mockFormatControl;
   439             return mockFormatControl;
   380         if(hasControls && qstrcmp(name,QVideoEncoderControl_iid) == 0)
   440         if(hasControls && qstrcmp(name,QVideoEncoderControl_iid) == 0)
   381             return mockVideoEncodeControl;
   441             return mockVideoEncodeControl;
       
   442         if (hasControls && qstrcmp(name, QMetaDataWriterControl_iid) == 0)
       
   443             return mockMetaDataControl;
   382 
   444 
   383         return 0;
   445         return 0;
   384     }
   446     }
       
   447 
       
   448     void releaseControl(QMediaControl*) {}
   385 
   449 
   386     QMediaControl   *mockControl;
   450     QMediaControl   *mockControl;
   387     QAudioEndpointSelector  *mockAudioEndpointSelector;
   451     QAudioEndpointSelector  *mockAudioEndpointSelector;
   388     QAudioEncoderControl    *mockAudioEncodeControl;
   452     QAudioEncoderControl    *mockAudioEncodeControl;
   389     QMediaContainerControl     *mockFormatControl;
   453     QMediaContainerControl     *mockFormatControl;
   390     QVideoEncoderControl    *mockVideoEncodeControl;
   454     QVideoEncoderControl    *mockVideoEncodeControl;
       
   455     QtTestMetaDataProvider *mockMetaDataControl;
   391     bool hasControls;
   456     bool hasControls;
   392 };
   457 };
   393 
   458 
   394 class MockObject : public QMediaObject
   459 class MockObject : public QMediaObject
   395 {
   460 {
   413     void testNullService();
   478     void testNullService();
   414     void testNullControls();
   479     void testNullControls();
   415     void testError();
   480     void testError();
   416     void testSink();
   481     void testSink();
   417     void testRecord();
   482     void testRecord();
       
   483     void testMute();
   418     void testAudioDeviceControl();
   484     void testAudioDeviceControl();
   419     void testAudioEncodeControl();
   485     void testAudioEncodeControl();
   420     void testMediaFormatsControl();
   486     void testMediaFormatsControl();
   421     void testVideoEncodeControl();
   487     void testVideoEncodeControl();
   422     void testEncodingSettings();
   488     void testEncodingSettings();
   423     void testAudioSettings();
   489     void testAudioSettings();
   424     void testVideoSettings();
   490     void testVideoSettings();
       
   491 
       
   492     void nullMetaDataControl();
       
   493     void isMetaDataAvailable();
       
   494     void isWritable();
       
   495     void metaDataChanged();
       
   496     void metaData_data();
       
   497     void metaData();
       
   498     void setMetaData_data();
       
   499     void setMetaData();
       
   500     void extendedMetaData_data() { metaData_data(); }
       
   501     void extendedMetaData();
       
   502     void setExtendedMetaData_data() { extendedMetaData_data(); }
       
   503     void setExtendedMetaData();
   425 
   504 
   426 private:
   505 private:
   427     QAudioEncoderControl* encode;
   506     QAudioEncoderControl* encode;
   428     QAudioEndpointSelector* audio;
   507     QAudioEndpointSelector* audio;
   429     MockObject      *object;
   508     MockObject      *object;
   440 
   519 
   441     mock = new MockProvider(this);
   520     mock = new MockProvider(this);
   442     service = new MockService(this, mock);
   521     service = new MockService(this, mock);
   443     object = new MockObject(this, service);
   522     object = new MockObject(this, service);
   444     capture = new QMediaRecorder(object);
   523     capture = new QMediaRecorder(object);
   445     capture->setNotifyInterval(100);
   524 
   446 
   525     audio = qobject_cast<QAudioEndpointSelector*>(service->requestControl(QAudioEndpointSelector_iid));
   447     audio = qobject_cast<QAudioEndpointSelector*>(capture->service()->control(QAudioEndpointSelector_iid));
   526     encode = qobject_cast<QAudioEncoderControl*>(service->requestControl(QAudioEncoderControl_iid));
   448     encode = qobject_cast<QAudioEncoderControl*>(capture->service()->control(QAudioEncoderControl_iid));
   527     videoEncode = qobject_cast<QVideoEncoderControl*>(service->requestControl(QVideoEncoderControl_iid));
   449     videoEncode = qobject_cast<QVideoEncoderControl*>(capture->service()->control(QVideoEncoderControl_iid));
       
   450 }
   528 }
   451 
   529 
   452 void tst_QMediaRecorder::cleanupTestCase()
   530 void tst_QMediaRecorder::cleanupTestCase()
   453 {
   531 {
   454     delete capture;
   532     delete capture;
   482     QCOMPARE(recorder.supportedFrameRates(QVideoEncoderSettings(), &continuous), QList<qreal>());
   560     QCOMPARE(recorder.supportedFrameRates(QVideoEncoderSettings(), &continuous), QList<qreal>());
   483     QCOMPARE(continuous, false);
   561     QCOMPARE(continuous, false);
   484     QCOMPARE(recorder.audioSettings(), QAudioEncoderSettings());
   562     QCOMPARE(recorder.audioSettings(), QAudioEncoderSettings());
   485     QCOMPARE(recorder.videoSettings(), QVideoEncoderSettings());
   563     QCOMPARE(recorder.videoSettings(), QVideoEncoderSettings());
   486     QCOMPARE(recorder.containerMimeType(), QString());
   564     QCOMPARE(recorder.containerMimeType(), QString());
       
   565     QVERIFY(!recorder.isMuted());
       
   566     recorder.setMuted(true);
       
   567     QVERIFY(!recorder.isMuted());
   487 }
   568 }
   488 
   569 
   489 void tst_QMediaRecorder::testNullControls()
   570 void tst_QMediaRecorder::testNullControls()
   490 {
   571 {
   491     const QString id(QLatin1String("application/x-format"));
   572     const QString id(QLatin1String("application/x-format"));
   519     recorder.setOutputLocation(QUrl("file://test/save/file.mp4"));
   600     recorder.setOutputLocation(QUrl("file://test/save/file.mp4"));
   520     QCOMPARE(recorder.outputLocation(), QUrl());
   601     QCOMPARE(recorder.outputLocation(), QUrl());
   521 
   602 
   522     QAudioEncoderSettings audio;
   603     QAudioEncoderSettings audio;
   523     audio.setCodec(id);
   604     audio.setCodec(id);
   524     audio.setQuality(QtMediaServices::LowQuality);
   605     audio.setQuality(QtMultimedia::LowQuality);
   525 
   606 
   526     QVideoEncoderSettings video;
   607     QVideoEncoderSettings video;
   527     video.setCodec(id);
   608     video.setCodec(id);
   528     video.setResolution(640, 480);
   609     video.setResolution(640, 480);
   529 
   610 
   598     mock->stop();
   679     mock->stop();
   599     QCOMPARE(stateSignal.count(), 3);
   680     QCOMPARE(stateSignal.count(), 3);
   600 
   681 
   601 }
   682 }
   602 
   683 
       
   684 void tst_QMediaRecorder::testMute()
       
   685 {
       
   686     QSignalSpy mutedChanged(capture, SIGNAL(mutedChanged(bool)));
       
   687     QVERIFY(!capture->isMuted());
       
   688     capture->setMuted(true);
       
   689 
       
   690     QCOMPARE(mutedChanged.size(), 1);
       
   691     QCOMPARE(mutedChanged[0][0].toBool(), true);
       
   692     QVERIFY(capture->isMuted());
       
   693 
       
   694     capture->setMuted(false);
       
   695 
       
   696     QCOMPARE(mutedChanged.size(), 2);
       
   697     QCOMPARE(mutedChanged[1][0].toBool(), false);
       
   698     QVERIFY(!capture->isMuted());
       
   699 
       
   700     capture->setMuted(false);
       
   701     QCOMPARE(mutedChanged.size(), 2);
       
   702 }
       
   703 
   603 void tst_QMediaRecorder::testAudioDeviceControl()
   704 void tst_QMediaRecorder::testAudioDeviceControl()
   604 {
   705 {
   605     QSignalSpy readSignal(audio,SIGNAL(activeEndpointChanged(QString)));
   706     QSignalSpy readSignal(audio,SIGNAL(activeEndpointChanged(QString)));
   606     QVERIFY(audio->availableEndpoints().size() == 3);
   707     QVERIFY(audio->availableEndpoints().size() == 3);
   607     QVERIFY(audio->defaultEndpoint().compare("device1") == 0);
   708     QVERIFY(audio->defaultEndpoint().compare("device1") == 0);
   662 {
   763 {
   663     QAudioEncoderSettings audioSettings = capture->audioSettings();
   764     QAudioEncoderSettings audioSettings = capture->audioSettings();
   664     QCOMPARE(audioSettings.codec(), QString("audio/pcm"));
   765     QCOMPARE(audioSettings.codec(), QString("audio/pcm"));
   665     QCOMPARE(audioSettings.bitRate(), 128*1024);
   766     QCOMPARE(audioSettings.bitRate(), 128*1024);
   666     QCOMPARE(audioSettings.sampleRate(), -1);
   767     QCOMPARE(audioSettings.sampleRate(), -1);
   667     QCOMPARE(audioSettings.quality(), QtMediaServices::NormalQuality);
   768     QCOMPARE(audioSettings.quality(), QtMultimedia::NormalQuality);
   668     QCOMPARE(audioSettings.channelCount(), -1);
   769     QCOMPARE(audioSettings.channelCount(), -1);
   669 
   770 
   670     QCOMPARE(audioSettings.encodingMode(), QtMediaServices::ConstantQualityEncoding);
   771     QCOMPARE(audioSettings.encodingMode(), QtMultimedia::ConstantQualityEncoding);
   671 
   772 
   672     QVideoEncoderSettings videoSettings = capture->videoSettings();
   773     QVideoEncoderSettings videoSettings = capture->videoSettings();
   673     QCOMPARE(videoSettings.codec(), QString());
   774     QCOMPARE(videoSettings.codec(), QString());
   674     QCOMPARE(videoSettings.bitRate(), -1);
   775     QCOMPARE(videoSettings.bitRate(), -1);
   675     QCOMPARE(videoSettings.resolution(), QSize());
   776     QCOMPARE(videoSettings.resolution(), QSize());
   676     QCOMPARE(videoSettings.frameRate(), 0.0);
   777     QCOMPARE(videoSettings.frameRate(), 0.0);
   677     QCOMPARE(videoSettings.quality(), QtMediaServices::NormalQuality);
   778     QCOMPARE(videoSettings.quality(), QtMultimedia::NormalQuality);
   678     QCOMPARE(videoSettings.encodingMode(), QtMediaServices::ConstantQualityEncoding);
   779     QCOMPARE(videoSettings.encodingMode(), QtMultimedia::ConstantQualityEncoding);
   679 
   780 
   680     QString format = capture->containerMimeType();
   781     QString format = capture->containerMimeType();
   681     QCOMPARE(format, QString());
   782     QCOMPARE(format, QString());
   682 
   783 
   683     audioSettings.setCodec("audio/mpeg");
   784     audioSettings.setCodec("audio/mpeg");
   684     audioSettings.setSampleRate(44100);
   785     audioSettings.setSampleRate(44100);
   685     audioSettings.setBitRate(256*1024);
   786     audioSettings.setBitRate(256*1024);
   686     audioSettings.setQuality(QtMediaServices::HighQuality);
   787     audioSettings.setQuality(QtMultimedia::HighQuality);
   687     audioSettings.setEncodingMode(QtMediaServices::AverageBitRateEncoding);
   788     audioSettings.setEncodingMode(QtMultimedia::AverageBitRateEncoding);
   688 
   789 
   689     videoSettings.setCodec("video/3gpp");
   790     videoSettings.setCodec("video/3gpp");
   690     videoSettings.setBitRate(800);
   791     videoSettings.setBitRate(800);
   691     videoSettings.setFrameRate(24*1024);
   792     videoSettings.setFrameRate(24*1024);
   692     videoSettings.setResolution(QSize(800,600));
   793     videoSettings.setResolution(QSize(800,600));
   693     videoSettings.setQuality(QtMediaServices::HighQuality);
   794     videoSettings.setQuality(QtMultimedia::HighQuality);
   694     audioSettings.setEncodingMode(QtMediaServices::TwoPassEncoding);
   795     audioSettings.setEncodingMode(QtMultimedia::TwoPassEncoding);
   695 
   796 
   696     format = QString("mov");
   797     format = QString("mov");
   697 
   798 
   698     capture->setEncodingSettings(audioSettings,videoSettings,format);
   799     capture->setEncodingSettings(audioSettings,videoSettings,format);
   699 
   800 
   719     settings.setBitRate(128000);
   820     settings.setBitRate(128000);
   720     QCOMPARE(settings.bitRate(), 128000);
   821     QCOMPARE(settings.bitRate(), 128000);
   721     QVERIFY(!settings.isNull());
   822     QVERIFY(!settings.isNull());
   722 
   823 
   723     settings = QAudioEncoderSettings();
   824     settings = QAudioEncoderSettings();
   724     QCOMPARE(settings.quality(), QtMediaServices::NormalQuality);
   825     QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
   725     settings.setQuality(QtMediaServices::HighQuality);
   826     settings.setQuality(QtMultimedia::HighQuality);
   726     QCOMPARE(settings.quality(), QtMediaServices::HighQuality);
   827     QCOMPARE(settings.quality(), QtMultimedia::HighQuality);
   727     QVERIFY(!settings.isNull());
   828     QVERIFY(!settings.isNull());
   728 
   829 
   729     settings = QAudioEncoderSettings();
   830     settings = QAudioEncoderSettings();
   730     QCOMPARE(settings.sampleRate(), -1);
   831     QCOMPARE(settings.sampleRate(), -1);
   731     settings.setSampleRate(44100);
   832     settings.setSampleRate(44100);
   740 
   841 
   741     settings = QAudioEncoderSettings();
   842     settings = QAudioEncoderSettings();
   742     QVERIFY(settings.isNull());
   843     QVERIFY(settings.isNull());
   743     QCOMPARE(settings.codec(), QString());
   844     QCOMPARE(settings.codec(), QString());
   744     QCOMPARE(settings.bitRate(), -1);
   845     QCOMPARE(settings.bitRate(), -1);
   745     QCOMPARE(settings.quality(), QtMediaServices::NormalQuality);
   846     QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
   746     QCOMPARE(settings.sampleRate(), -1);
   847     QCOMPARE(settings.sampleRate(), -1);
   747 
   848 
   748     {
   849     {
   749         QAudioEncoderSettings settings1;
   850         QAudioEncoderSettings settings1;
   750         QAudioEncoderSettings settings2;
   851         QAudioEncoderSettings settings2;
   752 
   853 
   753         settings2 = settings1;
   854         settings2 = settings1;
   754         QCOMPARE(settings2, settings1);
   855         QCOMPARE(settings2, settings1);
   755         QVERIFY(settings2.isNull());
   856         QVERIFY(settings2.isNull());
   756 
   857 
   757         settings1.setQuality(QtMediaServices::HighQuality);
   858         settings1.setQuality(QtMultimedia::HighQuality);
   758 
   859 
   759         QVERIFY(settings2.isNull());
   860         QVERIFY(settings2.isNull());
   760         QVERIFY(!settings1.isNull());
   861         QVERIFY(!settings1.isNull());
   761         QVERIFY(settings1 != settings2);
   862         QVERIFY(settings1 != settings2);
   762     }
   863     }
   768 
   869 
   769         settings2 = settings1;
   870         settings2 = settings1;
   770         QCOMPARE(settings2, settings1);
   871         QCOMPARE(settings2, settings1);
   771         QVERIFY(settings2.isNull());
   872         QVERIFY(settings2.isNull());
   772 
   873 
   773         settings1.setQuality(QtMediaServices::HighQuality);
   874         settings1.setQuality(QtMultimedia::HighQuality);
   774 
   875 
   775         QVERIFY(settings2.isNull());
   876         QVERIFY(settings2.isNull());
   776         QVERIFY(!settings1.isNull());
   877         QVERIFY(!settings1.isNull());
   777         QVERIFY(settings1 != settings2);
   878         QVERIFY(settings1 != settings2);
   778     }
   879     }
   800     QVERIFY(settings1 == settings2);
   901     QVERIFY(settings1 == settings2);
   801     settings2.setCodec("codec2");
   902     settings2.setCodec("codec2");
   802     QVERIFY(settings1 != settings2);
   903     QVERIFY(settings1 != settings2);
   803 
   904 
   804     settings1 = QAudioEncoderSettings();
   905     settings1 = QAudioEncoderSettings();
   805     settings1.setEncodingMode(QtMediaServices::ConstantBitRateEncoding);
   906     settings1.setEncodingMode(QtMultimedia::ConstantBitRateEncoding);
   806     settings2 = QAudioEncoderSettings();
   907     settings2 = QAudioEncoderSettings();
   807     settings2.setEncodingMode(QtMediaServices::ConstantBitRateEncoding);
   908     settings2.setEncodingMode(QtMultimedia::ConstantBitRateEncoding);
   808     QVERIFY(settings1 == settings2);
   909     QVERIFY(settings1 == settings2);
   809     settings2.setEncodingMode(QtMediaServices::TwoPassEncoding);
   910     settings2.setEncodingMode(QtMultimedia::TwoPassEncoding);
   810     QVERIFY(settings1 != settings2);
   911     QVERIFY(settings1 != settings2);
   811 
   912 
   812     settings1 = QAudioEncoderSettings();
   913     settings1 = QAudioEncoderSettings();
   813     settings1.setQuality(QtMediaServices::NormalQuality);
   914     settings1.setQuality(QtMultimedia::NormalQuality);
   814     settings2 = QAudioEncoderSettings();
   915     settings2 = QAudioEncoderSettings();
   815     settings2.setQuality(QtMediaServices::NormalQuality);
   916     settings2.setQuality(QtMultimedia::NormalQuality);
   816     QVERIFY(settings1 == settings2);
   917     QVERIFY(settings1 == settings2);
   817     settings2.setQuality(QtMediaServices::LowQuality);
   918     settings2.setQuality(QtMultimedia::LowQuality);
   818     QVERIFY(settings1 != settings2);
   919     QVERIFY(settings1 != settings2);
   819 
   920 
   820     settings1 = QAudioEncoderSettings();
   921     settings1 = QAudioEncoderSettings();
   821     settings1.setSampleRate(1);
   922     settings1.setSampleRate(1);
   822     settings2 = QAudioEncoderSettings();
   923     settings2 = QAudioEncoderSettings();
   843     settings.setBitRate(128000);
   944     settings.setBitRate(128000);
   844     QCOMPARE(settings.bitRate(), 128000);
   945     QCOMPARE(settings.bitRate(), 128000);
   845     QVERIFY(!settings.isNull());
   946     QVERIFY(!settings.isNull());
   846 
   947 
   847     settings = QVideoEncoderSettings();
   948     settings = QVideoEncoderSettings();
   848     QCOMPARE(settings.quality(), QtMediaServices::NormalQuality);
   949     QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
   849     settings.setQuality(QtMediaServices::HighQuality);
   950     settings.setQuality(QtMultimedia::HighQuality);
   850     QCOMPARE(settings.quality(), QtMediaServices::HighQuality);
   951     QCOMPARE(settings.quality(), QtMultimedia::HighQuality);
   851     QVERIFY(!settings.isNull());
   952     QVERIFY(!settings.isNull());
   852 
   953 
   853     settings = QVideoEncoderSettings();
   954     settings = QVideoEncoderSettings();
   854     QCOMPARE(settings.frameRate(), qreal());
   955     QCOMPARE(settings.frameRate(), qreal());
   855     settings.setFrameRate(30000.0/10001);
   956     settings.setFrameRate(30000.0/10001);
   868 
   969 
   869     settings = QVideoEncoderSettings();
   970     settings = QVideoEncoderSettings();
   870     QVERIFY(settings.isNull());
   971     QVERIFY(settings.isNull());
   871     QCOMPARE(settings.codec(), QString());
   972     QCOMPARE(settings.codec(), QString());
   872     QCOMPARE(settings.bitRate(), -1);
   973     QCOMPARE(settings.bitRate(), -1);
   873     QCOMPARE(settings.quality(), QtMediaServices::NormalQuality);
   974     QCOMPARE(settings.quality(), QtMultimedia::NormalQuality);
   874     QCOMPARE(settings.frameRate(), qreal());
   975     QCOMPARE(settings.frameRate(), qreal());
   875     QCOMPARE(settings.resolution(), QSize());
   976     QCOMPARE(settings.resolution(), QSize());
   876 
   977 
   877     {
   978     {
   878         QVideoEncoderSettings settings1;
   979         QVideoEncoderSettings settings1;
   881 
   982 
   882         settings2 = settings1;
   983         settings2 = settings1;
   883         QCOMPARE(settings2, settings1);
   984         QCOMPARE(settings2, settings1);
   884         QVERIFY(settings2.isNull());
   985         QVERIFY(settings2.isNull());
   885 
   986 
   886         settings1.setQuality(QtMediaServices::HighQuality);
   987         settings1.setQuality(QtMultimedia::HighQuality);
   887 
   988 
   888         QVERIFY(settings2.isNull());
   989         QVERIFY(settings2.isNull());
   889         QVERIFY(!settings1.isNull());
   990         QVERIFY(!settings1.isNull());
   890         QVERIFY(settings1 != settings2);
   991         QVERIFY(settings1 != settings2);
   891     }
   992     }
   897 
   998 
   898         settings2 = settings1;
   999         settings2 = settings1;
   899         QCOMPARE(settings2, settings1);
  1000         QCOMPARE(settings2, settings1);
   900         QVERIFY(settings2.isNull());
  1001         QVERIFY(settings2.isNull());
   901 
  1002 
   902         settings1.setQuality(QtMediaServices::HighQuality);
  1003         settings1.setQuality(QtMultimedia::HighQuality);
   903 
  1004 
   904         QVERIFY(settings2.isNull());
  1005         QVERIFY(settings2.isNull());
   905         QVERIFY(!settings1.isNull());
  1006         QVERIFY(!settings1.isNull());
   906         QVERIFY(settings1 != settings2);
  1007         QVERIFY(settings1 != settings2);
   907     }
  1008     }
   929     QVERIFY(settings1 == settings2);
  1030     QVERIFY(settings1 == settings2);
   930     settings2.setCodec("codec2");
  1031     settings2.setCodec("codec2");
   931     QVERIFY(settings1 != settings2);
  1032     QVERIFY(settings1 != settings2);
   932 
  1033 
   933     settings1 = QVideoEncoderSettings();
  1034     settings1 = QVideoEncoderSettings();
   934     settings1.setEncodingMode(QtMediaServices::ConstantBitRateEncoding);
  1035     settings1.setEncodingMode(QtMultimedia::ConstantBitRateEncoding);
   935     settings2 = QVideoEncoderSettings();
  1036     settings2 = QVideoEncoderSettings();
   936     settings2.setEncodingMode(QtMediaServices::ConstantBitRateEncoding);
  1037     settings2.setEncodingMode(QtMultimedia::ConstantBitRateEncoding);
   937     QVERIFY(settings1 == settings2);
  1038     QVERIFY(settings1 == settings2);
   938     settings2.setEncodingMode(QtMediaServices::TwoPassEncoding);
  1039     settings2.setEncodingMode(QtMultimedia::TwoPassEncoding);
   939     QVERIFY(settings1 != settings2);
  1040     QVERIFY(settings1 != settings2);
   940 
  1041 
   941     settings1 = QVideoEncoderSettings();
  1042     settings1 = QVideoEncoderSettings();
   942     settings1.setQuality(QtMediaServices::NormalQuality);
  1043     settings1.setQuality(QtMultimedia::NormalQuality);
   943     settings2 = QVideoEncoderSettings();
  1044     settings2 = QVideoEncoderSettings();
   944     settings2.setQuality(QtMediaServices::NormalQuality);
  1045     settings2.setQuality(QtMultimedia::NormalQuality);
   945     QVERIFY(settings1 == settings2);
  1046     QVERIFY(settings1 == settings2);
   946     settings2.setQuality(QtMediaServices::LowQuality);
  1047     settings2.setQuality(QtMultimedia::LowQuality);
   947     QVERIFY(settings1 != settings2);
  1048     QVERIFY(settings1 != settings2);
   948 
  1049 
   949     settings1 = QVideoEncoderSettings();
  1050     settings1 = QVideoEncoderSettings();
   950     settings1.setFrameRate(1);
  1051     settings1.setFrameRate(1);
   951     settings2 = QVideoEncoderSettings();
  1052     settings2 = QVideoEncoderSettings();
   953     QVERIFY(settings1 == settings2);
  1054     QVERIFY(settings1 == settings2);
   954     settings2.setFrameRate(2);
  1055     settings2.setFrameRate(2);
   955     QVERIFY(settings1 != settings2);
  1056     QVERIFY(settings1 != settings2);
   956 }
  1057 }
   957 
  1058 
       
  1059 
       
  1060 void tst_QMediaRecorder::nullMetaDataControl()
       
  1061 {
       
  1062     const QString titleKey(QLatin1String("Title"));
       
  1063     const QString title(QLatin1String("Host of Seraphim"));
       
  1064 
       
  1065     MockProvider recorderControl(0);
       
  1066     MockService service(0, &recorderControl);
       
  1067     service.hasControls = false;
       
  1068     MockObject object(0, &service);
       
  1069 
       
  1070     QMediaRecorder recorder(&object);
       
  1071 
       
  1072     QSignalSpy spy(&recorder, SIGNAL(metaDataChanged()));
       
  1073 
       
  1074     QCOMPARE(recorder.isMetaDataAvailable(), false);
       
  1075     QCOMPARE(recorder.isMetaDataWritable(), false);
       
  1076 
       
  1077     recorder.setMetaData(QtMultimedia::Title, title);
       
  1078     recorder.setExtendedMetaData(titleKey, title);
       
  1079 
       
  1080     QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), QString());
       
  1081     QCOMPARE(recorder.extendedMetaData(titleKey).toString(), QString());
       
  1082     QCOMPARE(recorder.availableMetaData(), QList<QtMultimedia::MetaData>());
       
  1083     QCOMPARE(recorder.availableExtendedMetaData(), QStringList());
       
  1084     QCOMPARE(spy.count(), 0);
       
  1085 }
       
  1086 
       
  1087 void tst_QMediaRecorder::isMetaDataAvailable()
       
  1088 {
       
  1089     MockProvider recorderControl(0);
       
  1090     MockService service(0, &recorderControl);
       
  1091     service.mockMetaDataControl->setMetaDataAvailable(false);
       
  1092     MockObject object(0, &service);
       
  1093 
       
  1094     QMediaRecorder recorder(&object);
       
  1095     QCOMPARE(recorder.isMetaDataAvailable(), false);
       
  1096 
       
  1097     QSignalSpy spy(&recorder, SIGNAL(metaDataAvailableChanged(bool)));
       
  1098     service.mockMetaDataControl->setMetaDataAvailable(true);
       
  1099 
       
  1100     QCOMPARE(recorder.isMetaDataAvailable(), true);
       
  1101     QCOMPARE(spy.count(), 1);
       
  1102     QCOMPARE(spy.at(0).at(0).toBool(), true);
       
  1103 
       
  1104     service.mockMetaDataControl->setMetaDataAvailable(false);
       
  1105 
       
  1106     QCOMPARE(recorder.isMetaDataAvailable(), false);
       
  1107     QCOMPARE(spy.count(), 2);
       
  1108     QCOMPARE(spy.at(1).at(0).toBool(), false);
       
  1109 }
       
  1110 
       
  1111 void tst_QMediaRecorder::isWritable()
       
  1112 {
       
  1113     MockProvider recorderControl(0);
       
  1114     MockService service(0, &recorderControl);
       
  1115     service.mockMetaDataControl->setWritable(false);
       
  1116 
       
  1117     MockObject object(0, &service);
       
  1118 
       
  1119     QMediaRecorder recorder(&object);
       
  1120 
       
  1121     QSignalSpy spy(&recorder, SIGNAL(metaDataWritableChanged(bool)));
       
  1122 
       
  1123     QCOMPARE(recorder.isMetaDataWritable(), false);
       
  1124 
       
  1125     service.mockMetaDataControl->setWritable(true);
       
  1126 
       
  1127     QCOMPARE(recorder.isMetaDataWritable(), true);
       
  1128     QCOMPARE(spy.count(), 1);
       
  1129     QCOMPARE(spy.at(0).at(0).toBool(), true);
       
  1130 
       
  1131     service.mockMetaDataControl->setWritable(false);
       
  1132 
       
  1133     QCOMPARE(recorder.isMetaDataWritable(), false);
       
  1134     QCOMPARE(spy.count(), 2);
       
  1135     QCOMPARE(spy.at(1).at(0).toBool(), false);
       
  1136 }
       
  1137 
       
  1138 void tst_QMediaRecorder::metaDataChanged()
       
  1139 {
       
  1140     MockProvider recorderControl(0);
       
  1141     MockService service(0, &recorderControl);
       
  1142     MockObject object(0, &service);
       
  1143 
       
  1144     QMediaRecorder recorder(&object);
       
  1145 
       
  1146     QSignalSpy spy(&recorder, SIGNAL(metaDataChanged()));
       
  1147 
       
  1148     service.mockMetaDataControl->metaDataChanged();
       
  1149     QCOMPARE(spy.count(), 1);
       
  1150 
       
  1151     service.mockMetaDataControl->metaDataChanged();
       
  1152     QCOMPARE(spy.count(), 2);
       
  1153 }
       
  1154 
       
  1155 void tst_QMediaRecorder::metaData_data()
       
  1156 {
       
  1157     QTest::addColumn<QString>("artist");
       
  1158     QTest::addColumn<QString>("title");
       
  1159     QTest::addColumn<QString>("genre");
       
  1160 
       
  1161     QTest::newRow("")
       
  1162             << QString::fromLatin1("Dead Can Dance")
       
  1163             << QString::fromLatin1("Host of Seraphim")
       
  1164             << QString::fromLatin1("Awesome");
       
  1165 }
       
  1166 
       
  1167 void tst_QMediaRecorder::metaData()
       
  1168 {
       
  1169     QFETCH(QString, artist);
       
  1170     QFETCH(QString, title);
       
  1171     QFETCH(QString, genre);
       
  1172 
       
  1173     MockProvider recorderControl(0);
       
  1174     MockService service(0, &recorderControl);
       
  1175     service.mockMetaDataControl->populateMetaData();
       
  1176 
       
  1177     MockObject object(0, &service);
       
  1178 
       
  1179     QMediaRecorder recorder(&object);
       
  1180     QVERIFY(object.availableMetaData().isEmpty());
       
  1181 
       
  1182     service.mockMetaDataControl->m_data.insert(QtMultimedia::AlbumArtist, artist);
       
  1183     service.mockMetaDataControl->m_data.insert(QtMultimedia::Title, title);
       
  1184     service.mockMetaDataControl->m_data.insert(QtMultimedia::Genre, genre);
       
  1185 
       
  1186     QCOMPARE(recorder.metaData(QtMultimedia::AlbumArtist).toString(), artist);
       
  1187     QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), title);
       
  1188 
       
  1189     QList<QtMultimedia::MetaData> metaDataKeys = recorder.availableMetaData();
       
  1190     QCOMPARE(metaDataKeys.size(), 3);
       
  1191     QVERIFY(metaDataKeys.contains(QtMultimedia::AlbumArtist));
       
  1192     QVERIFY(metaDataKeys.contains(QtMultimedia::Title));
       
  1193     QVERIFY(metaDataKeys.contains(QtMultimedia::Genre));
       
  1194 }
       
  1195 
       
  1196 void tst_QMediaRecorder::setMetaData_data()
       
  1197 {
       
  1198     QTest::addColumn<QString>("title");
       
  1199 
       
  1200     QTest::newRow("")
       
  1201             << QString::fromLatin1("In the Kingdom of the Blind the One eyed are Kings");
       
  1202 }
       
  1203 
       
  1204 void tst_QMediaRecorder::setMetaData()
       
  1205 {
       
  1206     QFETCH(QString, title);
       
  1207 
       
  1208     MockProvider recorderControl(0);
       
  1209     MockService service(0, &recorderControl);
       
  1210     service.mockMetaDataControl->populateMetaData();
       
  1211 
       
  1212     MockObject object(0, &service);
       
  1213 
       
  1214     QMediaRecorder recorder(&object);
       
  1215 
       
  1216     recorder.setMetaData(QtMultimedia::Title, title);
       
  1217     QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), title);
       
  1218     QCOMPARE(service.mockMetaDataControl->m_data.value(QtMultimedia::Title).toString(), title);
       
  1219 }
       
  1220 
       
  1221 void tst_QMediaRecorder::extendedMetaData()
       
  1222 {
       
  1223     QFETCH(QString, artist);
       
  1224     QFETCH(QString, title);
       
  1225     QFETCH(QString, genre);
       
  1226 
       
  1227     MockProvider recorderControl(0);
       
  1228     MockService service(0, &recorderControl);
       
  1229     MockObject object(0, &service);
       
  1230 
       
  1231     QMediaRecorder recorder(&object);
       
  1232     QVERIFY(recorder.availableExtendedMetaData().isEmpty());
       
  1233 
       
  1234     service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Artist"), artist);
       
  1235     service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Title"), title);
       
  1236     service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Genre"), genre);
       
  1237 
       
  1238     QCOMPARE(recorder.extendedMetaData(QLatin1String("Artist")).toString(), artist);
       
  1239     QCOMPARE(recorder.extendedMetaData(QLatin1String("Title")).toString(), title);
       
  1240 
       
  1241     QStringList extendedKeys = recorder.availableExtendedMetaData();
       
  1242     QCOMPARE(extendedKeys.size(), 3);
       
  1243     QVERIFY(extendedKeys.contains(QLatin1String("Artist")));
       
  1244     QVERIFY(extendedKeys.contains(QLatin1String("Title")));
       
  1245     QVERIFY(extendedKeys.contains(QLatin1String("Genre")));
       
  1246 }
       
  1247 
       
  1248 void tst_QMediaRecorder::setExtendedMetaData()
       
  1249 {
       
  1250     MockProvider recorderControl(0);
       
  1251     MockService service(0, &recorderControl);
       
  1252     service.mockMetaDataControl->populateMetaData();
       
  1253 
       
  1254     MockObject object(0, &service);
       
  1255 
       
  1256     QMediaRecorder recorder(&object);
       
  1257 
       
  1258     QString title(QLatin1String("In the Kingdom of the Blind the One eyed are Kings"));
       
  1259 
       
  1260     recorder.setExtendedMetaData(QLatin1String("Title"), title);
       
  1261     QCOMPARE(recorder.extendedMetaData(QLatin1String("Title")).toString(), title);
       
  1262     QCOMPARE(service.mockMetaDataControl->m_extendedData.value(QLatin1String("Title")).toString(), title);
       
  1263 }
       
  1264 
       
  1265 
   958 QTEST_MAIN(tst_QMediaRecorder)
  1266 QTEST_MAIN(tst_QMediaRecorder)
   959 
  1267 
   960 #include "tst_qmediarecorder.moc"
  1268 #include "tst_qmediarecorder.moc"