70 void load(
const QUrl &media, QIODevice *stream);
71 void stop(
bool immediate =
false);
87 void setAudioOutput(QPlatformAudioOutput *device);
89 QMediaMetaData
metaData()
const {
return m_metaData; }
93 void setActiveTrack(QPlatformMediaPlayer::TrackType type,
int index);
94 int activeTrack(QPlatformMediaPlayer::TrackType type);
96 QMediaMetaData
trackMetaData(QPlatformMediaPlayer::TrackType type,
int trackNumber);
104 void durationUpdate(qint64 duration) {
if (m_playerControl) m_playerControl->handleDurationUpdate(duration); }
106 void error(QMediaPlayer::Error error, QString errorString,
bool isFatal) {
if (m_playerControl) m_playerControl->handleError(error, errorString, isFatal); }
108 void bufferProgressChanged(
float percentFilled) {
if (m_playerControl) m_playerControl->bufferProgressChanged(percentFilled); }
110 void positionChanged(qint64 position) {
if (m_playerControl) m_playerControl->positionChanged(position); }
122 void handleSessionEvent(
const ComPtr<IMFMediaEvent> &sessionEvent);
123 void handleSourceError(
long hr);
130 ComPtr<IMFMediaSession> m_session;
131 ComPtr<IMFPresentationClock> m_presentationClock;
132 ComPtr<IMFRateControl> m_rateControl;
133 ComPtr<IMFRateSupport> m_rateSupport;
134 ComPtr<IMFAudioStreamVolume> m_volumeControl;
135 ComPtr<IPropertyStore> m_netsourceStatistics;
136 qint64 m_position = 0;
137 qint64 m_restorePosition = -1;
138 qint64 m_timeCounter = 0;
139 UINT64 m_duration = 0;
140 bool m_updatingTopology =
false;
141 bool m_updateRoutingOnStart =
false;
155 void setPositionInternal(qint64 position, Command requestCmd);
156 void setPlaybackRateInternal(qreal rate);
157 void commitRateChange(qreal rate, BOOL isThin);
158 bool canScrub()
const;
159 void scrub(
bool enableScrub);
163 ComPtr<SourceResolver> m_sourceResolver;
164 EventHandle m_hCloseEvent;
184 void setCommand(Command cmd) {
196 PendingState m_pendingState;
198 void updatePendingCommands(Command command);
202 QList<QMediaMetaData> metaData;
203 QList<
int> nativeIndexes;
204 int currentIndex = -1;
205 TOPOID sourceNodeId = -1;
206 TOPOID outputNodeId = -1;
207 GUID format = GUID_NULL;
214 bool m_muted =
false;
216 QPlatformAudioOutput *m_audioOutput =
nullptr;
217 QMediaMetaData m_metaData;
219 void setVolumeInternal(
float volume);
221 bool createSession();
222 void setupPlaybackTopology(IMFMediaSource *source, IMFPresentationDescriptor *sourcePD);
223 bool getStreamInfo(IMFStreamDescriptor *stream,
MFPlayerSession::MediaType *type, QString *name, QString *language, GUID *format)
const;
224 ComPtr<IMFTopologyNode> addSourceNode(IMFTopology *topology, IMFMediaSource *source,
225 IMFPresentationDescriptor *presentationDesc,
226 IMFStreamDescriptor *streamDesc);
227 ComPtr<IMFTopologyNode> addOutputNode(MediaType mediaType, IMFTopology *topology, DWORD sinkID);
229 QAudioFormat audioFormatForMFMediaType(IMFMediaType *mediaType)
const;
231 ComPtr<IMFTopology> insertMFT(
const ComPtr<IMFTopology> &topology, TOPOID outputNodeId);
232 bool insertResizer(IMFTopology *topology);
233 void insertColorConverter(IMFTopology *topology, TOPOID outputNodeId);
235 QTimer m_signalPositionChangeTimer;
236 qint64 m_lastPosition = -1;