summaryrefslogtreecommitdiffstats
path: root/tests/auto/integration/shared/testvideosink.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/integration/shared/testvideosink.h')
-rw-r--r--tests/auto/integration/shared/testvideosink.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/auto/integration/shared/testvideosink.h b/tests/auto/integration/shared/testvideosink.h
new file mode 100644
index 000000000..8c3f9a5bd
--- /dev/null
+++ b/tests/auto/integration/shared/testvideosink.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TESTVIDEOSINK_H
+#define TESTVIDEOSINK_H
+
+#include <qvideosink.h>
+#include <qvideoframe.h>
+#include <qelapsedtimer.h>
+#include <qsignalspy.h>
+
+QT_BEGIN_NAMESPACE
+
+/*
+ This is a simple video surface which records all presented frames.
+*/
+class TestVideoSink : public QVideoSink
+{
+ Q_OBJECT
+public:
+ explicit TestVideoSink(bool storeFrames = false) : m_storeFrames(storeFrames)
+ {
+ connect(this, &QVideoSink::videoFrameChanged, this, &TestVideoSink::addVideoFrame);
+ connect(this, &QVideoSink::videoFrameChanged, this, &TestVideoSink::videoFrameChangedSync);
+ }
+
+ QVideoFrame waitForFrame()
+ {
+ QSignalSpy spy(this, &TestVideoSink::videoFrameChangedSync);
+ return spy.wait() ? spy.at(0).at(0).value<QVideoFrame>() : QVideoFrame{};
+ }
+
+ void setStoreFrames(bool storeFrames = true) { m_storeFrames = storeFrames; }
+
+private Q_SLOTS:
+ void addVideoFrame(const QVideoFrame &frame)
+ {
+ if (!m_elapsedTimer.isValid())
+ m_elapsedTimer.start();
+ else
+ m_elapsedTimer.restart();
+
+ if (m_storeFrames)
+ m_frameList.append(frame);
+ ++m_totalFrames;
+ }
+
+signals:
+ void videoFrameChangedSync(const QVideoFrame &frame);
+
+public:
+ QList<QVideoFrame> m_frameList;
+ int m_totalFrames = 0; // used instead of the list when frames are not stored
+ QElapsedTimer m_elapsedTimer;
+
+private:
+ bool m_storeFrames;
+};
+
+QT_END_NAMESPACE
+
+#endif // TESTVIDEOSINK_H