void MediaPlayerPrivateAVFoundation::seekWithTolerance(const MediaTime& mediaTime, const MediaTime& negativeTolerance, const MediaTime& positiveTolerance) { MediaTime time = mediaTime; if (m_seeking) { LOG(Media, "MediaPlayerPrivateAVFoundation::seekWithTolerance(%p) - save pending seek", this); m_pendingSeek = [this, time, negativeTolerance, positiveTolerance]() { seekWithTolerance(time, negativeTolerance, positiveTolerance); }; return; } m_seeking = true; if (!metaDataAvailable()) return; if (time > durationMediaTime()) time = durationMediaTime(); if (currentMediaTime() == time) return; if (currentTextTrack()) currentTextTrack()->beginSeeking(); LOG(Media, "MediaPlayerPrivateAVFoundation::seek(%p) - seeking to %s", this, toString(time).utf8().data()); seekToTime(time, negativeTolerance, positiveTolerance); }
void MediaPlayerPrivateAVFoundation::seekWithTolerance(double time, double negativeTolerance, double positiveTolerance) { if (m_seeking) { LOG(Media, "MediaPlayerPrivateAVFoundation::seekWithTolerance(%p) - save pending seek", this); m_pendingSeek = [this, time, negativeTolerance, positiveTolerance]() { seekWithTolerance(time, negativeTolerance, positiveTolerance); }; return; } m_seeking = true; if (!metaDataAvailable()) return; if (time > duration()) time = duration(); if (currentTime() == time) return; if (currentTextTrack()) currentTextTrack()->beginSeeking(); LOG(Media, "MediaPlayerPrivateAVFoundation::seek(%p) - seeking to %f", this, time); seekToTime(time, negativeTolerance, positiveTolerance); }
void MediaPlayerPrivateAVFoundation::seekCompleted(bool finished) { LOG(Media, "MediaPlayerPrivateAVFoundation::seekCompleted(%p) - finished = %d", this, finished); UNUSED_PARAM(finished); m_seeking = false; std::function<void()> pendingSeek; std::swap(pendingSeek, m_pendingSeek); if (pendingSeek) { LOG(Media, "MediaPlayerPrivateAVFoundation::seekCompleted(%p) - issuing pending seek", this); pendingSeek(); return; } if (currentTextTrack()) currentTextTrack()->endSeeking(); updateStates(); m_player->timeChanged(); }