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