Move the Vsync logic from VTRenderer into a VsyncSource

This commit is contained in:
Cameron Gutman
2018-08-15 22:02:15 -07:00
parent f929cffce7
commit e68a15c825
7 changed files with 216 additions and 132 deletions
@@ -0,0 +1,45 @@
#pragma once
#include "../renderer.h"
#include <QQueue>
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<AVFrame*> m_FrameQueue;
QQueue<int> m_FrameQueueHistory;
SDL_SpinLock m_FrameQueueLock;
IVsyncSource* m_VsyncSource;
IVsyncRenderer* m_VsyncRenderer;
int m_MaxVideoFps;
int m_DisplayFps;
};