void BbMediaPlayerControl::setPosition(qint64 position) { if (m_position != position) { m_position = position; // Don't update in stopped state, it would not have any effect. Instead, the position is // updated in play(). if (m_state != QMediaPlayer::StoppedState) setPositionInternal(m_position); emit positionChanged(m_position); } }
void MmRendererMediaPlayerControl::play() { if (m_playAfterMediaLoaded) m_playAfterMediaLoaded = false; // No-op if we are already playing, except if we were called from continueLoadMedia(), in which // case m_playAfterMediaLoaded is true (hence the 'else'). else if (m_state == QMediaPlayer::PlayingState) return; if (m_mediaStatus == QMediaPlayer::LoadingMedia) { // State changes are supposed to be synchronous setState(QMediaPlayer::PlayingState); // Defer playing to later, when the timer triggers continueLoadMedia() m_playAfterMediaLoaded = true; return; } // Un-pause the state when it is paused if (m_state == QMediaPlayer::PausedState) { setPlaybackRateInternal(m_rate); setState(QMediaPlayer::PlayingState); return; } if (m_media.isNull() || !m_connection || !m_context || m_audioId == -1) { setState(QMediaPlayer::StoppedState); return; } if (m_mediaStatus == QMediaPlayer::EndOfMedia) m_position = 0; setPositionInternal(m_position); setVolumeInternal(m_muted ? 0 : m_volume); setPlaybackRateInternal(m_rate); if (mmr_play(m_context) != 0) { setState(QMediaPlayer::StoppedState); emitMmError("mmr_play() failed"); return; } m_stopEventsToIgnore = 0; // once playing, stop events must be proccessed setState( QMediaPlayer::PlayingState); }