82 void setMedia(MediaDataHolder media);
92 void setState(QMediaPlayer::PlaybackState state);
95 setState(QMediaPlayer::PlayingState);
98 setState(QMediaPlayer::PausedState);
101 setState(QMediaPlayer::StoppedState);
104 void seek(TrackPosition pos);
138 void operator()(PlaybackEngineObject *)
const;
149 template<
typename T,
typename... Args>
154 template <
typename AudioOutput>
160 void createStreamAndRenderer(TrackType trackType);
162 void createDemuxer();
164 void registerObject(PlaybackEngineObject &object);
166 template<
typename C,
typename Action>
167 void forEachExistingObject(Action &&action);
169 template<
typename Action>
170 void forEachExistingObject(Action &&action);
174 void recreateObjects();
176 void createObjectsIfNeeded();
178 void updateObjectsPausedState();
180 void deleteFreeThreads();
182 void onFirstPacketFound(
const PlaybackEngineObjectID &id, TrackPosition absSeekPos);
184 void onRendererSynchronized(
const PlaybackEngineObjectID &id, SteadyClock::time_point timePoint,
185 TrackPosition trackPosition);
187 void onRendererFinished(
const PlaybackEngineObjectID &id);
189 void onRendererLoopChanged(
const PlaybackEngineObjectID &id, TrackPosition offset,
192 void triggerStepIfNeeded();
194 static QString objectThreadName(
const PlaybackEngineObject &object);
196 std::optional<CodecContext> codecContextForTrack(TrackType trackType);
198 bool hasMediaStream()
const;
200 void finilizeTime(TrackPosition pos);
202 void finalizeOutputs();
204 bool hasRenderer(
const PlaybackEngineObjectID &id)
const;
206 template <
typename T>
207 bool checkObjectID(T &object,
const PlaybackEngineObjectID &id)
const
209 return object && object->objectID() == id.objectID && id.sessionID == m_currentID.sessionID;
212 void updateVideoSinkSize(QVideoSink *prevSink =
nullptr);
214 TrackPosition boundPosition(TrackPosition position)
const;
216 AudioRenderer *getAudioRenderer();
219 MediaDataHolder m_media;
221 TimeController m_timeController;
224 bool m_threadsDirty =
false;
226 QPointer<QVideoSink> m_videoSink;
227 QPointer<QAudioOutput> m_audioOutput;
228 QPointer<QAudioBufferOutput> m_audioBufferOutput;
232 ObjectPtr<Demuxer> m_demuxer;
233 QPlatformMediaPlayer::TrackTypeMap<StreamPtr> m_streams;
234 QPlatformMediaPlayer::TrackTypeMap<RendererPtr> m_renderers;
236 bool m_seekPending =
false;
240 LoopOffset m_currentLoopOffset;
242 bool m_pitchCompensation =
true;
244 PlaybackEngineObjectID m_currentID{ 1, 1 };