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 MediaOmxCommonDecoder::ResumeStateMachine() { MOZ_ASSERT(NS_IsMainThread()); ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); DECODER_LOG(PR_LOG_DEBUG, ("%s current time %f", __PRETTY_FUNCTION__, mCurrentTime)); if (!mDecoderStateMachine) { return; } mFallbackToStateMachine = true; mAudioOffloadPlayer = nullptr; int64_t timeUsecs = 0; SecondsToUsecs(mCurrentTime, timeUsecs); mRequestedSeekTarget = SeekTarget(timeUsecs, SeekTarget::Accurate, MediaDecoderEventVisibility::Suppressed); mNextState = mPlayState; ChangeState(PLAY_STATE_LOADING); // exit dormant state RefPtr<nsRunnable> event = NS_NewRunnableMethodWithArg<bool>( mDecoderStateMachine, &MediaDecoderStateMachine::SetDormant, false); mDecoderStateMachine->TaskQueue()->Dispatch(event); }
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>()); } }
void MediaOmxCommonDecoder::ResumeStateMachine() { MOZ_ASSERT(NS_IsMainThread()); ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); DECODER_LOG(PR_LOG_DEBUG, ("%s current time %f", __PRETTY_FUNCTION__, mCurrentTime)); if (!mDecoderStateMachine) { return; } mFallbackToStateMachine = true; mAudioOffloadPlayer = nullptr; int64_t timeUsecs = 0; SecondsToUsecs(mCurrentTime, timeUsecs); mRequestedSeekTarget = SeekTarget(timeUsecs, SeekTarget::Accurate); mNextState = mPlayState; ChangeState(PLAY_STATE_LOADING); mDecoderStateMachine->SetDormant(false); }
void MediaSourceDecoder::SetMediaSourceDuration(double aDuration, MSRangeRemovalAction aAction) { ReentrantMonitorAutoEnter mon(GetReentrantMonitor()); double oldDuration = mMediaSourceDuration; 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; } GetStateMachine()->SetDuration(checkedDuration); mMediaSourceDuration = aDuration; } else { GetStateMachine()->SetDuration(INT64_MAX); mMediaSourceDuration = PositiveInfinity<double>(); } if (mReader) { mReader->SetMediaSourceDuration(mMediaSourceDuration); } ScheduleDurationChange(oldDuration, aDuration, aAction); }