mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-13 06:35:24 +03:00
Ensure files are closed
This commit is contained in:
parent
42be7efde4
commit
f24ba6bfc1
@ -127,6 +127,7 @@ def output_frames(
|
|||||||
preview_recorders[camera].write_data(
|
preview_recorders[camera].write_data(
|
||||||
current_tracked_objects, motion_boxes, frame_time, frame
|
current_tracked_objects, motion_boxes, frame_time, frame
|
||||||
)
|
)
|
||||||
|
frame_manager.close(frame_id)
|
||||||
|
|
||||||
move_preview_frames("clips")
|
move_preview_frames("clips")
|
||||||
|
|
||||||
|
|||||||
@ -687,14 +687,14 @@ class DictFrameManager(FrameManager):
|
|||||||
|
|
||||||
class SharedMemoryFrameManager(FrameManager):
|
class SharedMemoryFrameManager(FrameManager):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.shm_store = {}
|
self.shm_store: dict[str, shared_memory.SharedMemory] = {}
|
||||||
|
|
||||||
def create(self, name, size) -> AnyStr:
|
def create(self, name: str, size) -> AnyStr:
|
||||||
shm = shared_memory.SharedMemory(name=name, create=True, size=size)
|
shm = shared_memory.SharedMemory(name=name, create=True, size=size)
|
||||||
self.shm_store[name] = shm
|
self.shm_store[name] = shm
|
||||||
return shm.buf
|
return shm.buf
|
||||||
|
|
||||||
def get(self, name, shape):
|
def get(self, name: str, shape):
|
||||||
if name in self.shm_store:
|
if name in self.shm_store:
|
||||||
shm = self.shm_store[name]
|
shm = self.shm_store[name]
|
||||||
else:
|
else:
|
||||||
@ -702,18 +702,16 @@ class SharedMemoryFrameManager(FrameManager):
|
|||||||
self.shm_store[name] = shm
|
self.shm_store[name] = shm
|
||||||
return np.ndarray(shape, dtype=np.uint8, buffer=shm.buf)
|
return np.ndarray(shape, dtype=np.uint8, buffer=shm.buf)
|
||||||
|
|
||||||
def close(self, name):
|
def close(self, name: str):
|
||||||
if name in self.shm_store:
|
if name in self.shm_store:
|
||||||
self.shm_store[name].close()
|
self.shm_store[name].close()
|
||||||
del self.shm_store[name]
|
del self.shm_store[name]
|
||||||
|
|
||||||
def delete(self, name):
|
def delete(self, name: str):
|
||||||
if name in self.shm_store:
|
if name in self.shm_store:
|
||||||
self.shm_store[name].close()
|
self.shm_store[name].close()
|
||||||
self.shm_store[name].unlink()
|
self.shm_store[name].unlink()
|
||||||
del self.shm_store[name]
|
del self.shm_store[name]
|
||||||
else:
|
|
||||||
logger.error(f"Could not delete {name} the store is {self.shm_store}")
|
|
||||||
|
|
||||||
|
|
||||||
def create_mask(frame_shape, mask):
|
def create_mask(frame_shape, mask):
|
||||||
|
|||||||
@ -109,7 +109,7 @@ def capture_frames(
|
|||||||
skipped_eps = EventsPerSecond()
|
skipped_eps = EventsPerSecond()
|
||||||
skipped_eps.start()
|
skipped_eps.start()
|
||||||
|
|
||||||
shm_count = max(10, config.detect.fps * 2)
|
shm_count = 5
|
||||||
shm_frames: list[str] = []
|
shm_frames: list[str] = []
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
@ -128,6 +128,8 @@ def capture_frames(
|
|||||||
expired_frame_name = shm_frames.pop(0)
|
expired_frame_name = shm_frames.pop(0)
|
||||||
frame_manager.delete(expired_frame_name)
|
frame_manager.delete(expired_frame_name)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
frame_manager.delete(frame_name)
|
||||||
|
|
||||||
# shutdown has been initiated
|
# shutdown has been initiated
|
||||||
if stop_event.is_set():
|
if stop_event.is_set():
|
||||||
break
|
break
|
||||||
@ -150,7 +152,6 @@ def capture_frames(
|
|||||||
except queue.Full:
|
except queue.Full:
|
||||||
# if the queue is full, skip this frame
|
# if the queue is full, skip this frame
|
||||||
skipped_eps.update()
|
skipped_eps.update()
|
||||||
frame_manager.delete(frame_name)
|
|
||||||
|
|
||||||
|
|
||||||
class CameraWatchdog(threading.Thread):
|
class CameraWatchdog(threading.Thread):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user