72 void load(
const QUrl &media, QIODevice *stream);
73 void stop(
bool immediate =
false);
89 void setAudioOutput(QPlatformAudioOutput *device);
91 QMediaMetaData
metaData()
const {
return m_metaData; }
98 QMediaMetaData
trackMetaData(TrackType type,
int trackNumber);
102 void statusChanged(QMediaPlayer::MediaStatus status) {
if (m_playerControl) m_playerControl->handleStatusChanged(status); }
106 void durationUpdate(qint64 duration) {
if (m_playerControl) m_playerControl->handleDurationUpdate(duration); }
108 void error(QMediaPlayer::Error error, QString errorString,
bool isFatal) {
if (m_playerControl) m_playerControl->handleError(error, errorString, isFatal); }
110 void bufferProgressChanged(
float percentFilled) {
if (m_playerControl) m_playerControl->bufferProgressChanged(percentFilled); }
112 void positionChanged(qint64 position) {
if (m_playerControl) m_playerControl->positionChanged(position); }
124 void handleSessionEvent(
const ComPtr<IMFMediaEvent> &sessionEvent);
125 void handleSourceError(
long hr);
132 ComPtr<IMFMediaSession> m_session;
133 ComPtr<IMFPresentationClock> m_presentationClock;
134 ComPtr<IMFRateControl> m_rateControl;
135 ComPtr<IMFRateSupport> m_rateSupport;
136 ComPtr<IMFAudioStreamVolume> m_volumeControl;
137 ComPtr<IPropertyStore> m_netsourceStatistics;
138 qint64 m_position = 0;
139 qint64 m_restorePosition = -1;
140 qint64 m_timeCounter = 0;
141 UINT64 m_duration = 0;
142 bool m_updatingTopology =
false;
143 bool m_updateRoutingOnStart =
false;
157 void setPositionInternal(qint64 position, Command requestCmd);
158 void setPlaybackRateInternal(qreal rate);
159 void commitRateChange(qreal rate, BOOL isThin);
160 bool canScrub()
const;
161 void scrub(
bool enableScrub);
165 ComPtr<SourceResolver> m_sourceResolver;
166 EventHandle m_hCloseEvent;
168 bool m_deferredPause =
false;
187 void setCommand(Command cmd) {
199 PendingState m_pendingState;
201 void updatePendingCommands(Command command);
205 QList<QMediaMetaData> metaData;
206 QList<
int> nativeIndexes;
207 int currentIndex = -1;
208 TOPOID sourceNodeId = -1;
209 TOPOID outputNodeId = -1;
210 GUID format = GUID_NULL;
212 QPlatformMediaPlayer::TrackTypeMap<TrackInfo> m_trackInfo;
216 bool m_muted =
false;
218 QPlatformAudioOutput *m_audioOutput =
nullptr;
219 QMediaMetaData m_metaData;
221 void setVolumeInternal(
float volume);
223 bool createSession();
224 void setupPlaybackTopology(IMFMediaSource *source, IMFPresentationDescriptor *sourcePD);
225 bool getStreamInfo(IMFStreamDescriptor *stream,
MFPlayerSession::MediaType *type, QString *name, QString *language, GUID *format)
const;
226 ComPtr<IMFTopologyNode> addSourceNode(IMFTopology *topology, IMFMediaSource *source,
227 IMFPresentationDescriptor *presentationDesc,
228 IMFStreamDescriptor *streamDesc);
229 ComPtr<IMFTopologyNode> addOutputNode(MediaType mediaType, IMFTopology *topology, DWORD sinkID);
231 QAudioFormat audioFormatForMFMediaType(IMFMediaType *mediaType)
const;
233 ComPtr<IMFTopology> insertMFT(
const ComPtr<IMFTopology> &topology, TOPOID outputNodeId);
234 bool insertResizer(IMFTopology *topology);
235 void insertColorConverter(IMFTopology *topology, TOPOID outputNodeId);
237 QTimer m_signalPositionChangeTimer;
238 qint64 m_lastPosition = -1;