80 void setMedia(MediaDataHolder media);
90 void setState(QMediaPlayer::PlaybackState state);
93 setState(QMediaPlayer::PlayingState);
96 setState(QMediaPlayer::PausedState);
99 setState(QMediaPlayer::StoppedState);
102 void seek(TrackPosition pos);
110 void setActiveTrack(QPlatformMediaPlayer::TrackType type,
int streamNumber);
119 streamInfo(QPlatformMediaPlayer::TrackType trackType)
const;
123 int activeTrack(QPlatformMediaPlayer::TrackType type)
const;
136 void operator()(PlaybackEngineObject *)
const;
147 template<
typename T,
typename... Args>
152 template <
typename AudioOutput>
158 void createStreamAndRenderer(QPlatformMediaPlayer::TrackType trackType);
160 void createDemuxer();
162 void registerObject(PlaybackEngineObject &object);
164 template<
typename C,
typename Action>
165 void forEachExistingObject(Action &&action);
167 template<
typename Action>
168 void forEachExistingObject(Action &&action);
172 void recreateObjects();
174 void createObjectsIfNeeded();
176 void updateObjectsPausedState();
178 void deleteFreeThreads();
180 void onFirstPacketFound(
const PlaybackEngineObjectID &id, TrackPosition absSeekPos);
182 void onRendererSynchronized(
const PlaybackEngineObjectID &id, SteadyClock::time_point timePoint,
183 TrackPosition trackPosition);
185 void onRendererFinished(
const PlaybackEngineObjectID &id);
187 void onRendererLoopChanged(
const PlaybackEngineObjectID &id, TrackPosition offset,
190 void triggerStepIfNeeded();
192 static QString objectThreadName(
const PlaybackEngineObject &object);
194 std::optional<CodecContext> codecContextForTrack(QPlatformMediaPlayer::TrackType trackType);
196 bool hasMediaStream()
const;
198 void finilizeTime(TrackPosition pos);
200 void finalizeOutputs();
202 bool hasRenderer(
const PlaybackEngineObjectID &id)
const;
204 template <
typename T>
205 bool checkObjectID(T &object,
const PlaybackEngineObjectID &id)
const
207 return object && object->objectID() == id.objectID && id.sessionID == m_currentID.sessionID;
210 void updateVideoSinkSize(QVideoSink *prevSink =
nullptr);
212 TrackPosition boundPosition(TrackPosition position)
const;
214 AudioRenderer *getAudioRenderer();
217 MediaDataHolder m_media;
219 TimeController m_timeController;
222 bool m_threadsDirty =
false;
224 QPointer<QVideoSink> m_videoSink;
225 QPointer<QAudioOutput> m_audioOutput;
226 QPointer<QAudioBufferOutput> m_audioBufferOutput;
230 ObjectPtr<Demuxer> m_demuxer;
231 std::array<StreamPtr, QPlatformMediaPlayer::NTrackTypes> m_streams;
232 std::array<RendererPtr, QPlatformMediaPlayer::NTrackTypes> m_renderers;
234 bool m_seekPending =
false;
238 LoopOffset m_currentLoopOffset;
240 bool m_pitchCompensation =
true;
242 PlaybackEngineObjectID m_currentID{ 1, 1 };