mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-07-30 13:48:07 +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
|
"birdseye", self.converter, websocket_server, stop_event
|
||||||
)
|
)
|
||||||
self.birdseye_manager = BirdsEyeFrameManager(config, stop_event)
|
self.birdseye_manager = BirdsEyeFrameManager(config, stop_event)
|
||||||
self.config_enabled_subscriber = ConfigSubscriber("config/enabled/")
|
|
||||||
self.birdseye_subscriber = ConfigSubscriber("config/birdseye/")
|
self.birdseye_subscriber = ConfigSubscriber("config/birdseye/")
|
||||||
self.frame_manager = SharedMemoryFrameManager()
|
self.frame_manager = SharedMemoryFrameManager()
|
||||||
self.stop_event = stop_event
|
self.stop_event = stop_event
|
||||||
@ -799,24 +798,13 @@ class Birdseye:
|
|||||||
updated_birdseye_config,
|
updated_birdseye_config,
|
||||||
) = self.birdseye_subscriber.check_for_update()
|
) = self.birdseye_subscriber.check_for_update()
|
||||||
|
|
||||||
(
|
if not updated_birdseye_topic:
|
||||||
updated_enabled_topic,
|
|
||||||
updated_enabled_config,
|
|
||||||
) = self.config_enabled_subscriber.check_for_update()
|
|
||||||
|
|
||||||
if not updated_birdseye_topic and not updated_enabled_topic:
|
|
||||||
break
|
break
|
||||||
|
|
||||||
if updated_birdseye_config:
|
if updated_birdseye_config:
|
||||||
camera_name = updated_birdseye_topic.rpartition("/")[-1]
|
camera_name = updated_birdseye_topic.rpartition("/")[-1]
|
||||||
self.config.cameras[camera_name].birdseye = updated_birdseye_config
|
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(
|
if self.birdseye_manager.update(
|
||||||
camera,
|
camera,
|
||||||
len([o for o in current_tracked_objects if not o["stationary"]]),
|
len([o for o in current_tracked_objects if not o["stationary"]]),
|
||||||
@ -828,6 +816,5 @@ class Birdseye:
|
|||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
self.birdseye_subscriber.stop()
|
self.birdseye_subscriber.stop()
|
||||||
self.config_enabled_subscriber.stop()
|
|
||||||
self.converter.join()
|
self.converter.join()
|
||||||
self.broadcaster.join()
|
self.broadcaster.join()
|
||||||
|
@ -99,12 +99,7 @@ def output_frames(
|
|||||||
websocket_thread = threading.Thread(target=websocket_server.serve_forever)
|
websocket_thread = threading.Thread(target=websocket_server.serve_forever)
|
||||||
|
|
||||||
detection_subscriber = DetectionSubscriber(DetectionTypeEnum.video)
|
detection_subscriber = DetectionSubscriber(DetectionTypeEnum.video)
|
||||||
|
config_enabled_subscriber = ConfigSubscriber("config/enabled/")
|
||||||
enabled_subscribers = {
|
|
||||||
camera: ConfigSubscriber(f"config/enabled/{camera}", True)
|
|
||||||
for camera in config.cameras.keys()
|
|
||||||
if config.cameras[camera].enabled_in_config
|
|
||||||
}
|
|
||||||
|
|
||||||
jsmpeg_cameras: dict[str, JsmpegCamera] = {}
|
jsmpeg_cameras: dict[str, JsmpegCamera] = {}
|
||||||
birdseye: Birdseye | None = None
|
birdseye: Birdseye | None = None
|
||||||
@ -128,16 +123,21 @@ def output_frames(
|
|||||||
|
|
||||||
websocket_thread.start()
|
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():
|
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)
|
(topic, data) = detection_subscriber.check_for_update(timeout=1)
|
||||||
now = datetime.datetime.now().timestamp()
|
now = datetime.datetime.now().timestamp()
|
||||||
|
|
||||||
@ -160,7 +160,7 @@ def output_frames(
|
|||||||
_,
|
_,
|
||||||
) = data
|
) = data
|
||||||
|
|
||||||
if not get_enabled_state(camera):
|
if not config.cameras[camera].enabled:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
frame = frame_manager.get(frame_name, config.cameras[camera].frame_shape_yuv)
|
frame = frame_manager.get(frame_name, config.cameras[camera].frame_shape_yuv)
|
||||||
@ -240,9 +240,7 @@ def output_frames(
|
|||||||
if birdseye is not None:
|
if birdseye is not None:
|
||||||
birdseye.stop()
|
birdseye.stop()
|
||||||
|
|
||||||
for subscriber in enabled_subscribers.values():
|
config_enabled_subscriber.stop()
|
||||||
subscriber.stop()
|
|
||||||
|
|
||||||
websocket_server.manager.close_all()
|
websocket_server.manager.close_all()
|
||||||
websocket_server.manager.stop()
|
websocket_server.manager.stop()
|
||||||
websocket_server.manager.join()
|
websocket_server.manager.join()
|
||||||
|
@ -482,6 +482,10 @@ class ReviewSegmentMaintainer(threading.Thread):
|
|||||||
camera_name = updated_record_topic.rpartition("/")[-1]
|
camera_name = updated_record_topic.rpartition("/")[-1]
|
||||||
self.config.cameras[camera_name].record = updated_record_config
|
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:
|
if updated_review_topic:
|
||||||
camera_name = updated_review_topic.rpartition("/")[-1]
|
camera_name = updated_review_topic.rpartition("/")[-1]
|
||||||
self.config.cameras[camera_name].review = updated_review_config
|
self.config.cameras[camera_name].review = updated_review_config
|
||||||
@ -492,6 +496,10 @@ class ReviewSegmentMaintainer(threading.Thread):
|
|||||||
camera_name
|
camera_name
|
||||||
].enabled = updated_enabled_config.enabled
|
].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)
|
(topic, data) = self.detection_subscriber.check_for_update(timeout=1)
|
||||||
|
|
||||||
if not topic:
|
if not topic:
|
||||||
@ -523,16 +531,14 @@ class ReviewSegmentMaintainer(threading.Thread):
|
|||||||
if camera not in self.indefinite_events:
|
if camera not in self.indefinite_events:
|
||||||
self.indefinite_events[camera] = {}
|
self.indefinite_events[camera] = {}
|
||||||
|
|
||||||
current_segment = self.active_review_segments.get(camera)
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not self.config.cameras[camera].enabled
|
not self.config.cameras[camera].enabled
|
||||||
or not self.config.cameras[camera].record.enabled
|
or not self.config.cameras[camera].record.enabled
|
||||||
):
|
):
|
||||||
if current_segment:
|
|
||||||
self.end_segment(camera)
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
current_segment = self.active_review_segments.get(camera)
|
||||||
|
|
||||||
# Check if the current segment should be processed based on enabled settings
|
# Check if the current segment should be processed based on enabled settings
|
||||||
if current_segment:
|
if current_segment:
|
||||||
if (
|
if (
|
||||||
|
Loading…
Reference in New Issue
Block a user