10#include "private/qplatformvideoframeinput_p.h"
11#include "private/qplatformaudiobufferinput_p.h"
12#include "private/qplatformaudiobufferinput_p.h"
27 const std::vector<QPlatformVideoSource *> &videoSources)
29 for (
auto source : audioSources) {
30 if (
auto audioInput = qobject_cast<QFFmpegAudioInput *>(
source))
31 m_recordingEngine.addAudioInput(audioInput);
32 else if (
auto audioBufferInput = qobject_cast<QPlatformAudioBufferInput *>(
source))
33 addAudioBufferInput(audioBufferInput);
38 for (
auto source : videoSources)
41 tryStartRecordingEngine();
48 if (
input->audioFormat().isValid())
49 m_recordingEngine.addAudioBufferInput(
input, {});
51 addPendingAudioBufferInput(
input);
56 addPendingSource(
input);
68 erasePendingSource(
input,
78 if (
source->frameFormat().isValid())
79 m_recordingEngine.addVideoSource(
source, {});
80 else if (
source->hasError())
81 emitStreamInitializationError(
QStringLiteral(
"Video source error: ")
84 addPendingVideoSource(
source);
109 erasePendingSource(
source,
110 [&]() { m_recordingEngine.addVideoSource(
source,
frame); });
112 erasePendingSource(
source,
117void EncodingInitializer::tryStartRecordingEngine()
119 if (m_pendingSources.empty())
120 m_recordingEngine.start();
123void EncodingInitializer::emitStreamInitializationError(
QString error)
135 m_pendingSources.emplace(
source);
139void EncodingInitializer::erasePendingSource(
QObject *
source, F &&functionOrError,
bool destroyed)
141 const auto erasedCount = m_pendingSources.erase(
source);
142 if (erasedCount == 0)
150 if constexpr (std::is_invocable_v<F>)
153 emitStreamInitializationError(functionOrError);
155 tryStartRecordingEngine();
EncodingInitializer(RecordingEngine &engine)
~EncodingInitializer() override
void start(const std::vector< QPlatformAudioBufferInputBase * > &audioSources, const std::vector< QPlatformVideoSource * > &videoSources)
bool canPushFrame() const override
void streamInitializationError(QMediaRecorder::Error code, const QString &description)
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
void destroyed(QObject *=nullptr)
This signal is emitted immediately before the object obj is destroyed, after any instances of QPointe...
\macro QT_RESTRICTED_CAST_FROM_ASCII
The QVideoFrame class represents a frame of video data.
void setEncoderInterface(QObject *source, QMediaInputEncoderInterface *interface)
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
GLsizei GLsizei GLchar * source
GLenum GLenum GLenum input
#define QStringLiteral(str)
myObject disconnect()
[26]