From 0d7406bc438943887114fcc598f5824bec2b351d Mon Sep 17 00:00:00 2001 From: ptg Date: Wed, 9 Oct 2024 18:07:07 -0400 Subject: [PATCH] fix precise fps --- ptgctl/tools/mock.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ptgctl/tools/mock.py b/ptgctl/tools/mock.py index 3a81b5d..1936fba 100644 --- a/ptgctl/tools/mock.py +++ b/ptgctl/tools/mock.py @@ -85,6 +85,8 @@ async def _video_feed(src, fps=None, shape=None): if not cap.isOpened(): raise ValueError(f"{cap}") i = 0 + t0 = time.time() + lag = 0 while True: ret, im = cap.read() if not ret: @@ -100,7 +102,11 @@ async def _video_feed(src, fps=None, shape=None): yield im pbar.update() if fps: - await asyncio.sleep(1/fps) + t = time.time() + dt = 1/fps - (t-t0) - lag + await asyncio.sleep(max(0, dt)) + lag = max(-dt, 0) + t0 = t + max(0, dt) @util.async2sync