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