changeset 14 | 6fbed849b4f4 |
parent 11 | 06b8e2af4411 |
child 15 | 1f895d8a5b2b |
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" |