install: refresh gstreamer registry for nvidia
This commit is contained in:
parent
a3e0bb8d62
commit
5ec380a3cc
6
Cargo.lock
generated
6
Cargo.lock
generated
@ -1652,7 +1652,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
|
||||
|
||||
[[package]]
|
||||
name = "lesavka_client"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-stream",
|
||||
@ -1686,7 +1686,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lesavka_common"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64",
|
||||
@ -1698,7 +1698,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lesavka_server"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64",
|
||||
|
||||
@ -4,7 +4,7 @@ path = "src/main.rs"
|
||||
|
||||
[package]
|
||||
name = "lesavka_client"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "lesavka_common"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
edition = "2024"
|
||||
build = "build.rs"
|
||||
|
||||
|
||||
@ -124,7 +124,7 @@ require_linkable() {
|
||||
|
||||
require_gst_element() {
|
||||
local element=$1
|
||||
if gst-inspect-1.0 "$element" >/dev/null 2>&1; then
|
||||
if run_as_user gst-inspect-1.0 "$element" >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
echo "❌ required GStreamer element '$element' is unavailable after install." >&2
|
||||
@ -132,7 +132,7 @@ require_gst_element() {
|
||||
}
|
||||
|
||||
gst_element_available() {
|
||||
gst-inspect-1.0 "$1" >/dev/null 2>&1
|
||||
run_as_user gst-inspect-1.0 "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
first_available_gst_element() {
|
||||
@ -147,7 +147,7 @@ first_available_gst_element() {
|
||||
}
|
||||
|
||||
report_client_media_acceleration() {
|
||||
log "1e. Inspecting client media acceleration routes"
|
||||
log "1f. Inspecting client media acceleration routes"
|
||||
|
||||
local hevc_encoder=""
|
||||
local ffmpeg_hevc_encoder=""
|
||||
@ -161,6 +161,7 @@ report_client_media_acceleration() {
|
||||
|
||||
hevc_encoder=$(first_available_gst_element \
|
||||
nvh265enc \
|
||||
nvautogpuh265enc \
|
||||
vah265enc \
|
||||
vaapih265enc \
|
||||
v4l2h265enc || true)
|
||||
@ -170,13 +171,13 @@ report_client_media_acceleration() {
|
||||
fi
|
||||
h264_encoder=$(first_available_gst_element \
|
||||
nvh264enc \
|
||||
vulkanh264enc \
|
||||
nvautogpuh264enc \
|
||||
vah264enc \
|
||||
vaapih264enc \
|
||||
v4l2h264enc || true)
|
||||
h264_decoder=$(first_available_gst_element \
|
||||
nvh264dec \
|
||||
nvh264sldec \
|
||||
vulkanh264dec \
|
||||
vah264dec \
|
||||
vaapih264dec \
|
||||
v4l2h264dec \
|
||||
@ -185,7 +186,7 @@ report_client_media_acceleration() {
|
||||
opus_decoder=$(first_available_gst_element opusdec || true)
|
||||
webrtc_dsp=$(first_available_gst_element webrtcdsp || true)
|
||||
|
||||
for element in nvh265enc nvh264dec nvh264sldec; do
|
||||
for element in nvh265enc nvautogpuh265enc nvh265dec nvh264enc nvautogpuh264enc nvh264dec nvh264sldec; do
|
||||
if gst_element_available "$element"; then
|
||||
proprietary_bits+=("$element")
|
||||
fi
|
||||
@ -286,6 +287,18 @@ run_as_user() {
|
||||
sudo -u "$ORIG_USER" env HOME="$USER_HOME" SSH_AUTH_SOCK="${SSH_AUTH_SOCK:-}" "$@"
|
||||
}
|
||||
|
||||
refresh_gstreamer_registry_cache() {
|
||||
log "1e. Refreshing GStreamer plugin registry"
|
||||
run_as_user mkdir -p "$USER_HOME/.cache/gstreamer-1.0"
|
||||
run_as_user rm -f "$USER_HOME/.cache/gstreamer-1.0"/registry.* 2>/dev/null || true
|
||||
sudo rm -f /root/.cache/gstreamer-1.0/registry.* 2>/dev/null || true
|
||||
|
||||
# Touch the GPU codec plugins after cache removal so stale pre-driver caches
|
||||
# cannot hide NVIDIA/VAAPI decoder factories from the live desktop app.
|
||||
run_as_user gst-inspect-1.0 nvcodec >/dev/null 2>&1 || true
|
||||
run_as_user gst-inspect-1.0 va >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
install_verified_executable() {
|
||||
local src=$1
|
||||
local dest=$2
|
||||
@ -486,6 +499,7 @@ if [[ -e /usr/lib/libclang.so ]]; then
|
||||
require_linkable /usr/lib/libclang.so "libclang"
|
||||
fi
|
||||
require_kernel_module snd_usb_audio "USB microphones and USB headsets"
|
||||
refresh_gstreamer_registry_cache
|
||||
require_gst_element pulsesrc
|
||||
require_gst_element pulsesink
|
||||
require_gst_element pipewiresrc
|
||||
|
||||
@ -177,12 +177,16 @@ require_prereqs() {
|
||||
|
||||
select_gst_h264_decoder() {
|
||||
local decoder
|
||||
for decoder in nvh264sldec nvh264dec vulkanh264dec vaapih264dec vaapi264dec v4l2h264dec; do
|
||||
for decoder in nvh264dec nvh264sldec vah264dec vaapih264dec vaapi264dec v4l2h264dec v4l2slh264dec; do
|
||||
if gst_has "${decoder}"; then
|
||||
printf '%s\n' "${decoder}"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
if [[ ${LESAVKA_ALLOW_VULKAN_H264_DECODER:-0} == 1 ]] && gst_has vulkanh264dec; then
|
||||
printf '%s\n' vulkanh264dec
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -191,7 +195,7 @@ gst_h264_decode_chain() {
|
||||
vulkanh264dec)
|
||||
printf '%s\n' 'vulkanh264dec discard-corrupted-frames=true automatic-request-sync-points=true ! vulkandownload'
|
||||
;;
|
||||
nvh264sldec|nvh264dec|vaapih264dec|vaapi264dec|v4l2h264dec)
|
||||
nvh264sldec|nvh264dec|vah264dec|vaapih264dec|vaapi264dec|v4l2h264dec|v4l2slh264dec)
|
||||
printf '%s\n' "$1"
|
||||
;;
|
||||
*)
|
||||
|
||||
@ -10,7 +10,7 @@ bench = false
|
||||
|
||||
[package]
|
||||
name = "lesavka_server"
|
||||
version = "0.22.8"
|
||||
version = "0.22.9"
|
||||
edition = "2024"
|
||||
autobins = false
|
||||
|
||||
|
||||
@ -83,6 +83,11 @@ fn client_install_prefers_invoked_checkout_for_development_installs() {
|
||||
fn client_install_reports_nvidia_and_open_source_media_routes() {
|
||||
for expected in [
|
||||
"report_client_media_acceleration",
|
||||
"refresh_gstreamer_registry_cache",
|
||||
"Refreshing GStreamer plugin registry",
|
||||
"run_as_user rm -f \"$USER_HOME/.cache/gstreamer-1.0\"/registry.*",
|
||||
"gst-inspect-1.0 nvcodec",
|
||||
"gst-inspect-1.0 va",
|
||||
"gst_element_available",
|
||||
"first_available_gst_element",
|
||||
"nvidia-smi is available",
|
||||
@ -91,9 +96,13 @@ fn client_install_reports_nvidia_and_open_source_media_routes() {
|
||||
"proprietary NVIDIA GStreamer route",
|
||||
"Vulkan/VAAPI/V4L2 GStreamer route",
|
||||
"nvh265enc",
|
||||
"nvautogpuh265enc",
|
||||
"nvh265dec",
|
||||
"nvh264enc",
|
||||
"nvautogpuh264enc",
|
||||
"nvh264dec",
|
||||
"nvh264sldec",
|
||||
"vah264enc",
|
||||
"vulkanh264enc",
|
||||
"vulkanh264dec",
|
||||
"vulkanh265dec",
|
||||
|
||||
@ -37,8 +37,11 @@ fn hardware_media_smoke_uses_accelerated_video_paths() {
|
||||
"h264_nvenc",
|
||||
"hevc_cuvid",
|
||||
"h264_cuvid",
|
||||
"vah264dec",
|
||||
"vulkanh264dec",
|
||||
"v4l2slh264dec",
|
||||
"v4l2slh265dec",
|
||||
"LESAVKA_ALLOW_VULKAN_H264_DECODER",
|
||||
"no sudo, no systemctl, no UVC gadget reset",
|
||||
] {
|
||||
assert!(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user