demuxer_(demuxer.Pass()),
pending_event_(NO_EVENT_PENDING),
playing_(false),
- clock_(&default_tick_clock_),
+ interpolator_(&default_tick_clock_),
doing_browser_seek_(false),
pending_seek_(false),
drm_bridge_(NULL),
base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged,
weak_factory_.GetWeakPtr())));
demuxer_->Initialize(this);
- clock_.SetMaxTime(base::TimeDelta());
+ interpolator_.SetUpperBound(base::TimeDelta());
weak_this_ = weak_factory_.GetWeakPtr();
}
pending_seek_ = false;
- clock_.SetTime(seek_time, seek_time);
+ interpolator_.SetBounds(seek_time, seek_time);
if (audio_decoder_job_->is_decoding())
audio_decoder_job_->StopDecode();
}
base::TimeDelta MediaSourcePlayer::GetCurrentTime() {
- return clock_.Elapsed();
+ return std::min(interpolator_.GetInterpolatedTime(), duration_);
}
base::TimeDelta MediaSourcePlayer::GetDuration() {
DVLOG(1) << __FUNCTION__;
DCHECK(!HasAudio() && !HasVideo());
duration_ = configs.duration;
- clock_.SetDuration(duration_);
audio_decoder_job_->SetDemuxerConfigs(configs);
video_decoder_job_->SetDemuxerConfigs(configs);
void MediaSourcePlayer::OnDemuxerDurationChanged(base::TimeDelta duration) {
duration_ = duration;
- clock_.SetDuration(duration_);
}
void MediaSourcePlayer::OnMediaCryptoReady() {
DCHECK(seek_time >= GetCurrentTime());
DVLOG(1) << __FUNCTION__ << " : setting clock to actual browser seek time: "
<< seek_time.InSecondsF();
- clock_.SetTime(seek_time, seek_time);
+ interpolator_.SetBounds(seek_time, seek_time);
audio_decoder_job_->SetBaseTimestamp(seek_time);
} else {
DCHECK(actual_browser_seek_time == kNoTimestamp());
void MediaSourcePlayer::UpdateTimestamps(
base::TimeDelta current_presentation_timestamp,
base::TimeDelta max_presentation_timestamp) {
- clock_.SetTime(current_presentation_timestamp, max_presentation_timestamp);
+ interpolator_.SetBounds(current_presentation_timestamp,
+ max_presentation_timestamp);
manager()->OnTimeUpdate(player_id(), GetCurrentTime());
}
if (!playing_) {
if (is_clock_manager)
- clock_.Pause();
+ interpolator_.StopInterpolating();
return;
}
if (AudioFinished() && VideoFinished()) {
playing_ = false;
- clock_.Pause();
+ interpolator_.StopInterpolating();
start_time_ticks_ = base::TimeTicks();
manager()->OnPlaybackComplete(player_id());
}
start_time_ticks_ = base::TimeTicks::Now();
start_presentation_timestamp_ = GetCurrentTime();
- if (!clock_.IsPlaying())
- clock_.Play();
+ if (!interpolator_.interpolating())
+ interpolator_.StartInterpolating();
if (!AudioFinished())
DecodeMoreAudio();