From 57c28188965ebb49031061bc44124416f5ffa2da Mon Sep 17 00:00:00 2001 From: George Tsiamasiotis Date: Mon, 21 Oct 2024 12:47:48 +0300 Subject: [PATCH] Convert AudioProcessor to service process --- frigate/app.py | 14 +++++--------- frigate/events/audio.py | 8 +++++--- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/frigate/app.py b/frigate/app.py index 0cf76699c..bc4f626e0 100644 --- a/frigate/app.py +++ b/frigate/app.py @@ -63,6 +63,7 @@ from frigate.record.cleanup import RecordingCleanup from frigate.record.export import migrate_exports from frigate.record.record import manage_recordings from frigate.review.review import manage_review_segments +from frigate.service_manager import ServiceManager from frigate.stats.emitter import StatsEmitter from frigate.stats.util import stats_init from frigate.storage import StorageMaintainer @@ -78,7 +79,6 @@ logger = logging.getLogger(__name__) class FrigateApp: def __init__(self, config: FrigateConfig) -> None: - self.audio_process: Optional[mp.Process] = None self.stop_event: MpEvent = mp.Event() self.detection_queue: Queue = mp.Queue() self.detectors: dict[str, ObjectDetectProcess] = {} @@ -449,9 +449,8 @@ class FrigateApp: ] if audio_cameras: - self.audio_process = AudioProcessor(audio_cameras, self.camera_metrics) - self.audio_process.start() - self.processes["audio_detector"] = self.audio_process.pid or 0 + proc = AudioProcessor(audio_cameras, self.camera_metrics).start(wait=True) + self.processes["audio_detector"] = proc.pid or 0 def start_timeline_processor(self) -> None: self.timeline_processor = TimelineProcessor( @@ -639,11 +638,6 @@ class FrigateApp: ReviewSegment.end_time == None ).execute() - # stop the audio process - if self.audio_process: - self.audio_process.terminate() - self.audio_process.join() - # ensure the capture processes are done for camera, metrics in self.camera_metrics.items(): capture_process = metrics.capture_process @@ -712,4 +706,6 @@ class FrigateApp: shm.close() shm.unlink() + ServiceManager.current().shutdown(wait=True) + os._exit(os.EX_OK) diff --git a/frigate/events/audio.py b/frigate/events/audio.py index 66a27fcd0..45706dcc8 100644 --- a/frigate/events/audio.py +++ b/frigate/events/audio.py @@ -9,7 +9,6 @@ from typing import Tuple import numpy as np import requests -import frigate.util as util from frigate.camera import CameraMetrics from frigate.comms.config_updater import ConfigSubscriber from frigate.comms.detections_updater import DetectionPublisher, DetectionTypeEnum @@ -26,6 +25,7 @@ from frigate.const import ( from frigate.ffmpeg_presets import parse_preset_input from frigate.log import LogPipe from frigate.object_detection import load_labels +from frigate.service_manager import ServiceProcess from frigate.util.builtin import get_ffmpeg_arg_list from frigate.video import start_or_restart_ffmpeg, stop_ffmpeg @@ -63,13 +63,15 @@ def get_ffmpeg_command(ffmpeg: FfmpegConfig) -> list[str]: ) -class AudioProcessor(util.Process): +class AudioProcessor(ServiceProcess): + name = "frigate.audio_manager" + def __init__( self, cameras: list[CameraConfig], camera_metrics: dict[str, CameraMetrics], ): - super().__init__(name="frigate.audio_manager", daemon=True) + super().__init__() self.camera_metrics = camera_metrics self.cameras = cameras