diff --git a/frigate/output.py b/frigate/output.py index 90a24f3e0..190e37b31 100644 --- a/frigate/output.py +++ b/frigate/output.py @@ -19,6 +19,7 @@ from ws4py.server.wsgirefserver import ( from ws4py.server.wsgiutils import WebSocketWSGIApplication from ws4py.websocket import WebSocket +from frigate.config import FrigateConfig from frigate.util import SharedMemoryFrameManager, get_yuv_crop, copy_yuv_to_position @@ -73,9 +74,11 @@ class BroadcastThread(threading.Thread): class BirdsEyeFrameManager: - def __init__(self, config, frame_manager: SharedMemoryFrameManager, width, height): + def __init__(self, config, frame_manager: SharedMemoryFrameManager): self.config = config self.frame_manager = frame_manager + width = config.birdseye.width + height = config.birdseye.height self.frame_shape = (height, width) self.yuv_shape = (height * 3 // 2, width) self.frame = np.ndarray(self.yuv_shape, dtype=np.uint8) @@ -134,6 +137,7 @@ class BirdsEyeFrameManager: def update_frame(self): # determine how many cameras are tracking objects within the last 30 seconds now = datetime.datetime.now().timestamp() + # TODO: this needs to be based on the "mode" from the config active_cameras = set( [ cam @@ -251,7 +255,7 @@ class BirdsEyeFrameManager: return self.update_frame() -def output_frames(config, video_output_queue): +def output_frames(config: FrigateConfig, video_output_queue): threading.current_thread().name = f"output" setproctitle(f"frigate.output") @@ -289,17 +293,24 @@ def output_frames(config, video_output_queue): camera, converters[camera], websocket_server ) - converters["birdseye"] = FFMpegConverter(1280, 720, 1280, 720, 8) - broadcasters["birdseye"] = BroadcastThread( - "birdseye", converters["birdseye"], websocket_server - ) + if config.birdseye.enabled: + converters["birdseye"] = FFMpegConverter( + config.birdseye.width, + config.birdseye.height, + config.birdseye.width, + config.birdseye.height, + config.birdseye.quality, + ) + broadcasters["birdseye"] = BroadcastThread( + "birdseye", converters["birdseye"], websocket_server + ) websocket_thread.start() for t in broadcasters.values(): t.start() - birdseye_manager = BirdsEyeFrameManager(config, frame_manager, 1280, 720) + birdseye_manager = BirdsEyeFrameManager(config, frame_manager) while not stop_event.is_set(): try: @@ -325,7 +336,7 @@ def output_frames(config, video_output_queue): converters[camera].write(frame.tobytes()) # update birdseye if websockets are connected - if any( + if config.birdseye.enabled and any( ws.environ["PATH_INFO"].endswith("birdseye") for ws in websocket_server.manager ):