51
52
53
54
55
56 bool initialize(
const std::vector<QAudioBufferSource *> &audioSources,
57 const std::vector<QPlatformVideoSource *> &videoSources);
77 void sessionError(QMediaRecorder::Error code,
const QString &description);
100 class EncodingFinalizer :
public QThread
103 EncodingFinalizer(
RecordingEngine &recordingEngine,
bool writeTrailer);
114 void addAudioBufferInput(QPlatformAudioBufferInput *input,
const QAudioBuffer &firstBuffer);
117 void addVideoSource(QPlatformVideoSource *source,
const QVideoFrame &firstFrame);
118 void handleSourceEndOfStream();
119 void handleEncoderInitialization();
121 bool startEncoders();
123 size_t encodersCount()
const {
return m_audioEncoders.size() + m_videoEncoders.size(); }
125 void stopAndDeleteThreads();
127 template <
typename F,
typename... Args>
128 void forEachEncoder(F &&f, Args &&...args);
130 template <
typename F>
131 bool allOfEncoders(F &&f)
const;
134 QMediaEncoderSettings m_settings;
135 QMediaMetaData m_metaData;
136 std::unique_ptr<EncodingFormatContext> m_formatContext;
137 ConsumerThreadUPtr<Muxer> m_muxer;
139 std::vector<ConsumerThreadUPtr<AudioEncoder>> m_audioEncoders;
140 std::vector<ConsumerThreadUPtr<VideoEncoder>> m_videoEncoders;
141 std::unique_ptr<EncodingInitializer> m_formatsInitializer;
144 qint64 m_timeRecorded = 0;
146 bool m_autoStop =
false;
147 size_t m_initializedEncodersCount = 0;
148 State m_state = State::None;