mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-07-26 13:47:03 +02:00
Clean up enabled config updates (#17547)
* Immediately end review item for disabled cameras * Clean up checks * Remove duplicate enabled checkers * Cleanup
This commit is contained in:
parent
e60df795ad
commit
7bfcf2040d
@ -754,7 +754,6 @@ class Birdseye:
|
||||
"birdseye", self.converter, websocket_server, stop_event
|
||||
)
|
||||
self.birdseye_manager = BirdsEyeFrameManager(config, stop_event)
|
||||
self.config_enabled_subscriber = ConfigSubscriber("config/enabled/")
|
||||
self.birdseye_subscriber = ConfigSubscriber("config/birdseye/")
|
||||
self.frame_manager = SharedMemoryFrameManager()
|
||||
self.stop_event = stop_event
|
||||
@ -799,24 +798,13 @@ class Birdseye:
|
||||
updated_birdseye_config,
|
||||
) = self.birdseye_subscriber.check_for_update()
|
||||
|
||||
(
|
||||
updated_enabled_topic,
|
||||
updated_enabled_config,
|
||||
) = self.config_enabled_subscriber.check_for_update()
|
||||
|
||||
if not updated_birdseye_topic and not updated_enabled_topic:
|
||||
if not updated_birdseye_topic:
|
||||
break
|
||||
|
||||
if updated_birdseye_config:
|
||||
camera_name = updated_birdseye_topic.rpartition("/")[-1]
|
||||
self.config.cameras[camera_name].birdseye = updated_birdseye_config
|
||||
|
||||
if updated_enabled_config:
|
||||
camera_name = updated_enabled_topic.rpartition("/")[-1]
|
||||
self.config.cameras[
|
||||
camera_name
|
||||
].enabled = updated_enabled_config.enabled
|
||||
|
||||
if self.birdseye_manager.update(
|
||||
camera,
|
||||
len([o for o in current_tracked_objects if not o["stationary"]]),
|
||||
@ -828,6 +816,5 @@ class Birdseye:
|
||||
|
||||
def stop(self) -> None:
|
||||
self.birdseye_subscriber.stop()
|
||||
self.config_enabled_subscriber.stop()
|
||||
self.converter.join()
|
||||
self.broadcaster.join()
|
||||
|
@ -99,12 +99,7 @@ def output_frames(
|
||||
websocket_thread = threading.Thread(target=websocket_server.serve_forever)
|
||||
|
||||
detection_subscriber = DetectionSubscriber(DetectionTypeEnum.video)
|
||||
|
||||
enabled_subscribers = {
|
||||
camera: ConfigSubscriber(f"config/enabled/{camera}", True)
|
||||
for camera in config.cameras.keys()
|
||||
if config.cameras[camera].enabled_in_config
|
||||
}
|
||||
config_enabled_subscriber = ConfigSubscriber("config/enabled/")
|
||||
|
||||
jsmpeg_cameras: dict[str, JsmpegCamera] = {}
|
||||
birdseye: Birdseye | None = None
|
||||
@ -128,16 +123,21 @@ def output_frames(
|
||||
|
||||
websocket_thread.start()
|
||||
|
||||
def get_enabled_state(camera: str) -> bool:
|
||||
_, config_data = enabled_subscribers[camera].check_for_update()
|
||||
|
||||
if config_data:
|
||||
config.cameras[camera].enabled = config_data.enabled
|
||||
return config_data.enabled
|
||||
|
||||
return config.cameras[camera].enabled
|
||||
|
||||
while not stop_event.is_set():
|
||||
# check if there is an updated config
|
||||
while True:
|
||||
(
|
||||
updated_enabled_topic,
|
||||
updated_enabled_config,
|
||||
) = config_enabled_subscriber.check_for_update()
|
||||
|
||||
if not updated_enabled_topic:
|
||||
break
|
||||
|
||||
if updated_enabled_config:
|
||||
camera_name = updated_enabled_topic.rpartition("/")[-1]
|
||||
config.cameras[camera_name].enabled = updated_enabled_config.enabled
|
||||
|
||||
(topic, data) = detection_subscriber.check_for_update(timeout=1)
|
||||
now = datetime.datetime.now().timestamp()
|
||||
|
||||
@ -160,7 +160,7 @@ def output_frames(
|
||||
_,
|
||||
) = data
|
||||
|
||||
if not get_enabled_state(camera):
|
||||
if not config.cameras[camera].enabled:
|
||||
continue
|
||||
|
||||
frame = frame_manager.get(frame_name, config.cameras[camera].frame_shape_yuv)
|
||||
@ -240,9 +240,7 @@ def output_frames(
|
||||
if birdseye is not None:
|
||||
birdseye.stop()
|
||||
|
||||
for subscriber in enabled_subscribers.values():
|
||||
subscriber.stop()
|
||||
|
||||
config_enabled_subscriber.stop()
|
||||
websocket_server.manager.close_all()
|
||||
websocket_server.manager.stop()
|
||||
websocket_server.manager.join()
|
||||
|
@ -482,6 +482,10 @@ class ReviewSegmentMaintainer(threading.Thread):
|
||||
camera_name = updated_record_topic.rpartition("/")[-1]
|
||||
self.config.cameras[camera_name].record = updated_record_config
|
||||
|
||||
# immediately end segment
|
||||
if not updated_record_config.enabled:
|
||||
self.end_segment(camera_name)
|
||||
|
||||
if updated_review_topic:
|
||||
camera_name = updated_review_topic.rpartition("/")[-1]
|
||||
self.config.cameras[camera_name].review = updated_review_config
|
||||
@ -492,6 +496,10 @@ class ReviewSegmentMaintainer(threading.Thread):
|
||||
camera_name
|
||||
].enabled = updated_enabled_config.enabled
|
||||
|
||||
# immediately end segment as we may not get another update
|
||||
if not updated_enabled_config.enabled:
|
||||
self.end_segment(camera_name)
|
||||
|
||||
(topic, data) = self.detection_subscriber.check_for_update(timeout=1)
|
||||
|
||||
if not topic:
|
||||
@ -523,16 +531,14 @@ class ReviewSegmentMaintainer(threading.Thread):
|
||||
if camera not in self.indefinite_events:
|
||||
self.indefinite_events[camera] = {}
|
||||
|
||||
current_segment = self.active_review_segments.get(camera)
|
||||
|
||||
if (
|
||||
not self.config.cameras[camera].enabled
|
||||
or not self.config.cameras[camera].record.enabled
|
||||
):
|
||||
if current_segment:
|
||||
self.end_segment(camera)
|
||||
continue
|
||||
|
||||
current_segment = self.active_review_segments.get(camera)
|
||||
|
||||
# Check if the current segment should be processed based on enabled settings
|
||||
if current_segment:
|
||||
if (
|
||||
|
Loading…
Reference in New Issue
Block a user