mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-01-07 00:06:57 +01:00
Don't save preview frames if recording is not enabled (#13656)
* Simplify check * Don't write frames * Write frames only if recording enabled
This commit is contained in:
parent
c8521554c8
commit
8db9824842
@ -12,6 +12,7 @@ from pathlib import Path
|
|||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
|
from frigate.comms.config_updater import ConfigSubscriber
|
||||||
from frigate.comms.inter_process import InterProcessRequestor
|
from frigate.comms.inter_process import InterProcessRequestor
|
||||||
from frigate.config import CameraConfig, RecordQualityEnum
|
from frigate.config import CameraConfig, RecordQualityEnum
|
||||||
from frigate.const import CACHE_DIR, CLIPS_DIR, INSERT_PREVIEW, PREVIEW_FRAME_TYPE
|
from frigate.const import CACHE_DIR, CLIPS_DIR, INSERT_PREVIEW, PREVIEW_FRAME_TYPE
|
||||||
@ -170,6 +171,7 @@ class PreviewRecorder:
|
|||||||
|
|
||||||
# create communication for finished previews
|
# create communication for finished previews
|
||||||
self.requestor = InterProcessRequestor()
|
self.requestor = InterProcessRequestor()
|
||||||
|
self.config_subscriber = ConfigSubscriber(f"config/record/{self.config.name}")
|
||||||
|
|
||||||
y, u1, u2, v1, v2 = get_yuv_crop(
|
y, u1, u2, v1, v2 = get_yuv_crop(
|
||||||
self.config.frame_shape_yuv,
|
self.config.frame_shape_yuv,
|
||||||
@ -243,6 +245,9 @@ class PreviewRecorder:
|
|||||||
frame_time: float,
|
frame_time: float,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Decide if this frame should be added to PREVIEW."""
|
"""Decide if this frame should be added to PREVIEW."""
|
||||||
|
if not self.config.record.enabled:
|
||||||
|
return False
|
||||||
|
|
||||||
active_objs = get_active_objects(
|
active_objs = get_active_objects(
|
||||||
frame_time, self.config, current_tracked_objects
|
frame_time, self.config, current_tracked_objects
|
||||||
)
|
)
|
||||||
@ -300,6 +305,12 @@ class PreviewRecorder:
|
|||||||
frame_time: float,
|
frame_time: float,
|
||||||
frame,
|
frame,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
# check for updated record config
|
||||||
|
_, updated_record_config = self.config_subscriber.check_for_update()
|
||||||
|
|
||||||
|
if updated_record_config:
|
||||||
|
self.config.record = updated_record_config
|
||||||
|
|
||||||
# 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
|
||||||
@ -309,14 +320,18 @@ class PreviewRecorder:
|
|||||||
|
|
||||||
# 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:
|
||||||
# save last frame to ensure consistent duration
|
if len(self.output_frames) > 0:
|
||||||
self.output_frames.append(frame_time)
|
# save last frame to ensure consistent duration
|
||||||
self.write_frame_to_cache(frame_time, frame)
|
if self.config.record:
|
||||||
FFMpegConverter(
|
self.output_frames.append(frame_time)
|
||||||
self.config,
|
self.write_frame_to_cache(frame_time, frame)
|
||||||
self.output_frames,
|
|
||||||
self.requestor,
|
# write the preview if any frames exist for this hour
|
||||||
).start()
|
FFMpegConverter(
|
||||||
|
self.config,
|
||||||
|
self.output_frames,
|
||||||
|
self.requestor,
|
||||||
|
).start()
|
||||||
|
|
||||||
# reset frame cache
|
# reset frame cache
|
||||||
self.segment_end = (
|
self.segment_end = (
|
||||||
@ -330,8 +345,10 @@ class PreviewRecorder:
|
|||||||
self.output_frames: list[float] = []
|
self.output_frames: list[float] = []
|
||||||
|
|
||||||
# include first frame to ensure consistent duration
|
# include first frame to ensure consistent duration
|
||||||
self.output_frames.append(frame_time)
|
if self.config.record.enabled:
|
||||||
self.write_frame_to_cache(frame_time, frame)
|
self.output_frames.append(frame_time)
|
||||||
|
self.write_frame_to_cache(frame_time, frame)
|
||||||
|
|
||||||
return True
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user