[v2] libcamera: Add initial OV02E10 sensor support
diff mbox series

Message ID 20260426193743.107637-1-marbe@gmx.de
State New
Headers show
Series
  • [v2] libcamera: Add initial OV02E10 sensor support
Related show

Commit Message

Marcel Berger April 26, 2026, 7:37 p.m. UTC
Signed-off-by: Marcel Berger <marbe@gmx.de>
---
Changes in v2:
- Update the OV02E10 analogue gain model.
- Treat gain code 0x10 as 1.0x, resulting in a 1.0x to 15.5x range.
- Keep the simple IPA YAML intentionally minimal; image tuning is left for follow-up work.

 src/ipa/libipa/camera_sensor_helper.cpp       | 18 ++++++++++++++++++
 src/ipa/simple/data/ov02e10.yaml              | 19 +++++++++++++++++++
 .../sensor/camera_sensor_properties.cpp       | 12 ++++++++++++
 3 files changed, 49 insertions(+)
 create mode 100644 src/ipa/simple/data/ov02e10.yaml

Comments

Kieran Bingham April 30, 2026, 11:02 a.m. UTC | #1
Quoting Marcel Berger (2026-04-26 20:37:43)
> Signed-off-by: Marcel Berger <marbe@gmx.de>
> ---
> Changes in v2:

I'm struggling to find v1 ... was it something posted to the list? 

https://patchwork.libcamera.org/project/libcamera/list/?submitter=268&archive=both&state=*
shows that only this v2 patch is available from you, and I'm struggling
to find a match with the OV02E10 keyword.

https://patchwork.libcamera.org/project/libcamera/list/?state=%2A&q=OV02E10&series=&submitter=&delegate=&archive=both

also only finds this patch.

> - Update the OV02E10 analogue gain model.
> - Treat gain code 0x10 as 1.0x, resulting in a 1.0x to 15.5x range.
> - Keep the simple IPA YAML intentionally minimal; image tuning is left for follow-up work.

I'm afraid - I think it would be better to keep the tuning file out of
this or separate.

> 
>  src/ipa/libipa/camera_sensor_helper.cpp       | 18 ++++++++++++++++++
>  src/ipa/simple/data/ov02e10.yaml              | 19 +++++++++++++++++++
>  .../sensor/camera_sensor_properties.cpp       | 12 ++++++++++++
>  3 files changed, 49 insertions(+)
>  create mode 100644 src/ipa/simple/data/ov02e10.yaml
> 
> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
> index e3e3e535..bee50ec8 100644
> --- a/src/ipa/libipa/camera_sensor_helper.cpp
> +++ b/src/ipa/libipa/camera_sensor_helper.cpp
> @@ -653,6 +653,24 @@ public:
>  };
>  REGISTER_CAMERA_SENSOR_HELPER("imx708", CameraSensorHelperImx708)
>  
> +class CameraSensorHelperOv02e10 : public CameraSensorHelper
> +{
> +public:
> +       CameraSensorHelperOv02e10()
> +       {
> +               /*
> +                * OV02E10 reports RAW10. The Intel IPU6 HAL configuration uses
> +                * SGRBG10 at 1928x1088 and exposure/gain lag of 2 frames.
> +                *
> +                * The analogue gain model is not yet datasheet-validated.
> +                * Use the common OmniVision 1/128 linear gain model as a
> +                * conservative first approximation.
> +                */
> +               gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
> +       }
> +};
> +REGISTER_CAMERA_SENSOR_HELPER("ov02e10", CameraSensorHelperOv02e10)
> +
>  class CameraSensorHelperOv2685 : public CameraSensorHelper
>  {
>  public:
> diff --git a/src/ipa/simple/data/ov02e10.yaml b/src/ipa/simple/data/ov02e10.yaml
> new file mode 100644
> index 00000000..fc90ca52
> --- /dev/null
> +++ b/src/ipa/simple/data/ov02e10.yaml
> @@ -0,0 +1,19 @@
> +# SPDX-License-Identifier: CC0-1.0
> +%YAML 1.1
> +---
> +version: 1
> +algorithms:
> +  - BlackLevel:
> +  - Awb:
> +  # Color correction matrices can be defined here. The CCM algorithm
> +  # has a significant performance impact, and should only be enabled
> +  # if tuned.
> +  # - Ccm:
> +  #     ccms:
> +  #       - ct: 6500
> +  #         ccm: [ 1, 0, 0,
> +  #                0, 1, 0,
> +  #                0, 0, 1]
> +  - Adjust:
> +  - Agc:
> +...

We shouldn't duplicate the uncalibrated just to stop a warning which
doesn't add any value.

Lets leave this out - and fall back to uncalibrated until someone has a
correct tuning definition for the camera.

Regards
--
Kieran


> diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp
> index b217363d..30638836 100644
> --- a/src/libcamera/sensor/camera_sensor_properties.cpp
> +++ b/src/libcamera/sensor/camera_sensor_properties.cpp
> @@ -325,6 +325,18 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
>                                 .hblankDelay = 3
>                         },
>                 } },
> +               { "ov02e10", {
> +                       .unitCellSize = { 1120, 1120 },
> +                       .testPatternModes = {
> +                               { controls::draft::TestPatternModeOff, 0 },
> +                       },
> +                       .sensorDelays = {
> +                               .exposureDelay = 2,
> +                               .gainDelay = 2,
> +                               .vblankDelay = 2,
> +                               .hblankDelay = 2
> +                       },
> +               } },
>                 { "ov2685", {
>                         .unitCellSize = { 1750, 1750 },
>                         .testPatternModes = {
> -- 
> 2.53.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index e3e3e535..bee50ec8 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -653,6 +653,24 @@  public:
 };
 REGISTER_CAMERA_SENSOR_HELPER("imx708", CameraSensorHelperImx708)
 
+class CameraSensorHelperOv02e10 : public CameraSensorHelper
+{
+public:
+	CameraSensorHelperOv02e10()
+	{
+		/*
+		 * OV02E10 reports RAW10. The Intel IPU6 HAL configuration uses
+		 * SGRBG10 at 1928x1088 and exposure/gain lag of 2 frames.
+		 *
+		 * The analogue gain model is not yet datasheet-validated.
+		 * Use the common OmniVision 1/128 linear gain model as a
+		 * conservative first approximation.
+		 */
+		gain_ = AnalogueGainLinear{ 1, 0, 0, 16 };
+	}
+};
+REGISTER_CAMERA_SENSOR_HELPER("ov02e10", CameraSensorHelperOv02e10)
+
 class CameraSensorHelperOv2685 : public CameraSensorHelper
 {
 public:
diff --git a/src/ipa/simple/data/ov02e10.yaml b/src/ipa/simple/data/ov02e10.yaml
new file mode 100644
index 00000000..fc90ca52
--- /dev/null
+++ b/src/ipa/simple/data/ov02e10.yaml
@@ -0,0 +1,19 @@ 
+# SPDX-License-Identifier: CC0-1.0
+%YAML 1.1
+---
+version: 1
+algorithms:
+  - BlackLevel:
+  - Awb:
+  # Color correction matrices can be defined here. The CCM algorithm
+  # has a significant performance impact, and should only be enabled
+  # if tuned.
+  # - Ccm:
+  #     ccms:
+  #       - ct: 6500
+  #         ccm: [ 1, 0, 0,
+  #                0, 1, 0,
+  #                0, 0, 1]
+  - Adjust:
+  - Agc:
+...
diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp
index b217363d..30638836 100644
--- a/src/libcamera/sensor/camera_sensor_properties.cpp
+++ b/src/libcamera/sensor/camera_sensor_properties.cpp
@@ -325,6 +325,18 @@  const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
 				.hblankDelay = 3
 			},
 		} },
+		{ "ov02e10", {
+			.unitCellSize = { 1120, 1120 },
+			.testPatternModes = {
+				{ controls::draft::TestPatternModeOff, 0 },
+			},
+			.sensorDelays = {
+				.exposureDelay = 2,
+				.gainDelay = 2,
+				.vblankDelay = 2,
+				.hblankDelay = 2
+			},
+		} },
 		{ "ov2685", {
 			.unitCellSize = { 1750, 1750 },
 			.testPatternModes = {