Files
view-mate/TASK.md
T
Hermes Agent b4420f446c fix(app-glasses): би-нокулярный рендер RayNeo — letterbox + scale=false (полный кадр в каждый глаз)
Живой тест на RayNeo X2: каждый глаз = 640x480 (пол-экрана 1280x480), видео 896x480 (16:9) растягивалось на весь глаз → «квадратное» (сплющено по горизонтали).
- letterboxRect(videoW,videoH,viewW,viewH): FIT-вьюпорт с полями (страховка для произвольных поверхностей)
- Binocular(scale=true→false): два полных кадра 640x343 в двух половинах экрана (вместо scaleX 0.5 половинки кадра)
- onVideoSizeChanged → videoWidth/Height для letterbox
- Тесты 32/0 (LetterboxRectTest 5)
- Пользователь: «на глаз размер поменялся, будто бы норм»
2026-08-19 21:03:55 +03:00

33 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Фикс би-нокулярного рендера RayNeo: scale=true → scale=false
Живой тест на RayNeo X2: экран 1280×480, каждый глаз видит СВОЮ половину
(640×480). `Binocular(scale = true)` (GlassesMovieScreen.kt:63) рисует
контент на весь экран и сжимает scaleX 0.5 → каждый SurfaceView (буфер
~850×455, полный кадр) визуально 425px в половине глаза 640px → **каждый
глаз видит ПОЛОВИНУ кадра**, растянутую на 640px (масштаб ×1.5) → видео
выглядит «сплющенным по горизонтали» (жалоба пользователя).
SurfaceFlinger подтверждает: слои #0/#1 с scaleX=0.5006, translate 215/640.
## Изменение (app-glasses, GlassesMovieScreen.kt)
`Binocular(scale = true)` → `Binocular(scale = false)`.
Что это даёт (scale=false — ветка Row + two Columns weight 1f):
- BinocularScreenSize = (ширина/2, высота) = (640, 480);
- calculateVideoSizeFull(896×480, maxWidth=640, maxHeight=455) →
SurfaceView 640×343 (16:9 вписан в пол-экрана, поля 68+69 сверху/снизу
— чёрный фон Row);
- ДВА SurfaceView 640×343: левый в левой половине, правый в правой —
каждый глаз видит ПОЛНЫЙ кадр с полями. Пропорции правильные.
letterboxRect в drawFrame оставить (страховка: SurfaceView 640×343 =
ровно 16:9 — letterboxRect вернёт полный viewport, ничего не сломает).
## Проверка
- Тесты/сборка зелёные (`./gradlew :app-glasses:testDebugUnitTest
:app-glasses:assembleDebug`).
- Железо (после установки): скрин очков — ДВА одинаковых кадра 640×343
(поля сверху/снизу), в каждом глазу полный кадр; пользователь видит
правильные пропорции (не «квадратное»).