diff --git a/frigate/http.py b/frigate/http.py index f1b00fbb0..8208f07fc 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -76,6 +76,7 @@ def create_app( app.storage_maintainer = storage_maintainer app.plus_api = plus_api app.camera_error_image = None + app.hwaccel_errors = [] app.register_blueprint(bp) @@ -761,7 +762,11 @@ def version(): @bp.route("/stats") def stats(): - stats = stats_snapshot(current_app.frigate_config, current_app.stats_tracking, []) + stats = stats_snapshot( + current_app.frigate_config, + current_app.stats_tracking, + current_app.hwaccel_errors, + ) return jsonify(stats) @@ -861,7 +866,9 @@ def latest_frame(camera_name): @bp.route("/recordings/storage", methods=["GET"]) def get_recordings_storage_usage(): recording_stats = stats_snapshot( - current_app.frigate_config, current_app.stats_tracking, [] + current_app.frigate_config, + current_app.stats_tracking, + current_app.hwaccel_errors, )["service"]["storage"][RECORD_DIR] total_mb = recording_stats["total"] diff --git a/frigate/stats.py b/frigate/stats.py index e2da10bb8..97eba0bb9 100644 --- a/frigate/stats.py +++ b/frigate/stats.py @@ -123,7 +123,7 @@ async def set_gpu_stats( if isinstance(args, list): args = " ".join(args) - if args and args not in hwaccel_args and args not in hwaccel_errors: + if args and args not in hwaccel_args: hwaccel_args.append(args) for stream_input in camera.ffmpeg.inputs: @@ -138,7 +138,10 @@ async def set_gpu_stats( stats: dict[str, dict] = {} for args in hwaccel_args: - if "cuvid" in args or "nvidia" in args: + if args in hwaccel_errors: + # known erroring args should automatically return as error + stats["error-gpu"] = {"gpu": -1, "mem": -1} + elif "cuvid" in args or "nvidia" in args: # nvidia GPU nvidia_usage = get_nvidia_gpu_stats()