summaryrefslogtreecommitdiff
path: root/tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp
diff options
context:
space:
mode:
authorArtem Dyomin <artem.dyomin@qt.io>2023-02-15 15:39:39 +0100
committerArtem Dyomin <artem.dyomin@qt.io>2023-02-17 11:28:35 +0000
commit7088aee0d279cb1370b967ef68abf606f88be762 (patch)
treecd9d847befc9117db7114bc1633eb94bafcdc707 /tests/auto/integration/qscreencapture_integration/tst_qscreencapture_integration.cpp
parent34a32676f53c296b5c02cbb349bf3a7725de3051 (diff)
downloadqtmultimedia-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.cpp64
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");