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]]
|
[[package]]
|
||||||
name = "lesavka_client"
|
name = "lesavka_client"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-stream",
|
"async-stream",
|
||||||
@ -1686,7 +1686,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lesavka_common"
|
name = "lesavka_common"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"base64",
|
"base64",
|
||||||
@ -1698,7 +1698,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lesavka_server"
|
name = "lesavka_server"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"base64",
|
"base64",
|
||||||
|
|||||||
@ -4,7 +4,7 @@ path = "src/main.rs"
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "lesavka_client"
|
name = "lesavka_client"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "lesavka_common"
|
name = "lesavka_common"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
|
|
||||||
|
|||||||
@ -124,7 +124,7 @@ require_linkable() {
|
|||||||
|
|
||||||
require_gst_element() {
|
require_gst_element() {
|
||||||
local element=$1
|
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
|
return 0
|
||||||
fi
|
fi
|
||||||
echo "❌ required GStreamer element '$element' is unavailable after install." >&2
|
echo "❌ required GStreamer element '$element' is unavailable after install." >&2
|
||||||
@ -132,7 +132,7 @@ require_gst_element() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gst_element_available() {
|
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() {
|
first_available_gst_element() {
|
||||||
@ -147,7 +147,7 @@ first_available_gst_element() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
report_client_media_acceleration() {
|
report_client_media_acceleration() {
|
||||||
log "1e. Inspecting client media acceleration routes"
|
log "1f. Inspecting client media acceleration routes"
|
||||||
|
|
||||||
local hevc_encoder=""
|
local hevc_encoder=""
|
||||||
local ffmpeg_hevc_encoder=""
|
local ffmpeg_hevc_encoder=""
|
||||||
@ -161,6 +161,7 @@ report_client_media_acceleration() {
|
|||||||
|
|
||||||
hevc_encoder=$(first_available_gst_element \
|
hevc_encoder=$(first_available_gst_element \
|
||||||
nvh265enc \
|
nvh265enc \
|
||||||
|
nvautogpuh265enc \
|
||||||
vah265enc \
|
vah265enc \
|
||||||
vaapih265enc \
|
vaapih265enc \
|
||||||
v4l2h265enc || true)
|
v4l2h265enc || true)
|
||||||
@ -170,13 +171,13 @@ report_client_media_acceleration() {
|
|||||||
fi
|
fi
|
||||||
h264_encoder=$(first_available_gst_element \
|
h264_encoder=$(first_available_gst_element \
|
||||||
nvh264enc \
|
nvh264enc \
|
||||||
vulkanh264enc \
|
nvautogpuh264enc \
|
||||||
|
vah264enc \
|
||||||
vaapih264enc \
|
vaapih264enc \
|
||||||
v4l2h264enc || true)
|
v4l2h264enc || true)
|
||||||
h264_decoder=$(first_available_gst_element \
|
h264_decoder=$(first_available_gst_element \
|
||||||
nvh264dec \
|
nvh264dec \
|
||||||
nvh264sldec \
|
nvh264sldec \
|
||||||
vulkanh264dec \
|
|
||||||
vah264dec \
|
vah264dec \
|
||||||
vaapih264dec \
|
vaapih264dec \
|
||||||
v4l2h264dec \
|
v4l2h264dec \
|
||||||
@ -185,7 +186,7 @@ report_client_media_acceleration() {
|
|||||||
opus_decoder=$(first_available_gst_element opusdec || true)
|
opus_decoder=$(first_available_gst_element opusdec || true)
|
||||||
webrtc_dsp=$(first_available_gst_element webrtcdsp || 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
|
if gst_element_available "$element"; then
|
||||||
proprietary_bits+=("$element")
|
proprietary_bits+=("$element")
|
||||||
fi
|
fi
|
||||||
@ -286,6 +287,18 @@ run_as_user() {
|
|||||||
sudo -u "$ORIG_USER" env HOME="$USER_HOME" SSH_AUTH_SOCK="${SSH_AUTH_SOCK:-}" "$@"
|
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() {
|
install_verified_executable() {
|
||||||
local src=$1
|
local src=$1
|
||||||
local dest=$2
|
local dest=$2
|
||||||
@ -486,6 +499,7 @@ if [[ -e /usr/lib/libclang.so ]]; then
|
|||||||
require_linkable /usr/lib/libclang.so "libclang"
|
require_linkable /usr/lib/libclang.so "libclang"
|
||||||
fi
|
fi
|
||||||
require_kernel_module snd_usb_audio "USB microphones and USB headsets"
|
require_kernel_module snd_usb_audio "USB microphones and USB headsets"
|
||||||
|
refresh_gstreamer_registry_cache
|
||||||
require_gst_element pulsesrc
|
require_gst_element pulsesrc
|
||||||
require_gst_element pulsesink
|
require_gst_element pulsesink
|
||||||
require_gst_element pipewiresrc
|
require_gst_element pipewiresrc
|
||||||
|
|||||||
@ -177,12 +177,16 @@ require_prereqs() {
|
|||||||
|
|
||||||
select_gst_h264_decoder() {
|
select_gst_h264_decoder() {
|
||||||
local 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
|
if gst_has "${decoder}"; then
|
||||||
printf '%s\n' "${decoder}"
|
printf '%s\n' "${decoder}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
if [[ ${LESAVKA_ALLOW_VULKAN_H264_DECODER:-0} == 1 ]] && gst_has vulkanh264dec; then
|
||||||
|
printf '%s\n' vulkanh264dec
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +195,7 @@ gst_h264_decode_chain() {
|
|||||||
vulkanh264dec)
|
vulkanh264dec)
|
||||||
printf '%s\n' 'vulkanh264dec discard-corrupted-frames=true automatic-request-sync-points=true ! vulkandownload'
|
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"
|
printf '%s\n' "$1"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
|||||||
@ -10,7 +10,7 @@ bench = false
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "lesavka_server"
|
name = "lesavka_server"
|
||||||
version = "0.22.8"
|
version = "0.22.9"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
autobins = false
|
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() {
|
fn client_install_reports_nvidia_and_open_source_media_routes() {
|
||||||
for expected in [
|
for expected in [
|
||||||
"report_client_media_acceleration",
|
"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",
|
"gst_element_available",
|
||||||
"first_available_gst_element",
|
"first_available_gst_element",
|
||||||
"nvidia-smi is available",
|
"nvidia-smi is available",
|
||||||
@ -91,9 +96,13 @@ fn client_install_reports_nvidia_and_open_source_media_routes() {
|
|||||||
"proprietary NVIDIA GStreamer route",
|
"proprietary NVIDIA GStreamer route",
|
||||||
"Vulkan/VAAPI/V4L2 GStreamer route",
|
"Vulkan/VAAPI/V4L2 GStreamer route",
|
||||||
"nvh265enc",
|
"nvh265enc",
|
||||||
|
"nvautogpuh265enc",
|
||||||
|
"nvh265dec",
|
||||||
"nvh264enc",
|
"nvh264enc",
|
||||||
|
"nvautogpuh264enc",
|
||||||
"nvh264dec",
|
"nvh264dec",
|
||||||
"nvh264sldec",
|
"nvh264sldec",
|
||||||
|
"vah264enc",
|
||||||
"vulkanh264enc",
|
"vulkanh264enc",
|
||||||
"vulkanh264dec",
|
"vulkanh264dec",
|
||||||
"vulkanh265dec",
|
"vulkanh265dec",
|
||||||
|
|||||||
@ -37,8 +37,11 @@ fn hardware_media_smoke_uses_accelerated_video_paths() {
|
|||||||
"h264_nvenc",
|
"h264_nvenc",
|
||||||
"hevc_cuvid",
|
"hevc_cuvid",
|
||||||
"h264_cuvid",
|
"h264_cuvid",
|
||||||
|
"vah264dec",
|
||||||
"vulkanh264dec",
|
"vulkanh264dec",
|
||||||
|
"v4l2slh264dec",
|
||||||
"v4l2slh265dec",
|
"v4l2slh265dec",
|
||||||
|
"LESAVKA_ALLOW_VULKAN_H264_DECODER",
|
||||||
"no sudo, no systemctl, no UVC gadget reset",
|
"no sudo, no systemctl, no UVC gadget reset",
|
||||||
] {
|
] {
|
||||||
assert!(
|
assert!(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user