diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-02-15 15:39:39 +0100 |
---|---|---|
committer | Artem Dyomin <artem.dyomin@qt.io> | 2023-02-17 11:28:35 +0000 |
commit | 7088aee0d279cb1370b967ef68abf606f88be762 (patch) | |
tree | cd9d847befc9117db7114bc1633eb94bafcdc707 /tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp | |
parent | 34a32676f53c296b5c02cbb349bf3a7725de3051 (diff) | |
download | qtmultimedia-7088aee0d279cb1370b967ef68abf606f88be762.tar.gz |
Fix ffmpeg encoding issues
Fixed a bunch of problems:
- wrong frame intervals in macos camera and screen capturing
- missing frame rate in screen capturing format
- wrong scaling in encoder
Also, some recording tests have been added
Task-number: QTBUG-103226
Change-Id: Id775f31e01d75d5c9f3c4ec20c33074acab1ab20
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 68430756ac8f477bf91f9691d39f1605829f9500)
Diffstat (limited to 'tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp')
-rw-r--r-- | tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp b/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp index 4e7b7ea1f..42a45c1f1 100644 --- a/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp +++ b/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp @@ -11,6 +11,8 @@ #include <qpainter.h> #include <qscreencapture.h> #include <qsignalspy.h> +#include <qmediarecorder.h> +#include <qmediaplayer.h> #include <vector> @@ -111,6 +113,7 @@ private slots: void captureScreen(); void captureScreenByDefault(); void captureSecondaryScreen(); + void recordToFile(); void removeScreenWhileCapture(); // Keep the test last defined. TODO: find a way to restore // application screens. @@ -270,6 +273,12 @@ void tst_QScreenCaptureIntegration::removeWhileCapture( void tst_QScreenCaptureIntegration::initTestCase() { +#if defined(Q_OS_LINUX) + if (qEnvironmentVariable("QTEST_ENVIRONMENT").toLower() == "ci" && + qEnvironmentVariable("XDG_SESSION_TYPE").toLower() != "x11") + QSKIP("Skip on wayland; to be fixed"); +#endif + if (!QApplication::primaryScreen()) QSKIP("No screens found"); @@ -320,6 +329,61 @@ void tst_QScreenCaptureIntegration::captureSecondaryScreen() [&screens](QScreenCapture &sc) { sc.setScreen(screens.back()); }); } +void tst_QScreenCaptureIntegration::recordToFile() +{ + QScreenCapture sc; + QSignalSpy errorsSpy(&sc, &QScreenCapture::errorOccurred); + // sc.setScreen(screen); + QMediaCaptureSession session; + QMediaRecorder recorder; + session.setScreenCapture(&sc); + session.setRecorder(&recorder); + recorder.setVideoResolution(1280, 960); + + // Insert metadata + QMediaMetaData metaData; + metaData.insert(QMediaMetaData::Author, QString::fromUtf8("Author")); + metaData.insert(QMediaMetaData::Date, QDateTime::currentDateTime()); + recorder.setMetaData(metaData); + sc.setActive(true); + + QTest::qWait(200); // wait a bit for SC threading activating + + { + QSignalSpy recorderStateChanged(&recorder, &QMediaRecorder::recorderStateChanged); + + recorder.record(); + + QTRY_VERIFY(!recorderStateChanged.empty()); + QCOMPARE(recorder.recorderState(), QMediaRecorder::RecordingState); + } + + QTest::qWait(600); + + { + QSignalSpy recorderStateChanged(&recorder, &QMediaRecorder::recorderStateChanged); + + recorder.stop(); + + QTRY_VERIFY(!recorderStateChanged.empty()); + QCOMPARE(recorder.recorderState(), QMediaRecorder::StoppedState); + } + + QString fileName = recorder.actualLocation().toLocalFile(); + QVERIFY(!fileName.isEmpty()); + QVERIFY(QFileInfo(fileName).size() > 0); + + QMediaPlayer player; + player.setSource(fileName); + QCOMPARE_EQ(player.metaData().value(QMediaMetaData::Resolution).toSize(), QSize(1280, 960)); + QCOMPARE_GT(player.duration(), 350); + QCOMPARE_LT(player.duration(), 650); + + // TODO: check frames changes with QMediaPlayer + + QFile(fileName).remove(); +} + void tst_QScreenCaptureIntegration::removeScreenWhileCapture() { QSKIP("TODO: find a reliable way to emulate it"); |