13 , m_state(QMediaPlayer::StoppedState)
15 , m_videoAvailable(
false)
16 , m_audioAvailable(
false)
20 m_session =
new MFPlayerSession(
this);
32 if (m_state != QMediaPlayer::StoppedState) {
33 changeState(QMediaPlayer::StoppedState);
40 resetAudioVideoAvailable();
41 handleDurationUpdate(0);
43 m_session->load(media, stream);
48 if (m_state == QMediaPlayer::PlayingState)
51 if (QMediaPlayer::InvalidMedia == m_session->status())
52 m_session->load(m_media, m_stream);
54 switch (m_session->status()) {
55 case QMediaPlayer::NoMedia:
56 case QMediaPlayer::InvalidMedia:
58 case QMediaPlayer::LoadedMedia:
59 case QMediaPlayer::BufferingMedia:
60 case QMediaPlayer::BufferedMedia:
61 case QMediaPlayer::EndOfMedia:
62 changeState(QMediaPlayer::PlayingState);
66 changeState(QMediaPlayer::PlayingState);
74 if (m_state == QMediaPlayer::PausedState)
77 if (m_session->status() == QMediaPlayer::NoMedia ||
78 m_session->status() == QMediaPlayer::InvalidMedia)
81 changeState(QMediaPlayer::PausedState);
88 if (m_state == QMediaPlayer::StoppedState)
90 changeState(QMediaPlayer::StoppedState);
97 return m_session->metaData();
102 m_session->setAudioOutput(output);
112 if (m_state == state)
122 m_stateDirty =
false;
123#ifdef DEBUG_MEDIAFOUNDATION
124 qDebug() <<
"MFPlayerControl::emit stateChanged" << m_state;
126 stateChanged(m_state);
131 QMediaPlayer::MediaStatus status = m_session->status();
133 case QMediaPlayer::EndOfMedia:
138 changeState(QMediaPlayer::StoppedState);
141 case QMediaPlayer::InvalidMedia:
143 case QMediaPlayer::LoadedMedia:
144 case QMediaPlayer::BufferingMedia:
145 case QMediaPlayer::BufferedMedia:
146 if (m_state == QMediaPlayer::PlayingState)
152 mediaStatusChanged(m_session->status());
163 if (m_videoAvailable)
165 m_videoAvailable =
true;
166 videoAvailableChanged(m_videoAvailable);
171 if (m_audioAvailable)
173 m_audioAvailable =
true;
174 audioAvailableChanged(m_audioAvailable);
179 bool videoDirty =
false;
180 if (m_videoAvailable) {
181 m_videoAvailable =
false;
184 if (m_audioAvailable) {
185 m_audioAvailable =
false;
186 audioAvailableChanged(m_audioAvailable);
189 videoAvailableChanged(m_videoAvailable);
194 if (m_duration == duration)
196 m_duration = duration;
197 durationChanged(m_duration);
202 if (m_seekable == seekable)
204 m_seekable = seekable;
205 seekableChanged(m_seekable);
215 return m_session->status();
225 return m_session->position();
230 if (!m_seekable || position == m_session->position())
232 m_session->setPosition(position);
242 return m_audioAvailable;
247 return m_videoAvailable;
262 return m_session->playbackRate();
267 m_session->setPlaybackRate(rate);
284 error(
int(errorCode), errorString);
289 m_session->setActiveTrack(type, index);
294 return m_session->activeTrack(type);
299 return m_session->trackCount(type);
304 return m_session->trackMetaData(type, trackNumber);
bool isAudioAvailable() const override
void handleError(QMediaPlayer::Error errorCode, const QString &errorString, bool isFatal)
qreal playbackRate() const override
QMediaPlayer::PlaybackState state() const override
QMediaMetaData metaData() const override
const QIODevice * mediaStream() const override
void setActiveTrack(TrackType type, int index) override
void setAudioOutput(QPlatformAudioOutput *output) override
QMediaMetaData trackMetaData(TrackType type, int trackNumber) override
void handleAudioAvailable()
void setPlaybackRate(qreal rate) override
void setMedia(const QUrl &media, QIODevice *stream) override
QMediaPlayer::MediaStatus mediaStatus() const override
int activeTrack(TrackType type) override
QUrl media() const override
QMediaTimeRange availablePlaybackRanges() const override
float bufferProgress() const override
bool isVideoAvailable() const override
void handleSeekableUpdate(bool seekable)
qint64 duration() const override
qint64 position() const override
void handleVideoAvailable()
void handleDurationUpdate(qint64 duration)
int trackCount(TrackType type) override
void setPosition(qint64 position) override
bool isSeekable() const override
void handleTracksChanged()
void handleStatusChanged()
void setVideoSink(QVideoSink *sink)
void setPlayerControl(MFPlayerControl *playerControl)
void stop(bool immediate=false)
QMediaTimeRange availablePlaybackRanges()