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 onFirsPacketFound(quint64 id, TrackPosition absSeekPos);
182 void onRendererSynchronized(quint64 id, SteadyClock::time_point timePoint,
183 TrackPosition trackPosition);
185 void onRendererFinished();
187 void onRendererLoopChanged(quint64 id, TrackPosition offset,
int loopIndex);
189 void triggerStepIfNeeded();
191 static QString objectThreadName(
const PlaybackEngineObject &object);
193 std::optional<CodecContext> codecContextForTrack(QPlatformMediaPlayer::TrackType trackType);
195 bool hasMediaStream()
const;
197 void finilizeTime(TrackPosition pos);
199 void finalizeOutputs();
201 bool hasRenderer(quint64 id)
const;
203 void updateVideoSinkSize(QVideoSink *prevSink =
nullptr);
205 TrackPosition boundPosition(TrackPosition position)
const;
207 AudioRenderer *getAudioRenderer();
210 MediaDataHolder m_media;
212 TimeController m_timeController;
215 bool m_threadsDirty =
false;
217 QPointer<QVideoSink> m_videoSink;
218 QPointer<QAudioOutput> m_audioOutput;
219 QPointer<QAudioBufferOutput> m_audioBufferOutput;
223 ObjectPtr<Demuxer> m_demuxer;
224 std::array<StreamPtr, QPlatformMediaPlayer::NTrackTypes> m_streams;
225 std::array<RendererPtr, QPlatformMediaPlayer::NTrackTypes> m_renderers;
227 bool m_shouldUpdateTimeOnFirstPacket =
false;
228 bool m_seekPending =
false;
232 LoopOffset m_currentLoopOffset;
234 bool m_pitchCompensation =
true;