| Message ID | 20251023144841.403689-28-stefan.klug@ideasonboard.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
On Thu, Oct 23, 2025 at 04:48:28PM +0200, Stefan Klug wrote: > To properly handle the orientation in the dewarper, the mounting > orientation of the sensor needs to be queryable. Add that. Rotation property not sufficient ? Or is it set late in the pipeline to not be able to access that property? > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > > --- > > Changes in v2: > - Collected tag > - Add documentation > --- > include/libcamera/internal/camera_sensor.h | 1 + > src/libcamera/sensor/camera_sensor.cpp | 7 +++++++ > src/libcamera/sensor/camera_sensor_legacy.cpp | 1 + > src/libcamera/sensor/camera_sensor_raw.cpp | 1 + > 4 files changed, 10 insertions(+) > > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h > index f6ef4df170d4..e6b72d22ac21 100644 > --- a/include/libcamera/internal/camera_sensor.h > +++ b/include/libcamera/internal/camera_sensor.h > @@ -73,6 +73,7 @@ public: > virtual int sensorInfo(IPACameraSensorInfo *info) const = 0; > virtual Transform computeTransform(Orientation *orientation) const = 0; > virtual BayerFormat::Order bayerOrder(Transform t) const = 0; > + virtual Orientation mountingOrientation() const = 0; > > virtual const ControlInfoMap &controls() const = 0; > virtual ControlList getControls(Span<const uint32_t> ids) = 0; > diff --git a/src/libcamera/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp > index 4f2fd2690eb5..05390d1e1b60 100644 > --- a/src/libcamera/sensor/camera_sensor.cpp > +++ b/src/libcamera/sensor/camera_sensor.cpp > @@ -331,6 +331,13 @@ int CameraSensor::setEmbeddedDataEnabled(bool enable) > * \return The Bayer order produced by the sensor when the Transform is applied > */ > > +/** > + * \fn CameraSensor::mountingOrientation() > + * \brief Fetch the mounting orientation of the sensor > + * > + * \return The mounting orientation of the sensor > + */ > + > /** > * \fn CameraSensor::controls() > * \brief Retrieve the supported V4L2 controls and their information > diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp > index f9e685a9acc4..39c34200b0ff 100644 > --- a/src/libcamera/sensor/camera_sensor_legacy.cpp > +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp > @@ -88,6 +88,7 @@ public: > int sensorInfo(IPACameraSensorInfo *info) const override; > Transform computeTransform(Orientation *orientation) const override; > BayerFormat::Order bayerOrder(Transform t) const override; > + Orientation mountingOrientation() const override { return mountingOrientation_; } > > const ControlInfoMap &controls() const override; > ControlList getControls(Span<const uint32_t> ids) override; > diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp > index 8ea4423698cd..759cccafe4a9 100644 > --- a/src/libcamera/sensor/camera_sensor_raw.cpp > +++ b/src/libcamera/sensor/camera_sensor_raw.cpp > @@ -94,6 +94,7 @@ public: > int sensorInfo(IPACameraSensorInfo *info) const override; > Transform computeTransform(Orientation *orientation) const override; > BayerFormat::Order bayerOrder(Transform t) const override; > + Orientation mountingOrientation() const override { return mountingOrientation_; } > > const ControlInfoMap &controls() const override; > ControlList getControls(Span<const uint32_t> ids) override; > -- > 2.48.1 >
Quoting Stefan Klug (2025-10-23 23:48:28) > To properly handle the orientation in the dewarper, the mounting > orientation of the sensor needs to be queryable. Add that. > > Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Looks good to me. Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > > --- > > Changes in v2: > - Collected tag > - Add documentation > --- > include/libcamera/internal/camera_sensor.h | 1 + > src/libcamera/sensor/camera_sensor.cpp | 7 +++++++ > src/libcamera/sensor/camera_sensor_legacy.cpp | 1 + > src/libcamera/sensor/camera_sensor_raw.cpp | 1 + > 4 files changed, 10 insertions(+) > > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h > index f6ef4df170d4..e6b72d22ac21 100644 > --- a/include/libcamera/internal/camera_sensor.h > +++ b/include/libcamera/internal/camera_sensor.h > @@ -73,6 +73,7 @@ public: > virtual int sensorInfo(IPACameraSensorInfo *info) const = 0; > virtual Transform computeTransform(Orientation *orientation) const = 0; > virtual BayerFormat::Order bayerOrder(Transform t) const = 0; > + virtual Orientation mountingOrientation() const = 0; > > virtual const ControlInfoMap &controls() const = 0; > virtual ControlList getControls(Span<const uint32_t> ids) = 0; > diff --git a/src/libcamera/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp > index 4f2fd2690eb5..05390d1e1b60 100644 > --- a/src/libcamera/sensor/camera_sensor.cpp > +++ b/src/libcamera/sensor/camera_sensor.cpp > @@ -331,6 +331,13 @@ int CameraSensor::setEmbeddedDataEnabled(bool enable) > * \return The Bayer order produced by the sensor when the Transform is applied > */ > > +/** > + * \fn CameraSensor::mountingOrientation() > + * \brief Fetch the mounting orientation of the sensor > + * > + * \return The mounting orientation of the sensor > + */ > + > /** > * \fn CameraSensor::controls() > * \brief Retrieve the supported V4L2 controls and their information > diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp > index f9e685a9acc4..39c34200b0ff 100644 > --- a/src/libcamera/sensor/camera_sensor_legacy.cpp > +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp > @@ -88,6 +88,7 @@ public: > int sensorInfo(IPACameraSensorInfo *info) const override; > Transform computeTransform(Orientation *orientation) const override; > BayerFormat::Order bayerOrder(Transform t) const override; > + Orientation mountingOrientation() const override { return mountingOrientation_; } > > const ControlInfoMap &controls() const override; > ControlList getControls(Span<const uint32_t> ids) override; > diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp > index 8ea4423698cd..759cccafe4a9 100644 > --- a/src/libcamera/sensor/camera_sensor_raw.cpp > +++ b/src/libcamera/sensor/camera_sensor_raw.cpp > @@ -94,6 +94,7 @@ public: > int sensorInfo(IPACameraSensorInfo *info) const override; > Transform computeTransform(Orientation *orientation) const override; > BayerFormat::Order bayerOrder(Transform t) const override; > + Orientation mountingOrientation() const override { return mountingOrientation_; } > > const ControlInfoMap &controls() const override; > ControlList getControls(Span<const uint32_t> ids) override; > -- > 2.48.1 >
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index f6ef4df170d4..e6b72d22ac21 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -73,6 +73,7 @@ public: virtual int sensorInfo(IPACameraSensorInfo *info) const = 0; virtual Transform computeTransform(Orientation *orientation) const = 0; virtual BayerFormat::Order bayerOrder(Transform t) const = 0; + virtual Orientation mountingOrientation() const = 0; virtual const ControlInfoMap &controls() const = 0; virtual ControlList getControls(Span<const uint32_t> ids) = 0; diff --git a/src/libcamera/sensor/camera_sensor.cpp b/src/libcamera/sensor/camera_sensor.cpp index 4f2fd2690eb5..05390d1e1b60 100644 --- a/src/libcamera/sensor/camera_sensor.cpp +++ b/src/libcamera/sensor/camera_sensor.cpp @@ -331,6 +331,13 @@ int CameraSensor::setEmbeddedDataEnabled(bool enable) * \return The Bayer order produced by the sensor when the Transform is applied */ +/** + * \fn CameraSensor::mountingOrientation() + * \brief Fetch the mounting orientation of the sensor + * + * \return The mounting orientation of the sensor + */ + /** * \fn CameraSensor::controls() * \brief Retrieve the supported V4L2 controls and their information diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp index f9e685a9acc4..39c34200b0ff 100644 --- a/src/libcamera/sensor/camera_sensor_legacy.cpp +++ b/src/libcamera/sensor/camera_sensor_legacy.cpp @@ -88,6 +88,7 @@ public: int sensorInfo(IPACameraSensorInfo *info) const override; Transform computeTransform(Orientation *orientation) const override; BayerFormat::Order bayerOrder(Transform t) const override; + Orientation mountingOrientation() const override { return mountingOrientation_; } const ControlInfoMap &controls() const override; ControlList getControls(Span<const uint32_t> ids) override; diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp index 8ea4423698cd..759cccafe4a9 100644 --- a/src/libcamera/sensor/camera_sensor_raw.cpp +++ b/src/libcamera/sensor/camera_sensor_raw.cpp @@ -94,6 +94,7 @@ public: int sensorInfo(IPACameraSensorInfo *info) const override; Transform computeTransform(Orientation *orientation) const override; BayerFormat::Order bayerOrder(Transform t) const override; + Orientation mountingOrientation() const override { return mountingOrientation_; } const ControlInfoMap &controls() const override; ControlList getControls(Span<const uint32_t> ids) override;