[WIP,RFC,19/26] libcamera: camera_sensor: Add helpers for isRaw() and isMono()
diff mbox series

Message ID 20261023-b4-raw-model-v1-19-eadb9948901b@ideasonboard.com
State New
Headers show
Series
  • Support the new common raw sensor model
Related show

Commit Message

Jai Luthra Oct. 23, 2026, 10:58 a.m. UTC
Pipeline handlers often want to check if a sensor is monochrome, or
gives a processed RGB/YUV image instead of a RAW one, as it may require
special handling or skipping the ISP block altogether.

Add helpers for it in CameraSensor to make their life easier.

Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>
---
 include/libcamera/internal/camera_sensor.h    | 2 ++
 src/libcamera/sensor/camera_sensor_legacy.cpp | 8 +++++---
 src/libcamera/sensor/camera_sensor_raw.cpp    | 2 ++
 3 files changed, 9 insertions(+), 3 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index a0f27ac11735..948e0523ab64 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -74,6 +74,8 @@  public:
 	virtual Transform computeTransform(Orientation *orientation) const = 0;
 	virtual ColorFilterArray bayerOrder(Transform t) const = 0;
 	virtual Orientation mountingOrientation() const = 0;
+	virtual bool isMono() const = 0;
+	virtual bool isRaw() const = 0;
 
 	virtual const ControlInfoMap &controls() const = 0;
 	virtual ControlList getControls(std::span<const uint32_t> ids) = 0;
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 8f47b77dc7c4..d1bfcd020c64 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -91,6 +91,8 @@  public:
 	Transform computeTransform(Orientation *orientation) const override;
 	ColorFilterArray bayerOrder(Transform t) const override;
 	Orientation mountingOrientation() const override { return mountingOrientation_; }
+	bool isMono() const override { return cfa_ && cfa_ == ColorFilterArray::MONO; }
+	bool isRaw() const override { return cfa_.has_value(); }
 
 	const ControlInfoMap &controls() const override;
 	ControlList getControls(std::span<const uint32_t> ids) override;
@@ -882,7 +884,7 @@  V4L2Subdevice::Stream CameraSensorLegacy::imageStream() const
 
 int CameraSensorLegacy::sensorInfo(IPACameraSensorInfo *info) const
 {
-	if (!cfa_)
+	if (!isRaw())
 		return -EINVAL;
 
 	info->model = model();
@@ -986,8 +988,8 @@  Transform CameraSensorLegacy::computeTransform(Orientation *orientation) const
 ColorFilterArray CameraSensorLegacy::bayerOrder(Transform t) const
 {
 	/* Return a defined by meaningless value for non-Bayer sensors. */
-	if (!cfa_)
-		return ColorFilterArray::BGGR;
+	if (!isRaw())
+		return ColorFilterArray::MONO;
 
 	if (!flipsAlterBayerOrder_)
 		return *cfa_;
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index c703db31d658..e45f2225b779 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -104,6 +104,8 @@  public:
 	testPatternModes() const override { return testPatternModes_; }
 	int setTestPatternMode(controls::draft::TestPatternModeEnum mode) override;
 	const CameraSensorProperties::SensorDelays &sensorDelays() override;
+	bool isMono() const override { return cfa_ == ColorFilterArray::MONO; }
+	bool isRaw() const override { return true; }
 
 protected:
 	std::string logPrefix() const override;