| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #ifndef AVCLOCK_H
- #define AVCLOCK_H
- #include "ffmpeg_compat.h"
- class AVClock
- {
- public:
- AVClock()
- : m_pts(0.0)
- , m_drift(0.0)
- {}
- inline void reset()
- {
- m_pts = 0.0;
- m_drift = 0.0;
- }
- inline void setClock(double pts) { setCloctAt(pts); }
- inline double getClock() {
- // 使用高精度时间计算,减少累积误差
- double currentTime = av_gettime_relative() / 1000000.0;
- return m_drift + currentTime;
- }
- private:
- inline void setCloctAt(double pts)
- {
- // 使用高精度时间设置,减少设置时的精度损失
- double currentTime = av_gettime_relative() / 1000000.0;
- m_drift = pts - currentTime;
- m_pts = pts;
- }
- double m_pts;
- double m_drift;
- };
- #endif // AVCLOCK_H
|