| Message ID | 20261009082519.348785-1-info@humanlearning.ch |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index 359040e..72f974e 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -713,6 +713,18 @@ public: }; REGISTER_CAMERA_SENSOR_HELPER("ov01a10", CameraSensorHelperOv01a10) +class CameraSensorHelperOv02c10 : public CameraSensorHelper +{ +public: + CameraSensorHelperOv02c10() + { + /* From Linux kernel driver: 0x40 at 10bits. */ + blackLevel_ = 4096; + gain_ = AnalogueGainLinear{ 1, 0, 0, 16 }; + } +}; +REGISTER_CAMERA_SENSOR_HELPER("ov02c10", CameraSensorHelperOv02c10) + class CameraSensorHelperOv08d10 : public CameraSensorHelper { public:
Without an entry for ov02c10, the software ISP used by the simple pipeline handler has no gain model or black level for this sensor and logs: IPASoft: Failed to create camera sensor helper for ov02c10 AGC then still runs, but on raw analogue-gain register values instead of a linear gain, which makes it converge poorly. The kernel driver (drivers/media/i2c/ov02c10.c) advertises analogue-gain register values in the range 0x10..0xf8 with a default of 0x10, and writes them to the 16-bit register at 0x3508 as (val << 4). That register is graded in 1/256 steps, so both the control range and the register encoding agree on 1/16 steps: the default of 0x10 is unity gain and the maximum of 0xf8 is 15.5x. The sensor outputs 10-bit Bayer data (MEDIA_BUS_FMT_SGRBG10_1X10). The driver programs a black level target of 0x40 in the BLC registers 0x4002/0x4003, which scales to 4096 at the 16-bit width expected by blackLevel(), as for the other OmniVision sensors in this file. A dark-frame measurement matches it: the mean pedestal is 64.2 LSB, and changing the target to 0x80 while streaming moves it to 128.2 LSB on all four colour channels from the next frame. Tested on the front camera of a Microsoft Surface Pro 12 (Qualcomm X1P42100) driven by the qcom CAMSS pipeline. Before the change the IPA reported "Exposure 4-2320, gain 16-248 (1)"; after it reports "Exposure 4-2320, gain 1-15.5 (0.145)". Signed-off-by: François Roux <info@humanlearning.ch> --- Changes in v2: - Take the black level from the BLC target the driver programs (0x4002/0x4003), as suggested by Barnabás, and keep the dark-frame measurement only as confirmation (target 0x40 -> 0x80 moves the pedestal by exactly 64 LSB). - AGC does run without the helper, just poorly: reword the commit message accordingly. - Rebased on master: the helper now sits between ov01a10 and ov08d10. The same values were posted earlier by Martin Neiva de Carvalho as patch 1/5 of "softisp: Five fixes found on a camera with no hardware ISP". src/ipa/libipa/camera_sensor_helper.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) base-commit: 8103c3f29fba61dbd1d3bbf1a099280c5f3217e3