#pragma once #include "stdafx.h" #include #include "../Utilities/AutoResetEvent.h" #include "FrameInfo.h" class IRenderingDevice; class AviRecorder; enum class VideoCodec; class VideoRenderer { private: static unique_ptr Instance; AutoResetEvent _waitForRender; unique_ptr _renderThread; IRenderingDevice* _renderer = nullptr; atomic _stopFlag; shared_ptr _aviRecorder; void RenderThread(); public: static VideoRenderer* GetInstance(); VideoRenderer(); ~VideoRenderer(); void StartThread(); void StopThread(); void UpdateFrame(void *frameBuffer, uint32_t width, uint32_t height); void RegisterRenderingDevice(IRenderingDevice *renderer); void UnregisterRenderingDevice(IRenderingDevice *renderer); void StartRecording(string filename, VideoCodec codec, uint32_t compressionLevel); void AddRecordingSound(int16_t* soundBuffer, uint32_t sampleCount, uint32_t sampleRate); void StopRecording(); bool IsRecording(); };