Revision control

Copy as Markdown

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CAPTURESESSIONFIXTURE_P_H
#define CAPTURESESSIONFIXTURE_P_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <private/audiogenerationutils_p.h>
#include <private/framegenerator_p.h>
#include <private/testvideosink_p.h>
#include <QtMultimedia/qvideoframeinput.h>
#include <QtMultimedia/qaudioinput.h>
#include <QtMultimedia/qmediacapturesession.h>
#include <QtMultimedia/qmediarecorder.h>
#include <QtMultimedia/qaudiobufferinput.h>
#include <QtCore/qiodevice.h>
#include <QtCore/qtemporaryfile.h>
#include <QtTest/qsignalspy.h>
#include <optional>
QT_BEGIN_NAMESPACE
enum class StreamType { Audio, Video, AudioAndVideo };
enum class AutoStop { EmitEmpty, No };
enum class RunMode { Pull, Push };
struct CaptureSessionFixture
{
explicit CaptureSessionFixture(StreamType streamType);
~CaptureSessionFixture();
void setVideoSink(QVideoSink *videoSink);
void start(RunMode mode, AutoStop autoStop,
std::optional<QIODevice *> outputDevice = std::nullopt);
bool waitForRecorderStopped(std::chrono::milliseconds duration);
bool hasAudio() const;
bool hasVideo() const;
VideoGenerator m_videoGenerator;
AudioGenerator m_audioGenerator;
QVideoFrameInput m_videoInput;
QAudioBufferInput m_audioInput;
QMediaCaptureSession m_session;
QMediaRecorder m_recorder;
QTemporaryFile m_tempFile;
QVideoSink *m_videoSink = nullptr;
StreamType m_streamType = StreamType::Video;
QSignalSpy readyToSendVideoFrame{ &m_videoInput, &QVideoFrameInput::readyToSendVideoFrame };
QSignalSpy readyToSendAudioBuffer{ &m_audioInput, &QAudioBufferInput::readyToSendAudioBuffer };
QSignalSpy recorderStateChanged{ &m_recorder, &QMediaRecorder::recorderStateChanged };
QSignalSpy mediaFormatChanged{ &m_recorder, &QMediaRecorder::mediaFormatChanged };
};
QT_END_NAMESPACE
#endif