[libcamera-devel] [PATCH 4/9] libcamera: camera_sensor: Verify flips support

David Plowman david.plowman at raspberrypi.com
Thu Nov 24 14:43:34 CET 2022


Hi Jacopo

Thanks for the patch.

On Thu, 24 Nov 2022 at 12:12, Jacopo Mondi <jacopo at jmondi.org> wrote:
>
> During the camera sensor driver validation, verify if the sensor
> supports horizontal and vertical flips and store a flag as
> CameraSensor::supportFlips_ class member.
>
> The flag will be later inspected when applying flips.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>

I'm certainly fine with this, though I should perhaps add that when we
originally did this in the Pi PH we discussed a little bit whether a
camera might support H flips but not V, or vice versa. We slightly
passed over the question because it was "only the Pi", but maybe we
want to re-examine that?

There's also the question as to whether the flips modify the Bayer
order. Don't know if that's a thing we want to store here? (And
separately for H and V flips?)

But as I said previously, this all works for me, so:

Reviewed-by: David Plowman <david.plowman at raspberrypi.com>

Thanks!
David

> ---
>  include/libcamera/internal/camera_sensor.h |  1 +
>  src/libcamera/camera_sensor.cpp            | 15 ++++++++++++++-
>  2 files changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index b9f4d7867854..878f3c28a3c9 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -101,6 +101,7 @@ private:
>         Size pixelArraySize_;
>         Rectangle activeArea_;
>         const BayerFormat *bayerFormat_;
> +       bool supportFlips_;
>
>         ControlList properties_;
>
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index cbac9e7801ae..3afcbc482095 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -57,7 +57,8 @@ LOG_DEFINE_CATEGORY(CameraSensor)
>   */
>  CameraSensor::CameraSensor(const MediaEntity *entity)
>         : entity_(entity), pad_(UINT_MAX), staticProps_(nullptr),
> -         bayerFormat_(nullptr), properties_(properties::properties)
> +         bayerFormat_(nullptr), supportFlips_(false),
> +         properties_(properties::properties)
>  {
>  }
>
> @@ -271,6 +272,18 @@ int CameraSensor::validateSensorDriver()
>                 }
>         }
>
> +       /* Verify if sensor supports horizontal/vertical flips. */
> +       const struct v4l2_query_ext_ctrl *hflipInfo = subdev_->controlInfo(V4L2_CID_HFLIP);
> +       const struct v4l2_query_ext_ctrl *vflipInfo = subdev_->controlInfo(V4L2_CID_VFLIP);
> +       if (hflipInfo && vflipInfo &&
> +           !(hflipInfo->flags & V4L2_CTRL_FLAG_READ_ONLY) &&
> +           !(vflipInfo->flags & V4L2_CTRL_FLAG_READ_ONLY))
> +               supportFlips_ = true;
> +
> +       if (!supportFlips_)
> +               LOG(CameraSensor, Warning)
> +                       << "Camera sensor does not support horizontal/vertical flip";
> +
>         /*
>          * Make sure the required selection targets are supported.
>          *
> --
> 2.38.1
>


More information about the libcamera-devel mailing list