1# llimphi-video-plane
2
3*Read this in English: [README.md](README.md).*
4
5Spike de "atachá video en llimphi": video como `wl_subsurface` real sobre
6la `wl_surface` de winit, para que mirada lo componga (Fase 1) y a futuro lo
7escanee en un plano de overlay, **sin pasar por la textura intermedia de
8vello**.
9
10Muro que valida (Fase 0, ya OK): winit no expone subsurfaces, así que se
11monta una **segunda** conexión `wayland-client` sobre el MISMO `wl_display`
12ajeno (`Backend::from_foreign_display`), se envuelve la `wl_surface` de winit
13por `ObjectId::from_ptr`, y se le crea una `wl_subsurface` hija. `set_desync`
14→ el hijo commitea solo; posición/orden se latchean en el commit del padre
15(que hace winit al presentar; el subsurface trackea al padre al mover).
16
17Dos modos:
18 - **sin argumentos** → cuadro de color sólido (valida el subsurface).
19 - **`subsurface-spike <archivo>`** → frames reales de ese video (Fase 1a),
20 decodificados por `foreign-av`, subidos al subsurface por shm (3 buffers
21 round-robin, RGBA→ARGB8888). La UI winit sólo limpia el fondo.
22
23Teclas: B = subsurface debajo/encima del padre · T = fondo UI
24transparente/opaco (el "hueco" donde asoma el plano) · ESC = salir.
25
26## Uso
27
28```sh
29cargo run --release -p llimphi-video-plane --bin subsurface-spike
30```
31
32---
33
34Parte de **llimphi** — ver [llimphi](../LEEME.md).
LEEME.md
llimphi-video-plane
Read this in English: README.md.
Spike de "atachá video en llimphi": video como wl_subsurface real sobre
la wl_surface de winit, para que mirada lo componga (Fase 1) y a futuro lo
escanee en un plano de overlay, sin pasar por la textura intermedia de
vello.
Muro que valida (Fase 0, ya OK): winit no expone subsurfaces, así que se
monta una segunda conexión wayland-client sobre el MISMO wl_display
ajeno (Backend::from_foreign_display), se envuelve la wl_surface de winit
por ObjectId::from_ptr, y se le crea una wl_subsurface hija. set_desync
→ el hijo commitea solo; posición/orden se latchean en el commit del padre
(que hace winit al presentar; el subsurface trackea al padre al mover).
Dos modos:
- sin argumentos → cuadro de color sólido (valida el subsurface).
subsurface-spike <archivo> → frames reales de ese video (Fase 1a),
decodificados por foreign-av, subidos al subsurface por shm (3 buffers
round-robin, RGBA→ARGB8888). La UI winit sólo limpia el fondo.
Teclas: B = subsurface debajo/encima del padre · T = fondo UI
transparente/opaco (el "hueco" donde asoma el plano) · ESC = salir.
Uso
cargo run --release -p llimphi-video-plane --bin subsurface-spike
Parte de llimphi — ver llimphi.