void MediaSourceDecoder::SetMediaSourceDuration(double aDuration, MSRangeRemovalAction aAction) { MOZ_ASSERT(NS_IsMainThread()); ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); double oldDuration = ExplicitDuration(); if (aDuration >= 0) { int64_t checkedDuration; if (NS_FAILED(SecondsToUsecs(aDuration, checkedDuration))) { // INT64_MAX is used as infinity by the state machine. // We want a very bigger number, but not infinity. checkedDuration = INT64_MAX - 1; } SetExplicitDuration(aDuration); } else { SetExplicitDuration(PositiveInfinity<double>()); } if (!mIsUsingFormatReader && GetReader()) { GetReader()->SetMediaSourceDuration(ExplicitDuration()); } if (mMediaSource && aAction != MSRangeRemovalAction::SKIP) { mMediaSource->DurationChange(oldDuration, aDuration); } }
void MediaSourceDecoder::SetInitialDuration(int64_t aDuration) { MOZ_ASSERT(NS_IsMainThread()); // Only use the decoded duration if one wasn't already // set. if (!mMediaSource || !IsNaN(ExplicitDuration())) { return; } double duration = aDuration; // A duration of -1 is +Infinity. if (aDuration >= 0) { duration /= USECS_PER_S; } SetMediaSourceDuration(duration, MSRangeRemovalAction::SKIP); }
double MediaSourceDecoder::GetDuration() { MOZ_ASSERT(NS_IsMainThread()); return ExplicitDuration(); }
double MediaSourceDecoder::GetDuration() { ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); return ExplicitDuration(); }