53
54
55
56
57
58 bool initialize(
const std::vector<QAudioBufferSource *> &audioSources,
59 const std::vector<QPlatformVideoSource *> &videoSources);
81 void sessionError(QMediaRecorder::Error code,
const QString &description);
106 EncodersInitializing,
111 class EncodingFinalizer :
public QThread
124 void addAudioBufferInput(QPlatformAudioBufferInput *input,
const QAudioBuffer &firstBuffer);
127 void addVideoSource(QPlatformVideoSource *source,
const QVideoFrame &firstFrame);
128 void handleSourceEndOfStream();
130 void handleEncodersResolved(
const QList<QFuture<
bool>> &resolutions);
132 bool startEncoders();
134 size_t encodersCount()
const {
return m_audioEncoders.size() + m_videoEncoders.size(); }
136 void stopAndDeleteThreads();
138 template <
typename F,
typename... Args>
139 void forEachEncoder(F &&f, Args &&...args);
141 template <
typename F>
142 bool allOfEncoders(F &&f)
const;
144 void markEncodingStart(
bool startOk);
147 QMediaEncoderSettings m_settings;
148 QMediaMetaData m_metaData;
149 std::unique_ptr<EncodingFormatContext> m_formatContext;
150 ConsumerThreadUPtr<Muxer> m_muxer;
152 std::vector<ConsumerThreadUPtr<AudioEncoder>> m_audioEncoders;
153 std::vector<ConsumerThreadUPtr<VideoEncoder>> m_videoEncoders;
154 std::unique_ptr<EncodingInitializer> m_formatsInitializer;
157 qint64 m_timeRecorded = 0;
159 bool m_autoStop =
false;
160 State m_state = State::None;
162 QPromise<
bool> m_startEncodingPromise;
163 EncodingFinalizer *m_finalizer =
nullptr;