#ifndef B6D2EB85_A2D9_4037_BDBB_5ADCDA3E3B01 #define B6D2EB85_A2D9_4037_BDBB_5ADCDA3E3B01 /* ******************************************************************************* * INCLUDE ******************************************************************************* */ #include "System.h" #include "util/ClassAssistant.h" #include #include #include #include #include namespace Video { namespace Core { /* ******************************************************************************* * CLASS DECLARE ******************************************************************************* */ class FrameSynchronizer { public: FrameSynchronizer(const std::string& name); ~FrameSynchronizer(); void syncFrame(uint64_t frameTs); void reset(); private: class DriftPredictor { public: DriftPredictor(size_t windowSize = 10); void update(int64_t drift); int64_t predict(); void reset(); private: std::deque _samples; size_t _windowSize; double _lastPrediction; }; READONLY_PROPERTY_DECLARE(name, std::string) uint64_t _baseClock; uint64_t _lastSysTS; DriftPredictor _predictor; }; } } #endif