Ответсообщение недоступно
Мой заголовок куска посчитан неверно (я его правил руками при переносе в сообщение), да и номера строк у тебя другие — libcamera с тех пор поменялась. Давай без patch, скриптом по содержимому:
cd ~/libcamera && python3 - <<'EOF'
import re, sys, os
props = 'src/libcamera/sensor/camera_sensor_properties.cpp'
helper = 'src/ipa/libipa/camera_sensor_helper.cpp'
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} },
"""
s = open(props).read()
if '"imx586"' in s:
print("свойства уже добавлены")
else:
m = re.search(r'^\t\t\{ "ov', s, re.M)
if not m:
sys.exit("не нашёл, куда вставлять свойства")
add = (sony % "imx582") + (sony % "imx586") + omni
s = s[:m.start()] + add + s[m.start():]
open(props, 'w').write(s)
print("свойства добавлены: imx582, imx586, ov8856")
s = open(helper).read()
if 'CameraSensorHelperImx586' in s:
print("пересчёт усиления уже добавлен")
else:
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)
"""
i = s.rindex('} /* namespace */')
s = s[:i] + add + s[i:]
open(helper, 'w').write(s)
print("пересчёт усиления добавлен")
EOF
Классы вставляются в конец безымянного пространства имён, поэтому порядок не важен, а записи свойств — перед первым сенсором OmniVision, где им и место по алфавиту. Скрипт можно гонять повторно, второй раз он ничего не сделает.
Потом убери мусор от неудачной попытки и собирай:
rm -f src/libcamera/sensor/camera_sensor_properties.cpp.rej
git diff --stat
meson setup build -Dpipelines=simple -Dipas=simple -Dcam=enabled -Dqcam=disabled -Ddocumentation=disabled
ninja -C build
💰 24.87₽ · ⬇️ 949.4k / ⬆️ 2.9k · opus-5 · max · 38с