[libcamera-devel] [PATCH 1/2] ipa: camera_sensor_helper: Add AR0521 support
Jacopo Mondi
jacopo at jmondi.org
Mon Nov 7 14:22:12 CET 2022
Add support for OnSemi AR0521 5Mpx image sensor to libipa.
The sensor implments a gain model realized via a piecewise exponential
gain function defined by a table available in the sensor's application
developer guide.
Add support for the sensor using a dedicated CameraSensorHelper
instance.
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
src/ipa/libipa/camera_sensor_helper.cpp | 45 +++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index 35056bec80c3..cb5cdf1d1e54 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -366,6 +366,51 @@ static constexpr double expGainDb(double step)
return log2_10 * step / 20;
}
+class CameraSensorHelperAr0521 : public CameraSensorHelper
+{
+public:
+ uint32_t gainCode(double gain) const override;
+ double gain(uint32_t gainCode) const override;
+
+private:
+ const unsigned int kStep_ = 16;
+};
+
+uint32_t CameraSensorHelperAr0521::gainCode(double gain) const
+{
+ unsigned int coarse = 0;
+
+ if (gain < 2.02) {
+ coarse = 0;
+ } else if (gain < 4.21) {
+ coarse = 1;
+ } else if (gain < 7.95) {
+ coarse = 2;
+ } else if (gain < 15.28) {
+ coarse = 3;
+ } else {
+ LOG(CameraSensorHelper, Error) << "Gain too high: " << gain;
+ gain = 15.28;
+ coarse = 3;
+ }
+
+ unsigned int exp = 1 << coarse;
+ unsigned int fine = kStep_ * (gain - exp) / exp;
+
+ return (coarse << 4) | (fine & 0xf);
+}
+
+double CameraSensorHelperAr0521::gain(uint32_t gainCode) const
+{
+ unsigned int coarse = gainCode >> 4;
+ unsigned int fine = gainCode & 0xf;
+ unsigned int exp = 1 << coarse;
+
+ return exp + (exp * fine / kStep_);
+}
+
+REGISTER_CAMERA_SENSOR_HELPER("ar0521", CameraSensorHelperAr0521)
+
class CameraSensorHelperImx219 : public CameraSensorHelper
{
public:
--
2.38.1
More information about the libcamera-devel
mailing list