Simplify checks to rely on other cameras

This commit is contained in:
Nicolas Mowen 2024-08-30 16:10:07 -06:00
parent a1634a886e
commit d4eb37e9d3
2 changed files with 12 additions and 8 deletions

View File

@ -1,5 +1,6 @@
"""Handle outputting raw frigate frames""" """Handle outputting raw frigate frames"""
import datetime
import logging import logging
import multiprocessing as mp import multiprocessing as mp
import os import os
@ -65,7 +66,6 @@ def output_frames(
birdseye: Optional[Birdseye] = None birdseye: Optional[Birdseye] = None
preview_recorders: dict[str, PreviewRecorder] = {} preview_recorders: dict[str, PreviewRecorder] = {}
preview_write_times: dict[str, float] = {} preview_write_times: dict[str, float] = {}
last_preview_health_check: float = 0
move_preview_frames("cache") move_preview_frames("cache")
@ -124,7 +124,7 @@ def output_frames(
) )
# send frames for low fps recording # send frames for low fps recording
preview_recorders[camera].write_data( generated_preview = preview_recorders[camera].write_data(
current_tracked_objects, motion_boxes, frame_time, frame current_tracked_objects, motion_boxes, frame_time, frame
) )
preview_write_times[camera] = frame_time preview_write_times[camera] = frame_time
@ -133,12 +133,14 @@ def output_frames(
if camera in previous_frames: if camera in previous_frames:
frame_manager.delete(f"{camera}{previous_frames[camera]}") frame_manager.delete(f"{camera}{previous_frames[camera]}")
# every 10 seconds check if any cameras have stale frames # if another camera generated a preview,
if frame_time - last_preview_health_check > 10: # check for any cameras that are currently offline
last_preview_health_check = frame_time # and need to generate a preview
for camera, time in preview_write_times.items(): if generated_preview:
for camera, time in preview_write_times.copy().items():
if time != 0 and frame_time - time > 10: if time != 0 and frame_time - time > 10:
preview_recorders[camera].flag_offline(frame_time) preview_recorders[camera].flag_offline(frame_time)
preview_write_times[camera] = frame_time
previous_frames[camera] = frame_time previous_frames[camera] = frame_time

View File

@ -299,13 +299,13 @@ class PreviewRecorder:
motion_boxes: list[list[int]], motion_boxes: list[list[int]],
frame_time: float, frame_time: float,
frame, frame,
) -> None: ) -> bool:
# always write the first frame # always write the first frame
if self.start_time == 0: if self.start_time == 0:
self.start_time = frame_time self.start_time = frame_time
self.output_frames.append(frame_time) self.output_frames.append(frame_time)
self.write_frame_to_cache(frame_time, frame) self.write_frame_to_cache(frame_time, frame)
return return False
# check if PREVIEW clip should be generated and cached frames reset # check if PREVIEW clip should be generated and cached frames reset
if frame_time >= self.segment_end: if frame_time >= self.segment_end:
@ -332,9 +332,11 @@ class PreviewRecorder:
# include first frame to ensure consistent duration # include first frame to ensure consistent duration
self.output_frames.append(frame_time) self.output_frames.append(frame_time)
self.write_frame_to_cache(frame_time, frame) self.write_frame_to_cache(frame_time, frame)
return True
elif self.should_write_frame(current_tracked_objects, motion_boxes, frame_time): elif self.should_write_frame(current_tracked_objects, motion_boxes, frame_time):
self.output_frames.append(frame_time) self.output_frames.append(frame_time)
self.write_frame_to_cache(frame_time, frame) self.write_frame_to_cache(frame_time, frame)
return False
def flag_offline(self, frame_time: float) -> None: def flag_offline(self, frame_time: float) -> None:
# check if PREVIEW clip should be generated and cached frames reset # check if PREVIEW clip should be generated and cached frames reset