mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-14 15:15:22 +03:00
Simplify checks to rely on other cameras
This commit is contained in:
parent
a1634a886e
commit
d4eb37e9d3
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user