#pragma once #include "../renderer.h" #include class Pacer; class IVsyncRenderer { public: virtual ~IVsyncRenderer() {} virtual void renderFrameAtVsync(AVFrame* frame) = 0; }; class IVsyncSource { public: virtual ~IVsyncSource() {} virtual bool initialize(SDL_Window* window) = 0; }; class Pacer { public: Pacer(IVsyncRenderer* renderer); ~Pacer(); void submitFrame(AVFrame* frame); bool initialize(SDL_Window* window, int maxVideoFps); void vsyncCallback(); void drain(); private: QQueue m_FrameQueue; QQueue m_FrameQueueHistory; SDL_SpinLock m_FrameQueueLock; IVsyncSource* m_VsyncSource; IVsyncRenderer* m_VsyncRenderer; int m_MaxVideoFps; int m_DisplayFps; };