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

2.1 KiB
Raw Blame History

Фикс би-нокулярного рендера 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 (поля сверху/снизу), в каждом глазу полный кадр; пользователь видит правильные пропорции (не «квадратное»).