@@ -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;
@@ -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_;
@@ -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;
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(-)