diff --git a/frigate/config.py b/frigate/config.py index a2f7f3e63..991c0cf18 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -25,6 +25,7 @@ from frigate.util import ( load_config_with_no_duplicates, load_labels, ) +from frigate.ffmpeg_presets import parse_preset_hardware_acceleration logger = logging.getLogger(__name__) @@ -689,7 +690,7 @@ class CameraConfig(FrigateBaseModel): return None global_args = ffmpeg_input.global_args or self.ffmpeg.global_args - hwaccel_args = ffmpeg_input.hwaccel_args or self.ffmpeg.hwaccel_args + hwaccel_args = ffmpeg_input.hwaccel_args or parse_preset_hardware_acceleration(self.ffmpeg.hwaccel_args) or self.ffmpeg.hwaccel_args input_args = ffmpeg_input.input_args or self.ffmpeg.input_args global_args = ( diff --git a/frigate/ffmpeg_presets.py b/frigate/ffmpeg_presets.py index 5c031c43a..eb5c46528 100644 --- a/frigate/ffmpeg_presets.py +++ b/frigate/ffmpeg_presets.py @@ -1,12 +1,22 @@ """Handles inserting and maintaining ffmpeg presets.""" +from typing import Any + + PRESETS_HW_ACCEL = { - "preset-rpi-32": "-c:v h264_v4l2m2m", - "preset-rpi-64": "-c:v h264_v4l2m2m", + "preset-rpi-32-h264": "-c:v h264_v4l2m2m", + "preset-rpi-64-h264": "-c:v h264_v4l2m2m", "preset-intel-vaapi": "-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p", "preset-intel-qsv-h264": "-c:v h264_qsv", "preset-intel-qsv-h265": "-c:v hevc_qsv", "preset-amd-vaapi": "-hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format yuv420p", "preset-nvidia-h264": "-c:v h264_cuvid", "preset-nvidia-h265": "-c:v hevc_cuvid", -} \ No newline at end of file +} + +def parse_preset_hardware_acceleration(arg: Any) -> str: + """Return the correct preset if in preset format otherwise return raw input.""" + if not isinstance(arg, str): + return None + + return PRESETS_HW_ACCEL.get(arg, None) \ No newline at end of file