vaapi: mpv cierra su último hueco — decodificación por hardware

libva sube al corpus y la copia de incoming-kde se JUBILA (git mv, no copia: dos
ficheros para un artefacto es el cuadro de las dos glib esperando a derivar). La
mudanza fue gratis y medida antes: las cinco deps de libva viven sólo en el
corpus, así que incoming-kde ya las resolvía por caída al padre y hammer hash dio
el MISMO ArtifactHash en las dos rutas (b3:405c6211).

libva pasa a -Dwith_wayland=yes, que eso SÍ cambia el hash. La razón está en
mpv/meson.build:1464: el feature `vaapi` se requiere contra
`vaapi-drm or vaapi-wayland or vaapi-x11 or vaapi-win32` ⇒ -Dvaapi=enabled a
secas no habilita NADA. De los cuatro backends, x11/win32 están fuera por
Wayland-only y vaapi-drm exige features[drm] de mpv, apagado porque vo=drm pide
libdisplay-info. Queda vaapi-wayland, que pide libva-wayland.pc.

Evidencia, no sólo sello: meson lista «vaapi vaapi-wayland» entre los features
habilitados, y el binario sellado trae NEEDED libva.so.2 + libva-wayland.so.2.

Radio medido antes de tocar: 2 dependientes (kpipewire, spectacle), los dos
reconstruidos. Las 7 imágenes siguen en 0 en deuda.

⚠ El driver es RUNTIME (intel-media-driver / gallium VA por dlopen): que esto
selle y que --hwdec=vaapi funcione en una máquina son cosas distintas.
This commit is contained in:
Sergio
2026-09-04 15:06:14 +00:00
parent 269e8410fd
commit 8d48f1869f
8 changed files with 122 additions and 52 deletions
+13 -8
View File
@@ -37,8 +37,8 @@
},
"escritorio-cosmic": {
"raices": 40,
"clausura": 134,
"sealed": 134
"clausura": 135,
"sealed": 135
},
"escritorio-mirada": {
"raices": 14,
@@ -9803,19 +9803,23 @@
"samurai",
"python3",
"pkgconf",
"libdrm"
"libdrm",
"wayland"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:405c6211caceafb93a2a6c72789b5312d65f931909f47669bfa67b5ca1996fe1",
"hash": "b3:949a1a172d33e5d532f4d77986d05634093b5168f7a60be793bea2c1d9f97b6f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 3
},
"libwebp": {
"iname": "libwebp",
@@ -11108,6 +11112,7 @@
"libass",
"libunibreak",
"lua5.2",
"libva",
"pipewire",
"alsa-lib",
"mesa",
@@ -11130,7 +11135,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:0bdd2a67dd8c2877c1a426f2c2913e90d95eae42348583b34b7fe9e574c55049",
"hash": "b3:82f127e4f52fe8476c683d549b36dfc2f0c5d27651370cf76911d2f66a291ffa",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -15983,7 +15988,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 152
"dependientes_total": 153
},
"wayland-protocols": {
"iname": "wayland-protocols",
+13 -8
View File
@@ -37,8 +37,8 @@
},
"escritorio-gnome": {
"raices": 20,
"clausura": 158,
"sealed": 158
"clausura": 159,
"sealed": 159
},
"escritorio-mirada": {
"raices": 14,
@@ -10465,19 +10465,23 @@
"samurai",
"python3",
"pkgconf",
"libdrm"
"libdrm",
"wayland"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:405c6211caceafb93a2a6c72789b5312d65f931909f47669bfa67b5ca1996fe1",
"hash": "b3:949a1a172d33e5d532f4d77986d05634093b5168f7a60be793bea2c1d9f97b6f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 3
},
"libwebp": {
"iname": "libwebp",
@@ -11770,6 +11774,7 @@
"libass",
"libunibreak",
"lua5.2",
"libva",
"pipewire",
"alsa-lib",
"mesa",
@@ -11792,7 +11797,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:0bdd2a67dd8c2877c1a426f2c2913e90d95eae42348583b34b7fe9e574c55049",
"hash": "b3:82f127e4f52fe8476c683d549b36dfc2f0c5d27651370cf76911d2f66a291ffa",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -16986,7 +16991,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 152
"dependientes_total": 153
},
"wayland-protocols": {
"iname": "wayland-protocols",
+13 -8
View File
@@ -10720,7 +10720,7 @@
"cls": "c",
"queue": "incoming-kde",
"foreign": false,
"hash": "b3:10e3e3e399ba84c1da8cb24b00a232d804ee4c72b672ddf53eb516bddf10250c",
"hash": "b3:39a3daf63887e7b566d749a848fb9fd107a08927e54ddd70d15404db1d1325c2",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -13961,19 +13961,23 @@
"samurai",
"python3",
"pkgconf",
"libdrm"
"libdrm",
"wayland"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:405c6211caceafb93a2a6c72789b5312d65f931909f47669bfa67b5ca1996fe1",
"hash": "b3:949a1a172d33e5d532f4d77986d05634093b5168f7a60be793bea2c1d9f97b6f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 3
},
"libvorbis": {
"iname": "libvorbis",
@@ -15478,6 +15482,7 @@
"libass",
"libunibreak",
"lua5.2",
"libva",
"pipewire",
"alsa-lib",
"mesa",
@@ -15500,7 +15505,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:0bdd2a67dd8c2877c1a426f2c2913e90d95eae42348583b34b7fe9e574c55049",
"hash": "b3:82f127e4f52fe8476c683d549b36dfc2f0c5d27651370cf76911d2f66a291ffa",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -20494,7 +20499,7 @@
"cls": "c",
"queue": "incoming-kde",
"foreign": false,
"hash": "b3:f304452630dc96cccb75e31d3d154bf2b9abbb849d3f2ccac7efcaf45cd69bd3",
"hash": "b3:f05399be8a1ac4d2396005cdde65f8ea2a35e4e96a7d8896298a9b1dadf84a30",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -22650,7 +22655,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 152
"dependientes_total": 153
},
"wayland-protocols": {
"iname": "wayland-protocols",
+12 -7
View File
@@ -42,8 +42,8 @@
},
"escritorio-sway": {
"raices": 71,
"clausura": 174,
"sealed": 174
"clausura": 175,
"sealed": 175
}
},
"sin_perfil": 645,
@@ -9301,19 +9301,23 @@
"samurai",
"python3",
"pkgconf",
"libdrm"
"libdrm",
"wayland"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:405c6211caceafb93a2a6c72789b5312d65f931909f47669bfa67b5ca1996fe1",
"hash": "b3:949a1a172d33e5d532f4d77986d05634093b5168f7a60be793bea2c1d9f97b6f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 3
},
"libwebp": {
"iname": "libwebp",
@@ -10564,6 +10568,7 @@
"libass",
"libunibreak",
"lua5.2",
"libva",
"pipewire",
"alsa-lib",
"mesa",
@@ -10586,7 +10591,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:0bdd2a67dd8c2877c1a426f2c2913e90d95eae42348583b34b7fe9e574c55049",
"hash": "b3:82f127e4f52fe8476c683d549b36dfc2f0c5d27651370cf76911d2f66a291ffa",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
+11 -6
View File
@@ -9178,19 +9178,23 @@
"samurai",
"python3",
"pkgconf",
"libdrm"
"libdrm",
"wayland"
],
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:405c6211caceafb93a2a6c72789b5312d65f931909f47669bfa67b5ca1996fe1",
"hash": "b3:949a1a172d33e5d532f4d77986d05634093b5168f7a60be793bea2c1d9f97b6f",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
"perfiles": [
"escritorio-kde"
"escritorio-cosmic",
"escritorio-gnome",
"escritorio-kde",
"escritorio-sway"
],
"dependientes_total": 2
"dependientes_total": 3
},
"libwebp": {
"iname": "libwebp",
@@ -10441,6 +10445,7 @@
"libass",
"libunibreak",
"lua5.2",
"libva",
"pipewire",
"alsa-lib",
"mesa",
@@ -10463,7 +10468,7 @@
"cls": "c",
"queue": "corpus",
"foreign": false,
"hash": "b3:0bdd2a67dd8c2877c1a426f2c2913e90d95eae42348583b34b7fe9e574c55049",
"hash": "b3:82f127e4f52fe8476c683d549b36dfc2f0c5d27651370cf76911d2f66a291ffa",
"state": "sealed",
"blocked_by": [],
"unblocks": 0,
@@ -15274,7 +15279,7 @@
"escritorio-mirada",
"escritorio-sway"
],
"dependientes_total": 152
"dependientes_total": 153
},
"wayland-protocols": {
"iname": "wayland-protocols",
+3 -3
View File
@@ -22,7 +22,7 @@
},
"escritorio-cosmic": {
"grafo": "docs/state/build-state-cosmic.json",
"nodos": 134,
"nodos": 135,
"en_deuda": 0,
"ondas": 0,
"profundidad": 0,
@@ -31,7 +31,7 @@
},
"escritorio-gnome": {
"grafo": "docs/state/build-state-gnome.json",
"nodos": 158,
"nodos": 159,
"en_deuda": 0,
"ondas": 0,
"profundidad": 0,
@@ -58,7 +58,7 @@
},
"escritorio-sway": {
"grafo": "docs/state/build-state-wlr.json",
"nodos": 174,
"nodos": 175,
"en_deuda": 0,
"ondas": 0,
"profundidad": 0,
+30 -7
View File
@@ -1,10 +1,33 @@
# libva 2.22.0 — Video Acceleration API (libva.so + libva-drm.so). Campaña KDE (ADR 0011): **kpipewire**
# los exige REQUIRED (`pkg_check_modules(LIBVA ... libva REQUIRED)` + libva-drm), para codificar por
# hardware los streams que graba KPipeWireRecord.
# libva 2.22.0 — Video Acceleration API (libva.so + libva-drm.so + libva-wayland.so). Entró por la
# campaña KDE (ADR 0011): **kpipewire** los exige REQUIRED (`pkg_check_modules(LIBVA ... libva
# REQUIRED)` + libva-drm) para codificar por hardware los streams que graba KPipeWireRecord.
#
# Es sólo la capa de despacho: los drivers reales (intel-media-driver / mesa gallium VA) son RUNTIME y
# se cargan por dlopen — no hacen falta para compilar. Sólo backend DRM: sin X11/Wayland/GLX (evita
# arrastrar más cadena; el driver DRM es el que usa kpipewire).
# se cargan por dlopen — no hacen falta para compilar.
#
# ══ SUBIÓ AL CORPUS, Y LA COPIA DE LA COLA SE JUBILÓ (2026-09-04) ══════════════════════════════
# Vivía en `incoming-kde/` y por eso mpv —que está en el corpus— no la alcanzaba: una receta resuelve
# SIBLING-FIRST y después el catálogo padre, nunca una cola hermana. Ése era el último hueco de mpv:
# sin decodificación por hardware.
#
# La mudanza fue GRATIS y se midió antes de hacerla, no después: las CINCO deps de esta receta
# (meson, samurai, python3, pkgconf, libdrm) viven sólo en el corpus, o sea que `incoming-kde` ya las
# resolvía por caída al padre ⇒ el cierre no cambia. `hammer hash` dio el MISMO ArtifactHash
# (b3:405c6211…) en las dos rutas. Se MUEVE, no se copia: dos ficheros para un artefacto es el cuadro
# de las dos glib esperando a que uno de los dos derive. Las recetas KDE la siguen alcanzando por
# caída al padre.
#
# ══ WAYLAND ENCENDIDO — NO ES OPCIONAL PARA mpv ════════════════════════════════════════════════
# Antes iba `-Dwith_wayland=no` («sólo backend DRM, el que usa kpipewire»). Para mpv eso NO alcanza, y
# la razón está en su `meson.build:1464`: el feature `vaapi` se REQUIERE contra
# `vaapi-drm or vaapi-wayland or vaapi-x11 or vaapi-win32` — o sea que **`-Dvaapi=enabled` a secas no
# habilita nada; hace falta un backend**. De los cuatro: x11 y win32 están fuera (la distro es
# Wayland-only), y `vaapi-drm` exige además `features['drm']` de mpv, que está apagado porque `vo=drm`
# pide `libdisplay-info`, que no tenemos. Queda `vaapi-wayland`, que pide `libva-wayland` ⇒ esta
# perilla. `wayland` entra a `[deps]` por el `libva-wayland.pc` que genera.
#
# Esto SÍ cambia el ArtifactHash (a diferencia de la mudanza) ⇒ radio medido: 2 dependientes,
# incoming-kde/kpipewire e incoming-kde/spectacle. Los dos reconstruyen.
name = "libva"
version = "2.22.0"
license = "MIT"
@@ -23,11 +46,11 @@ flags = []
configure = '''
PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release \
-Ddefault_library=shared \
-Dwith_x11=no -Dwith_glx=no -Dwith_wayland=no -Dwith_win32=no -Ddisable_drm=false \
-Dwith_x11=no -Dwith_glx=no -Dwith_wayland=yes -Dwith_win32=no -Ddisable_drm=false \
-Denable_docs=false
'''
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
[deps]
build = ["meson", "samurai", "python3", "pkgconf", "libdrm"]
build = ["meson", "samurai", "python3", "pkgconf", "libdrm", "wayland"]
+27 -5
View File
@@ -32,9 +32,8 @@
# la memoria del frente GNOME). No es "todavía no".
# vulkan, shaderc, spirv-cross nuestra libplacebo va `pl_has_vulkan=0`: el
# loader arrastra el stack X11 por los WSI.
# vaapi (+ -drm/-wayland) libva vive sólo en `incoming-kde/`. ⇒ HOY NO HAY
# DECODIFICACIÓN POR HARDWARE. Es el pendiente más
# caro de esta receta, junto con el de abajo.
# vaapi-drm exige `features['drm']` de mpv, apagado abajo.
# vaapi-x11 Wayland-only.
# drm, gbm, dmabuf-wayland `vo=drm` quiere `libdisplay-info`, que no está.
# El camino de salida es EGL/Wayland, que sí está.
# pipewire, pulse, jack, sndio, oss, openal ver el bloque de AUDIO.
@@ -47,6 +46,29 @@
# libmpv nadie la consume todavía. Se prende el día que
# entre un frontend (celluloid y compañía).
#
# ══ vaapi: DECODIFICACIÓN POR HARDWARE, Y POR QUÉ PIDE `libva-wayland` ═════════════════════════
# Era el último hueco de esta receta. `libva` vivía sólo en `incoming-kde/` y el corpus no alcanza una
# cola hermana; el 2026-09-04 subió al corpus (mudanza de hash IDÉNTICO, medida con `hammer hash`) y
# la copia de la cola se jubiló.
#
# `-Dvaapi=enabled` A SECAS NO HABILITA NADA, y esto es lo que hay que saber antes de tocarlo:
# `meson.build:1464` requiere el feature contra `vaapi-drm or vaapi-wayland or vaapi-x11 or
# vaapi-win32`. Sin backend, la perilla se evalúa a falso — y con `enabled` eso es un error de
# configure, no un apagado silencioso, que al menos falla ruidoso. De los cuatro backends: x11 y
# win32 fuera (Wayland-only), y `vaapi-drm` exige además `features['drm']`, apagado porque `vo=drm`
# pide `libdisplay-info`, que no está. Queda `vaapi-wayland`, que pide `libva-wayland.pc` ⇒ por eso
# libva se reconstruyó con `-Dwith_wayland=yes`.
#
# Lo que entra al binario con el feature prendido: `video/vaapi.c`, `hwdec_vaapi.c`, el filtro
# `vf_vavpp.c` y `dmabuf_interop_pl.c` — el interop es por libplacebo (el mismo que ya usa el vo), no
# por GL: `dmabuf-interop-gl` es un feature aparte.
#
# ⚠ EL DRIVER ES RUNTIME. libva es sólo la capa de despacho; quien decodifica es
# `intel-media-driver` o el gallium VA de mesa, cargados por `dlopen` según la GPU. Que esto selle y
# que `--hwdec=vaapi` funcione en una máquina son dos cosas distintas: en un equipo sin driver VA
# instalado, mpv cae a decodificación por software y no lo dice fuerte. Comprobar con
# `mpv --hwdec=vaapi -v` y buscar la línea del driver, nunca asumirlo por el sello.
# ══ AUDIO: PIPEWIRE NATIVO, CON ALSA DETRÁS ════════════════════════════════════════════════════
# El servidor de audio de la distro es PipeWire (decisión del usuario, 2026-07-29) y desde el
# 2026-09-03 `libpipewire-0.3` vive en el CORPUS, así que mpv le habla NATIVO: control por-stream,
@@ -115,7 +137,7 @@ link = "dynamic"
flags = []
[build.phases]
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Dprefer_static=true -Dbuild-date=false -Dcplayer=true -Dlibmpv=false -Dtests=false -Dmanpage-build=disabled -Dhtml-build=disabled -Dpdf-build=disabled -Dwayland=enabled -Degl=enabled -Degl-wayland=enabled -Dgl=enabled -Dplain-gl=disabled -Dalsa=enabled -Dzlib=enabled -Diconv=enabled -Dvector=enabled -Dx11=disabled -Dgl-x11=disabled -Degl-x11=disabled -Dxv=disabled -Dx11-clipboard=disabled -Dvdpau=disabled -Dvulkan=disabled -Dshaderc=disabled -Dspirv-cross=disabled -Dvaapi=disabled -Dvaapi-drm=disabled -Dvaapi-wayland=disabled -Dvaapi-x11=disabled -Ddrm=disabled -Dgbm=disabled -Ddmabuf-wayland=disabled -Dpipewire=enabled -Dpulse=disabled -Djack=disabled -Dsndio=disabled -Doss-audio=disabled -Dopenal=disabled -Dsdl2-audio=disabled -Dsdl2-video=disabled -Dsdl2-gamepad=disabled -Dlua=lua5.2 -Djavascript=disabled -Dcdda=disabled -Ddvdnav=disabled -Ddvbin=disabled -Dlibbluray=disabled -Dlibarchive=disabled -Dlibavdevice=disabled -Dlcms2=disabled -Duchardet=disabled -Drubberband=disabled -Dzimg=disabled -Dvapoursynth=disabled -Djpeg=disabled -Dcaca=disabled -Dsixel=disabled -Dcplugins=disabled -Dcuda-hwaccel=disabled -Dcuda-interop=disabled"
configure = "PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release -Dprefer_static=true -Dbuild-date=false -Dcplayer=true -Dlibmpv=false -Dtests=false -Dmanpage-build=disabled -Dhtml-build=disabled -Dpdf-build=disabled -Dwayland=enabled -Degl=enabled -Degl-wayland=enabled -Dgl=enabled -Dplain-gl=disabled -Dalsa=enabled -Dzlib=enabled -Diconv=enabled -Dvector=enabled -Dx11=disabled -Dgl-x11=disabled -Degl-x11=disabled -Dxv=disabled -Dx11-clipboard=disabled -Dvdpau=disabled -Dvulkan=disabled -Dshaderc=disabled -Dspirv-cross=disabled -Dvaapi=enabled -Dvaapi-wayland=enabled -Dvaapi-drm=disabled -Dvaapi-x11=disabled -Ddrm=disabled -Dgbm=disabled -Ddmabuf-wayland=disabled -Dpipewire=enabled -Dpulse=disabled -Djack=disabled -Dsndio=disabled -Doss-audio=disabled -Dopenal=disabled -Dsdl2-audio=disabled -Dsdl2-video=disabled -Dsdl2-gamepad=disabled -Dlua=lua5.2 -Djavascript=disabled -Dcdda=disabled -Ddvdnav=disabled -Ddvbin=disabled -Dlibbluray=disabled -Dlibarchive=disabled -Dlibavdevice=disabled -Dlcms2=disabled -Duchardet=disabled -Drubberband=disabled -Dzimg=disabled -Dvapoursynth=disabled -Djpeg=disabled -Dcaca=disabled -Dsixel=disabled -Dcplugins=disabled -Dcuda-hwaccel=disabled -Dcuda-interop=disabled"
compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
@@ -125,7 +147,7 @@ install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson ins
[deps]
build = [
"meson", "samurai", "python3", "pkgconf", "linux-headers",
"ffmpeg", "libplacebo", "libass", "libunibreak", "lua5.2",
"ffmpeg", "libplacebo", "libass", "libunibreak", "lua5.2", "libva",
"pipewire", "alsa-lib",
"mesa", "libdrm", "wayland", "wayland-protocols", "libxkbcommon",
"freetype", "fribidi", "harfbuzz", "fontconfig",