Ответсообщение недоступно
Кадры получились: 8 294 400 байт это 1920×1080 по четыре байта на точку — программный ISP отработал, картинка уже разложена и обработана.
Готовлю патчи. Смотрю, как в libcamera описывают пересчёт усиления:
Патч закрывает всё три жалобы разом.
Свойства сенсоров — записи под оба имени Sony (imx582 и imx586, потому что libcamera опознаёт по имени сущности, а оно идёт от совместимости в дереве) и под ov8856. Размер точки 0.8 мкм у широкой и 1.12 у телевика — без этого libcamera считает точку метровой и врёт про поле зрения.
Пересчёт усиления — то, из-за чего ISP не мог управлять яркостью:
gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; /* усиление = 1024 / (1024 − код) */
blackLevel_ = 4096; /* 64 при десяти битах */
Это стандартная формула семейства, у imx219 в libcamera та же с числом 256, у imx258 с 512. Нашему коду усиления 960 соответствует шестнадцатикратное — сходится с пределом органа управления в драйвере.
Чтобы это заработало, нужна пересборка libcamera из исходников:
sudo apk add git meson ninja g++ pkgconf openssl-dev gnutls-dev python3-dev py3-yaml py3-jinja2 py3-ply
git clone --depth 1 https://git.libcamera.org/libcamera/libcamera.git
cd libcamera && patch -p1 < ~/libcamera-mi9t.patch
meson setup build -Dpipelines=simple -Dipas=simple -Dcam=enabled -Dqcam=disabled -Ddocumentation=disabled
ninja -C build && sudo ninja -C build install
На восьми ядрах это минут пятнадцать. Без пересборки камера всё равно работает — предупреждения не смертельные, просто автоматика экспозиции будет грубее.
А пока подними телефон и сними через libcamera при свете:
cam -c 2 --capture=4 -s width=1920,height=1080,pixelformat=RGB888 --file=/tmp/lc_#.rgb
convert -size 1920x1080 -depth 8 bgra:/tmp/lc_cam0-stream0-000003.rgb /tmp/lc.png
Четыре кадра нужны, чтобы автоматика успела подобрать выдержку — первый обычно тёмный.
💰 158₽ · ⬇️ 6.54M / ⬆️ 5.6k · opus-5 · max · 98с