mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-01-07 00:06:57 +01:00
Improve handling of empty frames (#13651)
This commit is contained in:
parent
cae11cbb86
commit
ceb7aa8b36
@ -881,7 +881,7 @@ class CameraState:
|
|||||||
current_thumb_frames = {
|
current_thumb_frames = {
|
||||||
obj.thumbnail_data["frame_time"]
|
obj.thumbnail_data["frame_time"]
|
||||||
for obj in tracked_objects.values()
|
for obj in tracked_objects.values()
|
||||||
if not obj.false_positive
|
if not obj.false_positive and obj.thumbnail_data is not None
|
||||||
}
|
}
|
||||||
current_best_frames = {
|
current_best_frames = {
|
||||||
obj.thumbnail_data["frame_time"] for obj in self.best_objects.values()
|
obj.thumbnail_data["frame_time"] for obj in self.best_objects.values()
|
||||||
|
@ -188,6 +188,7 @@ class CameraWatchdog(threading.Thread):
|
|||||||
self.frame_queue = frame_queue
|
self.frame_queue = frame_queue
|
||||||
self.frame_shape = self.config.frame_shape_yuv
|
self.frame_shape = self.config.frame_shape_yuv
|
||||||
self.frame_size = self.frame_shape[0] * self.frame_shape[1]
|
self.frame_size = self.frame_shape[0] * self.frame_shape[1]
|
||||||
|
self.fps_overflow_count = 0
|
||||||
self.stop_event = stop_event
|
self.stop_event = stop_event
|
||||||
self.sleeptime = self.config.ffmpeg.retry_interval
|
self.sleeptime = self.config.ffmpeg.retry_interval
|
||||||
|
|
||||||
@ -237,18 +238,25 @@ class CameraWatchdog(threading.Thread):
|
|||||||
self.ffmpeg_detect_process.kill()
|
self.ffmpeg_detect_process.kill()
|
||||||
self.ffmpeg_detect_process.communicate()
|
self.ffmpeg_detect_process.communicate()
|
||||||
elif self.camera_fps.value >= (self.config.detect.fps + 10):
|
elif self.camera_fps.value >= (self.config.detect.fps + 10):
|
||||||
self.camera_fps.value = 0
|
self.fps_overflow_count += 1
|
||||||
self.logger.info(
|
|
||||||
f"{self.camera_name} exceeded fps limit. Exiting ffmpeg..."
|
if self.fps_overflow_count == 3:
|
||||||
)
|
self.fps_overflow_count = 0
|
||||||
self.ffmpeg_detect_process.terminate()
|
self.camera_fps.value = 0
|
||||||
try:
|
self.logger.info(
|
||||||
self.logger.info("Waiting for ffmpeg to exit gracefully...")
|
f"{self.camera_name} exceeded fps limit. Exiting ffmpeg..."
|
||||||
self.ffmpeg_detect_process.communicate(timeout=30)
|
)
|
||||||
except sp.TimeoutExpired:
|
self.ffmpeg_detect_process.terminate()
|
||||||
self.logger.info("FFmpeg did not exit. Force killing...")
|
try:
|
||||||
self.ffmpeg_detect_process.kill()
|
self.logger.info("Waiting for ffmpeg to exit gracefully...")
|
||||||
self.ffmpeg_detect_process.communicate()
|
self.ffmpeg_detect_process.communicate(timeout=30)
|
||||||
|
except sp.TimeoutExpired:
|
||||||
|
self.logger.info("FFmpeg did not exit. Force killing...")
|
||||||
|
self.ffmpeg_detect_process.kill()
|
||||||
|
self.ffmpeg_detect_process.communicate()
|
||||||
|
else:
|
||||||
|
# process is running normally
|
||||||
|
self.fps_overflow_count = 0
|
||||||
|
|
||||||
for p in self.ffmpeg_other_processes:
|
for p in self.ffmpeg_other_processes:
|
||||||
poll = p["process"].poll()
|
poll = p["process"].poll()
|
||||||
|
Loading…
Reference in New Issue
Block a user