#include "VideoPlayoutScheduler.h" void VideoPlayoutScheduler::Configure(int64_t frameDuration, int64_t timeScale) { mFrameDuration = frameDuration; mTimeScale = timeScale; Reset(); } void VideoPlayoutScheduler::Reset() { mScheduledFrameIndex = 0; } VideoIOScheduleTime VideoPlayoutScheduler::NextScheduleTime() { VideoIOScheduleTime time; time.streamTime = static_cast(mScheduledFrameIndex) * mFrameDuration; time.duration = mFrameDuration; time.timeScale = mTimeScale; time.frameIndex = mScheduledFrameIndex; ++mScheduledFrameIndex; return time; } void VideoPlayoutScheduler::AccountForCompletionResult(VideoIOCompletionResult result) { if (result == VideoIOCompletionResult::DisplayedLate || result == VideoIOCompletionResult::Dropped) mScheduledFrameIndex += 2; } double VideoPlayoutScheduler::FrameBudgetMilliseconds() const { return mTimeScale != 0 ? (static_cast(mFrameDuration) * 1000.0) / static_cast(mTimeScale) : 0.0; }