Refactor latest_frame function to get current frame and frame time together

This commit is contained in:
Sergey Krashevich 2023-07-10 21:44:38 +03:00
parent 0b77a8a9e3
commit 094e7de785
No known key found for this signature in database
GPG Key ID: 625171324E7D3856
2 changed files with 10 additions and 9 deletions

View File

@ -1156,7 +1156,7 @@ def latest_frame(camera_name):
resize_quality = request.args.get("quality", default=70, type=int) resize_quality = request.args.get("quality", default=70, type=int)
if camera_name in current_app.frigate_config.cameras: if camera_name in current_app.frigate_config.cameras:
frame = current_app.detected_frames_processor.get_current_frame( frame, frame_time = current_app.detected_frames_processor.get_current_frame(
camera_name, draw_options camera_name, draw_options
) )
retry_interval = float( retry_interval = float(
@ -1164,6 +1164,7 @@ def latest_frame(camera_name):
or 10 or 10
) )
latest_frame = frame_time + retry_interval
now = datetime.now().timestamp() now = datetime.now().timestamp()
if frame is None or now > latest_frame: if frame is None or now > latest_frame:
if ( if (
@ -1180,7 +1181,7 @@ def latest_frame(camera_name):
) )
frame = current_app.camera_waiting_image frame = current_app.camera_waiting_image
logger.warning( logger.warning(
f"Return waiting image for camera {camera_name}: latensy is {datetime.now().timestamp() - latest_frame}s" f"Return waiting image for camera {camera_name}: latency is {datetime.now().timestamp() - latest_frame}s, retry_interval: {retry_interval}s"
) )
else: else:
if current_app.camera_error_image is None: if current_app.camera_error_image is None:
@ -1195,7 +1196,7 @@ def latest_frame(camera_name):
frame = current_app.camera_error_image frame = current_app.camera_error_image
logger.warning( logger.warning(
f"Return error image for camera {camera_name}: latensy is {datetime.now().timestamp() - latest_frame}s" f"Return error image for camera {camera_name}: latency is {datetime.now().timestamp() - latest_frame}s"
) )
height = int(request.args.get("h", str(frame.shape[0]))) height = int(request.args.get("h", str(frame.shape[0])))

View File

@ -11,6 +11,7 @@ from typing import Callable
import cv2 import cv2
import numpy as np import numpy as np
from cv2 import Mat
from frigate.comms.dispatcher import Dispatcher from frigate.comms.dispatcher import Dispatcher
from frigate.config import ( from frigate.config import (
@ -1032,18 +1033,17 @@ class TrackedObjectProcessor(threading.Thread):
else: else:
return {} return {}
def get_current_frame(self, camera, draw_options={}): def get_current_frame(self, camera, draw_options={}) -> tuple[Mat, float]:
if camera == "birdseye": if camera == "birdseye":
return self.frame_manager.get( return self.frame_manager.get(
"birdseye", "birdseye",
(self.config.birdseye.height * 3 // 2, self.config.birdseye.width), (self.config.birdseye.height * 3 // 2, self.config.birdseye.width),
) )
return self.camera_states[camera].get_current_frame(draw_options) return (
self.camera_states[camera].get_current_frame(draw_options),
def get_current_frame_time(self, camera) -> int: self.camera_states[camera].current_frame_time,
"""Returns the latest frame time for a given camera.""" )
return self.camera_states[camera].current_frame_time
def run(self): def run(self):
while not self.stop_event.is_set(): while not self.stop_event.is_set():