From 82e9b345bbca3fdfdc164ea5ab6ecdd0b14261e7 Mon Sep 17 00:00:00 2001 From: Nick Mowen Date: Sun, 13 Nov 2022 13:28:12 -0700 Subject: [PATCH] Add vainfo endpoint --- frigate/http.py | 18 +++++++++++++++++- frigate/util.py | 36 +++++++++++++++++++++--------------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/frigate/http.py b/frigate/http.py index db9bc10e3..699cb4cbc 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -31,7 +31,7 @@ from frigate.const import CLIPS_DIR from frigate.models import Event, Recordings from frigate.object_processing import TrackedObject from frigate.stats import stats_snapshot -from frigate.util import clean_camera_user_pass, ffprobe_stream +from frigate.util import clean_camera_user_pass, ffprobe_stream, vainfo from frigate.version import VERSION logger = logging.getLogger(__name__) @@ -1035,3 +1035,19 @@ def ffprobe(): ) return jsonify(output) + + +@bp.route("/vainfo", methods=["GET"]) +def vainfo(): + vainfo_output = vainfo() + return jsonify( + { + "return_code": vainfo_output.returncode, + "stderr": json.loads(vainfo_output.stderr.decode("unicode_escape").strip()) + if vainfo_output.stderr.decode() + else {}, + "stdout": json.loads(vainfo_output.stdout.decode("unicode_escape").strip()) + if vainfo_output.stdout.decode() + else {}, + } + ) diff --git a/frigate/util.py b/frigate/util.py index d3369bc53..dc983d578 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -766,21 +766,6 @@ def get_cpu_stats() -> dict[str, dict]: return usages -def ffprobe_stream(path: str) -> sp.CompletedProcess: - """Run ffprobe on stream.""" - ffprobe_cmd = [ - "ffprobe", - "-print_format", - "json", - "-show_entries", - "stream=codec_long_name,width,height,bit_rate,duration,display_aspect_ratio,avg_frame_rate", - "-loglevel", - "quiet", - path, - ] - return sp.run(ffprobe_cmd, capture_output=True) - - def get_amd_gpu_stats() -> dict[str, str]: """Get stats using radeontop.""" radeontop_command = ["radeontop", "-d", "-", "-l", "1"] @@ -880,6 +865,27 @@ def get_nvidia_gpu_stats() -> dict[str, str]: return results +def ffprobe_stream(path: str) -> sp.CompletedProcess: + """Run ffprobe on stream.""" + ffprobe_cmd = [ + "ffprobe", + "-print_format", + "json", + "-show_entries", + "stream=codec_long_name,width,height,bit_rate,duration,display_aspect_ratio,avg_frame_rate", + "-loglevel", + "quiet", + path, + ] + return sp.run(ffprobe_cmd, capture_output=True) + + +def vainfo() -> sp.CompletedProcess: + """Run vainfo.""" + ffprobe_cmd = ["vainfo"] + return sp.run(ffprobe_cmd, capture_output=True) + + class FrameManager(ABC): @abstractmethod def create(self, name, size) -> AnyStr: