Improve hwaccel UI config (#22590)

* Add proper labels for hwaccel presets

* Filter presets based on hardware
This commit is contained in:
Nicolas Mowen 2026-03-23 08:37:40 -06:00 committed by GitHub
parent 2c9a25e678
commit 5d67ba76fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 14 deletions

View File

@ -5,6 +5,7 @@ import copy
import json import json
import logging import logging
import os import os
import platform
import traceback import traceback
import urllib import urllib
from datetime import datetime, timedelta from datetime import datetime, timedelta
@ -246,19 +247,26 @@ def get_active_profile(request: Request):
@router.get("/ffmpeg/presets", dependencies=[Depends(allow_any_authenticated())]) @router.get("/ffmpeg/presets", dependencies=[Depends(allow_any_authenticated())])
def ffmpeg_presets(): def ffmpeg_presets():
"""Return available ffmpeg preset keys for config UI usage.""" """Return available ffmpeg preset keys for config UI usage."""
machine = platform.machine().lower()
is_arm64 = machine in ("aarch64", "arm64", "armv8", "armv7l")
if is_arm64:
hwaccel_presets = [
"preset-rpi-64-h264",
"preset-rpi-64-h265",
"preset-jetson-h264",
"preset-jetson-h265",
"preset-rkmpp",
"preset-vaapi",
]
else:
hwaccel_presets = [
"preset-vaapi",
"preset-intel-qsv-h264",
"preset-intel-qsv-h265",
"preset-nvidia",
]
# Whitelist based on documented presets in ffmpeg_presets.md
hwaccel_presets = [
"preset-rpi-64-h264",
"preset-rpi-64-h265",
"preset-vaapi",
"preset-intel-qsv-h264",
"preset-intel-qsv-h265",
"preset-nvidia",
"preset-jetson-h264",
"preset-jetson-h265",
"preset-rkmpp",
]
input_presets = [ input_presets = [
"preset-http-jpeg-generic", "preset-http-jpeg-generic",
"preset-http-mjpeg-generic", "preset-http-mjpeg-generic",

View File

@ -1330,7 +1330,18 @@
"none": "None", "none": "None",
"useGlobalSetting": "Inherit from global setting", "useGlobalSetting": "Inherit from global setting",
"selectPreset": "Select preset", "selectPreset": "Select preset",
"manualPlaceholder": "Enter FFmpeg arguments" "manualPlaceholder": "Enter FFmpeg arguments",
"presetLabels": {
"preset-rpi-64-h264": "Raspberry Pi (H.264)",
"preset-rpi-64-h265": "Raspberry Pi (H.265)",
"preset-vaapi": "VAAPI (Intel/AMD GPU)",
"preset-intel-qsv-h264": "Intel QuickSync (H.264)",
"preset-intel-qsv-h265": "Intel QuickSync (H.265)",
"preset-nvidia": "NVIDIA GPU",
"preset-jetson-h264": "NVIDIA Jetson (H.264)",
"preset-jetson-h265": "NVIDIA Jetson (H.265)",
"preset-rkmpp": "Rockchip RKMPP"
}
}, },
"cameraInputs": { "cameraInputs": {
"itemTitle": "Stream {{index}}" "itemTitle": "Stream {{index}}"

View File

@ -405,7 +405,10 @@ export function FfmpegArgsWidget(props: WidgetProps) {
<SelectContent> <SelectContent>
{presetOptions.map((preset) => ( {presetOptions.map((preset) => (
<SelectItem key={preset} value={preset}> <SelectItem key={preset} value={preset}>
{preset} {t(`configForm.ffmpegArgs.presetLabels.${preset}`, {
ns: "views/settings",
defaultValue: preset,
})}
</SelectItem> </SelectItem>
))} ))}
</SelectContent> </SelectContent>