48 lines
1.5 KiB
C++
48 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "VideoIOTypes.h"
|
|
#include "VideoPlayoutPolicy.h"
|
|
|
|
#include <cstdint>
|
|
|
|
struct VideoPlayoutRecoveryDecision
|
|
{
|
|
VideoIOCompletionResult result = VideoIOCompletionResult::Completed;
|
|
uint64_t completedFrameIndex = 0;
|
|
uint64_t scheduledFrameIndex = 0;
|
|
uint64_t readyQueueDepth = 0;
|
|
uint64_t scheduledLeadFrames = 0;
|
|
uint64_t measuredLagFrames = 0;
|
|
uint64_t catchUpFrames = 0;
|
|
uint64_t lateStreak = 0;
|
|
uint64_t dropStreak = 0;
|
|
};
|
|
|
|
class VideoPlayoutScheduler
|
|
{
|
|
public:
|
|
void Configure(int64_t frameDuration, int64_t timeScale);
|
|
void Configure(int64_t frameDuration, int64_t timeScale, const VideoPlayoutPolicy& policy);
|
|
void Reset();
|
|
VideoIOScheduleTime NextScheduleTime();
|
|
VideoPlayoutRecoveryDecision AccountForCompletionResult(VideoIOCompletionResult result, uint64_t readyQueueDepth = 0);
|
|
double FrameBudgetMilliseconds() const;
|
|
uint64_t ScheduledFrameIndex() const { return mScheduledFrameIndex; }
|
|
uint64_t CompletedFrameIndex() const { return mCompletedFrameIndex; }
|
|
uint64_t LateStreak() const { return mLateStreak; }
|
|
uint64_t DropStreak() const { return mDropStreak; }
|
|
int64_t TimeScale() const { return mTimeScale; }
|
|
const VideoPlayoutPolicy& Policy() const { return mPolicy; }
|
|
|
|
private:
|
|
uint64_t MeasureLag(VideoIOCompletionResult result, uint64_t readyQueueDepth) const;
|
|
|
|
int64_t mFrameDuration = 0;
|
|
int64_t mTimeScale = 0;
|
|
uint64_t mScheduledFrameIndex = 0;
|
|
uint64_t mCompletedFrameIndex = 0;
|
|
uint64_t mLateStreak = 0;
|
|
uint64_t mDropStreak = 0;
|
|
VideoPlayoutPolicy mPolicy;
|
|
};
|