|
|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
#pragma once |
|
|
|
|
#include <cstdint> |
|
|
|
|
|
|
|
|
|
// Сетка 30 fps с допуском половины периода: дрожание PTS не превращает 30 fps в 15.
|
|
|
|
|
// Сетка 30 fps с допуском четверти периода: дрожание PTS не превращает 30 fps в 15.
|
|
|
|
|
class CallVideoCadence { |
|
|
|
|
int64_t origin = -1, lastSlot = -1; |
|
|
|
|
public: |
|
|
|
|
@ -9,7 +9,7 @@ public:
|
|
|
|
|
if (origin < 0) origin = pts; |
|
|
|
|
if (pts < origin) return false; |
|
|
|
|
const int64_t elapsed = pts - origin; |
|
|
|
|
const int64_t slot = (elapsed / 1000000) * 30 + ((elapsed % 1000000) * 30 + 500000) / 1000000; |
|
|
|
|
const int64_t slot = (elapsed / 1000000) * 30 + ((elapsed % 1000000) * 30 + 250000) / 1000000; |
|
|
|
|
if (slot <= lastSlot) return false; |
|
|
|
|
lastSlot = slot; |
|
|
|
|
return true; |
|
|
|
|
|