#pragma once #include "../../decoder.h" #include "../renderer.h" #include class IVsyncSource { public: virtual ~IVsyncSource() {} virtual bool initialize(SDL_Window* window, int displayFps) = 0; }; class Pacer { public: Pacer(IFFmpegRenderer* renderer, PVIDEO_STATS videoStats); ~Pacer(); void submitFrame(AVFrame* frame); bool initialize(SDL_Window* window, int maxVideoFps, bool enablePacing); void vsyncCallback(int timeUntilNextVsyncMillis); bool isUsingFrameQueue(); private: QQueue m_FrameQueue; QQueue m_FrameQueueHistory; SDL_SpinLock m_FrameQueueLock; IVsyncSource* m_VsyncSource; IFFmpegRenderer* m_VsyncRenderer; int m_MaxVideoFps; int m_DisplayFps; PVIDEO_STATS m_VideoStats; };