11 m_session =
new MFPlayerSession(
this);
14MFPlayerControl::~MFPlayerControl()
17 m_session->setPlayerControl(
nullptr);
25 resetAudioVideoAvailable();
26 handleDurationUpdate(0);
28 m_session->load(media, stream);
33 if (state() == QMediaPlayer::PlayingState)
36 if (QMediaPlayer::InvalidMedia == m_session->status())
37 m_session->load(m_media, m_stream);
39 switch (m_session->status()) {
40 case QMediaPlayer::NoMedia:
41 case QMediaPlayer::InvalidMedia:
43 case QMediaPlayer::LoadedMedia:
44 case QMediaPlayer::BufferingMedia:
45 case QMediaPlayer::BufferedMedia:
46 case QMediaPlayer::EndOfMedia:
47 stateChanged(QMediaPlayer::PlayingState);
51 stateChanged(QMediaPlayer::PlayingState);
58 if (state() == QMediaPlayer::PausedState)
61 if (m_session->status() == QMediaPlayer::NoMedia ||
62 m_session->status() == QMediaPlayer::InvalidMedia)
65 stateChanged(QMediaPlayer::PausedState);
71 if (state() == QMediaPlayer::StoppedState)
73 stateChanged(QMediaPlayer::StoppedState);
79 return m_session->metaData();
84 m_session->setAudioOutput(output);
94 if (status == mediaStatus())
98 case QMediaPlayer::EndOfMedia:
103 stateChanged(QMediaPlayer::StoppedState);
106 case QMediaPlayer::InvalidMedia:
108 case QMediaPlayer::LoadedMedia:
109 case QMediaPlayer::BufferingMedia:
110 case QMediaPlayer::BufferedMedia:
111 if (state() == QMediaPlayer::PlayingState)
117 mediaStatusChanged(status);
127 if (m_videoAvailable)
129 m_videoAvailable =
true;
130 videoAvailableChanged(m_videoAvailable);
135 if (m_audioAvailable)
137 m_audioAvailable =
true;
138 audioAvailableChanged(m_audioAvailable);
143 bool videoDirty =
false;
144 if (m_videoAvailable) {
145 m_videoAvailable =
false;
148 if (m_audioAvailable) {
149 m_audioAvailable =
false;
150 audioAvailableChanged(m_audioAvailable);
153 videoAvailableChanged(m_videoAvailable);
158 if (m_duration == duration)
160 m_duration = duration;
161 durationChanged(m_duration);
166 if (m_seekable == seekable)
168 m_seekable = seekable;
169 seekableChanged(m_seekable);
181 return m_session->position();
186 if (!m_seekable || position == m_session->position())
188 m_session->setPosition(position);
198 return m_audioAvailable;
203 return m_videoAvailable;
218 return m_session->playbackRate();
223 m_session->setPlaybackRate(rate);
240 error(errorCode, errorString);
245 m_session->setActiveTrack(type, index);
250 return m_session->activeTrack(type);
255 return m_session->trackCount(type);
260 return m_session->trackMetaData(type, trackNumber);
bool isAudioAvailable() const override
void handleError(QMediaPlayer::Error errorCode, const QString &errorString, bool isFatal)
qreal playbackRate() 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 handleStatusChanged(QMediaPlayer::MediaStatus)
void handleAudioAvailable()
void setPlaybackRate(qreal rate) override
void setMedia(const QUrl &media, QIODevice *stream) 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 setVideoSink(QVideoSink *sink)
void stop(bool immediate=false)
QMediaTimeRange availablePlaybackRanges()