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); } }
MediaSourceDecoder::MediaSourceDecoder(dom::HTMLMediaElement* aElement) : MediaDecoder(aElement) , mMediaSource(nullptr) , mEnded(false) { SetExplicitDuration(UnspecifiedNaN<double>()); }
void MediaSourceDecoder::SetMediaSourceDuration(double aDuration) { MOZ_ASSERT(NS_IsMainThread()); 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>()); } }
MediaSourceDecoder::MediaSourceDecoder(dom::HTMLMediaElement* aElement) : mMediaSource(nullptr) , mIsUsingFormatReader(Preferences::GetBool("media.mediasource.format-reader", false)) , mEnded(false) { SetExplicitDuration(UnspecifiedNaN<double>()); Init(aElement); }