Ответсообщение недоступно
Две помарки в моём скрипте. Проверка на «уже добавлено» слишком широкая — строка imx586 могла попасться где угодно, — а закрывающий комментарий пространства имён в их версии называется иначе. Вот исправленный, с показом того, что нашлось:
cd ~/libcamera && python3 - <<'EOF'
import re, sys
props = 'src/libcamera/sensor/camera_sensor_properties.cpp'
helper = 'src/ipa/libipa/camera_sensor_helper.cpp'
s = open(props).read()
print("что уже есть в свойствах:", re.findall(r'\{ "(imx58\d|ov885\d)", \{', s) or "ничего из наших")
sony = """\t\t{ "%s", {
\t\t\t.unitCellSize = { 800, 800 },
\t\t\t.testPatternModes = {
\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },
\t\t\t\t{ controls::draft::TestPatternModeSolidColor, 1 },
\t\t\t\t{ controls::draft::TestPatternModeColorBars, 2 },
\t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
\t\t\t\t{ controls::draft::TestPatternModePn9, 4 },
\t\t\t},
\t\t\t.sensorDelays = {
\t\t\t\t.exposureDelay = 2,
\t\t\t\t.gainDelay = 2,
\t\t\t\t.vblankDelay = 3,
\t\t\t\t.hblankDelay = 3
\t\t\t},
\t\t} },
"""
omni = """\t\t{ "ov8856", {
\t\t\t.unitCellSize = { 1120, 1120 },
\t\t\t.testPatternModes = {
\t\t\t\t{ controls::draft::TestPatternModeOff, 0 },
\t\t\t\t{ controls::draft::TestPatternModeColorBars, 1 },
\t\t\t\t{ controls::draft::TestPatternModeColorBarsFadeToGray, 2 },
\t\t\t},
\t\t\t.sensorDelays = { },
\t\t} },
"""
add = "".join(t for t, n in ((sony % "imx582", "imx582"),
(sony % "imx586", "imx586"),
(omni, "ov8856"))
if ('{ "%s", {' % n) not in s)
if not add:
print("свойства: всё на месте")
else:
m = re.search(r'^\t\t\{ "ov', s, re.M)
s = s[:m.start()] + add + s[m.start():]
open(props, 'w').write(s)
print("свойства дописаны")
s = open(helper).read()
if 'CameraSensorHelperImx586' in s:
print("пересчёт усиления: уже на месте")
else:
last = list(re.finditer(r'^REGISTER_CAMERA_SENSOR_HELPER\([^\n]*\)\n', s, re.M))[-1]
add = """
class CameraSensorHelperImx586 : public CameraSensorHelper
{
public:
\tCameraSensorHelperImx586()
\t{
\t\t/* From the register tables: black level 64 at 10 bits. */
\t\tblackLevel_ = 4096;
\t\tgain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 };
\t}
};
REGISTER_CAMERA_SENSOR_HELPER("imx582", CameraSensorHelperImx586)
REGISTER_CAMERA_SENSOR_HELPER("imx586", CameraSensorHelperImx586)
class CameraSensorHelperOv8856 : public CameraSensorHelper
{
public:
\tCameraSensorHelperOv8856()
\t{
\t\t/* Same 1/128 step as its sibling. */
\t\tgain_ = AnalogueGainLinear{ 1, 0, 0, 128 };
\t}
};
REGISTER_CAMERA_SENSOR_HELPER("ov8856", CameraSensorHelperOv8856)
"""
s = s[:last.end()] + add + s[last.end():]
open(helper, 'w').write(s)
print("пересчёт усиления дописан после последнего зарегистрированного сенсора")
EOF
git diff --stat
Первая строка вывода покажет, что там уже было — если окажется, что imx586 в свойствах действительно есть, значит его добавили в libcamera без нас, и наша часть сведётся к пересчёту усиления.
💰 25.09₽ · ⬇️ 952.4k / ⬆️ 2.1k · opus-5 · max · 27с