mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-01-22 20:18:30 +03:00
refactor vainfo to search for first GPU (#21296)
use existing LibvaGpuSelector to pick appropritate libva device
This commit is contained in:
parent
5cced22f65
commit
a08c044144
@ -32,6 +32,7 @@ from frigate.config.camera.updater import (
|
|||||||
CameraConfigUpdateEnum,
|
CameraConfigUpdateEnum,
|
||||||
CameraConfigUpdateTopic,
|
CameraConfigUpdateTopic,
|
||||||
)
|
)
|
||||||
|
from frigate.ffmpeg_presets import FFMPEG_HWACCEL_VAAPI, _gpu_selector
|
||||||
from frigate.models import Event, Timeline
|
from frigate.models import Event, Timeline
|
||||||
from frigate.stats.prometheus import get_metrics, update_metrics
|
from frigate.stats.prometheus import get_metrics, update_metrics
|
||||||
from frigate.util.builtin import (
|
from frigate.util.builtin import (
|
||||||
@ -458,7 +459,15 @@ def config_set(request: Request, body: AppConfigSetBody):
|
|||||||
|
|
||||||
@router.get("/vainfo", dependencies=[Depends(allow_any_authenticated())])
|
@router.get("/vainfo", dependencies=[Depends(allow_any_authenticated())])
|
||||||
def vainfo():
|
def vainfo():
|
||||||
vainfo = vainfo_hwaccel()
|
# Use LibvaGpuSelector to pick an appropriate libva device (if available)
|
||||||
|
selected_gpu = ""
|
||||||
|
try:
|
||||||
|
selected_gpu = _gpu_selector.get_gpu_arg(FFMPEG_HWACCEL_VAAPI, 0) or ""
|
||||||
|
except Exception:
|
||||||
|
selected_gpu = ""
|
||||||
|
|
||||||
|
# If selected_gpu is empty, pass None to vainfo_hwaccel to run plain `vainfo`.
|
||||||
|
vainfo = vainfo_hwaccel(device_name=selected_gpu or None)
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
content={
|
content={
|
||||||
"return_code": vainfo.returncode,
|
"return_code": vainfo.returncode,
|
||||||
|
|||||||
@ -584,12 +584,17 @@ def ffprobe_stream(ffmpeg, path: str, detailed: bool = False) -> sp.CompletedPro
|
|||||||
|
|
||||||
def vainfo_hwaccel(device_name: Optional[str] = None) -> sp.CompletedProcess:
|
def vainfo_hwaccel(device_name: Optional[str] = None) -> sp.CompletedProcess:
|
||||||
"""Run vainfo."""
|
"""Run vainfo."""
|
||||||
ffprobe_cmd = (
|
if not device_name:
|
||||||
["vainfo"]
|
cmd = ["vainfo"]
|
||||||
if not device_name
|
else:
|
||||||
else ["vainfo", "--display", "drm", "--device", f"/dev/dri/{device_name}"]
|
if os.path.isabs(device_name) and device_name.startswith("/dev/dri/"):
|
||||||
)
|
device_path = device_name
|
||||||
return sp.run(ffprobe_cmd, capture_output=True)
|
else:
|
||||||
|
device_path = f"/dev/dri/{device_name}"
|
||||||
|
|
||||||
|
cmd = ["vainfo", "--display", "drm", "--device", device_path]
|
||||||
|
|
||||||
|
return sp.run(cmd, capture_output=True)
|
||||||
|
|
||||||
|
|
||||||
def get_nvidia_driver_info() -> dict[str, Any]:
|
def get_nvidia_driver_info() -> dict[str, Any]:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user