[1/2] libcamera: libipa: camera_sensor: Add Sony IMX678 properties
diff mbox series

Message ID 20260618-imx678-v1-1-646e09a63692@ideasonboard.com
State Superseded, archived
Headers show
Series
  • libcamera: sensor: Add support for Sony IMX678
Related show

Commit Message

Jai Luthra June 18, 2026, 11:48 a.m. UTC
Add Sony IMX678 properties, along with the black level and gain model
through a libipa camera sensor helper.

The test patterns are intentionally left empty, as they are similar to
IMX335/IMX283 and don't map very well to libcamera's enum values.

Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>
---
 src/ipa/libipa/camera_sensor_helper.cpp           | 12 ++++++++++++
 src/libcamera/sensor/camera_sensor_properties.cpp | 10 ++++++++++
 2 files changed, 22 insertions(+)

Comments

Laurent Pinchart June 18, 2026, 11:57 a.m. UTC | #1
Hi Jai,

Thank you for the patch.

On Thu, Jun 18, 2026 at 05:18:39PM +0530, Jai Luthra wrote:
> Add Sony IMX678 properties, along with the black level and gain model
> through a libipa camera sensor helper.
> 
> The test patterns are intentionally left empty, as they are similar to
> IMX335/IMX283 and don't map very well to libcamera's enum values.

We will probably need to introduce more test patterns in the future.

> Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  src/ipa/libipa/camera_sensor_helper.cpp           | 12 ++++++++++++
>  src/libcamera/sensor/camera_sensor_properties.cpp | 10 ++++++++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
> index 3028197e1..9ab7a52f2 100644
> --- a/src/ipa/libipa/camera_sensor_helper.cpp
> +++ b/src/ipa/libipa/camera_sensor_helper.cpp
> @@ -642,6 +642,18 @@ public:
>  };
>  REGISTER_CAMERA_SENSOR_HELPER("imx477", CameraSensorHelperImx477)
>  
> +class CameraSensorHelperImx678 : public CameraSensorHelper
> +{
> +public:
> +	CameraSensorHelperImx678()
> +	{
> +		/* From datasheet: 0x32 at 10bits. */
> +		blackLevel_ = 3200;
> +		gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
> +	}
> +};
> +REGISTER_CAMERA_SENSOR_HELPER("imx678", CameraSensorHelperImx678)
> +
>  class CameraSensorHelperImx708 : public CameraSensorHelper
>  {
>  public:
> diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp
> index b217363d8..28043150e 100644
> --- a/src/libcamera/sensor/camera_sensor_properties.cpp
> +++ b/src/libcamera/sensor/camera_sensor_properties.cpp
> @@ -309,6 +309,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
>  				.hblankDelay = 3
>  			},
>  		} },
> +		{ "imx678", {
> +			.unitCellSize = { 2000, 2000 },
> +			.testPatternModes = {},
> +			.sensorDelays = {
> +				.exposureDelay = 2,
> +				.gainDelay = 2,
> +				.vblankDelay = 2,
> +				.hblankDelay = 2
> +			},
> +		} },
>  		{ "imx708", {
>  			.unitCellSize = { 1400, 1400 },
>  			.testPatternModes = {
Kieran Bingham June 18, 2026, 1:51 p.m. UTC | #2
Quoting Jai Luthra (2026-06-18 12:48:39)
> Add Sony IMX678 properties, along with the black level and gain model
> through a libipa camera sensor helper.
> 
> The test patterns are intentionally left empty, as they are similar to
> IMX335/IMX283 and don't map very well to libcamera's enum values.
> 
> Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/ipa/libipa/camera_sensor_helper.cpp           | 12 ++++++++++++
>  src/libcamera/sensor/camera_sensor_properties.cpp | 10 ++++++++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
> index 3028197e1..9ab7a52f2 100644
> --- a/src/ipa/libipa/camera_sensor_helper.cpp
> +++ b/src/ipa/libipa/camera_sensor_helper.cpp
> @@ -642,6 +642,18 @@ public:
>  };
>  REGISTER_CAMERA_SENSOR_HELPER("imx477", CameraSensorHelperImx477)
>  
> +class CameraSensorHelperImx678 : public CameraSensorHelper
> +{
> +public:
> +       CameraSensorHelperImx678()
> +       {
> +               /* From datasheet: 0x32 at 10bits. */
> +               blackLevel_ = 3200;
> +               gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
> +       }
> +};
> +REGISTER_CAMERA_SENSOR_HELPER("imx678", CameraSensorHelperImx678)
> +
>  class CameraSensorHelperImx708 : public CameraSensorHelper
>  {
>  public:
> diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp
> index b217363d8..28043150e 100644
> --- a/src/libcamera/sensor/camera_sensor_properties.cpp
> +++ b/src/libcamera/sensor/camera_sensor_properties.cpp
> @@ -309,6 +309,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
>                                 .hblankDelay = 3
>                         },
>                 } },
> +               { "imx678", {
> +                       .unitCellSize = { 2000, 2000 },
> +                       .testPatternModes = {},
> +                       .sensorDelays = {
> +                               .exposureDelay = 2,
> +                               .gainDelay = 2,
> +                               .vblankDelay = 2,
> +                               .hblankDelay = 2
> +                       },
> +               } },
>                 { "imx708", {
>                         .unitCellSize = { 1400, 1400 },
>                         .testPatternModes = {
> 
> -- 
> 2.54.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp
index 3028197e1..9ab7a52f2 100644
--- a/src/ipa/libipa/camera_sensor_helper.cpp
+++ b/src/ipa/libipa/camera_sensor_helper.cpp
@@ -642,6 +642,18 @@  public:
 };
 REGISTER_CAMERA_SENSOR_HELPER("imx477", CameraSensorHelperImx477)
 
+class CameraSensorHelperImx678 : public CameraSensorHelper
+{
+public:
+	CameraSensorHelperImx678()
+	{
+		/* From datasheet: 0x32 at 10bits. */
+		blackLevel_ = 3200;
+		gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) };
+	}
+};
+REGISTER_CAMERA_SENSOR_HELPER("imx678", CameraSensorHelperImx678)
+
 class CameraSensorHelperImx708 : public CameraSensorHelper
 {
 public:
diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp
index b217363d8..28043150e 100644
--- a/src/libcamera/sensor/camera_sensor_properties.cpp
+++ b/src/libcamera/sensor/camera_sensor_properties.cpp
@@ -309,6 +309,16 @@  const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
 				.hblankDelay = 3
 			},
 		} },
+		{ "imx678", {
+			.unitCellSize = { 2000, 2000 },
+			.testPatternModes = {},
+			.sensorDelays = {
+				.exposureDelay = 2,
+				.gainDelay = 2,
+				.vblankDelay = 2,
+				.hblankDelay = 2
+			},
+		} },
 		{ "imx708", {
 			.unitCellSize = { 1400, 1400 },
 			.testPatternModes = {