[libcamera-devel] [PATCH v2 08/12] libcamera: pipeline: raspberrypi: Set sensor flip based on rotation

David Plowman david.plowman at raspberrypi.com
Mon Jul 6 11:29:21 CEST 2020


Hi Jacopo, Laurent, everyone!

I have a couple of questions.

1. Does this allow an application to set a transformation when the
camera is started? For example, it's not uncommon for a horizontal
flip to be requested from the camera depending on the application.
Certainly in the Raspberry Pi world you can't tell a priori what a
sensor's orientation is.

2nd question below...

On Mon, 6 Jul 2020 at 10:12, Jacopo Mondi <jacopo at jmondi.org> wrote:
>
> Hi Laurent,
>
> On Sat, Jul 04, 2020 at 03:52:23AM +0300, Laurent Pinchart wrote:
> > Instead of receiving sensor orientation configuration from the IPA,
> > retrieve it from the CameraSensor Rotation property, and configure the
> > HFLIP and VFLIP controls accordingly.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 12 ++++++++----
> >  1 file changed, 8 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 74bee6895dcd..fda6831e6a7e 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -16,6 +16,7 @@
> >  #include <libcamera/formats.h>
> >  #include <libcamera/ipa/raspberrypi.h>
> >  #include <libcamera/logging.h>
> > +#include <libcamera/property_ids.h>
> >  #include <libcamera/request.h>
> >  #include <libcamera/stream.h>
> >
> > @@ -1174,6 +1175,13 @@ int RPiCameraData::configureIPA()
> >       ipa_->configure(sensorInfo, streamConfig, entityControls, ipaConfig,
> >                       nullptr);
> >
> > +     /* Configure the H/V flip controls based on the sensor rotation. */
> > +     ControlList ctrls(unicam_[Unicam::Image].dev()->controls());
> > +     int32_t rotation = sensor_->properties().get(properties::Rotation);
> > +     ctrls.set(V4L2_CID_HFLIP, static_cast<int32_t>(!!rotation));
> > +     ctrls.set(V4L2_CID_VFLIP, static_cast<int32_t>(!!rotation));
>
> mmm, I see in the IPA this, which is where I assume you got this from
>
>                 ctrls.set(V4L2_CID_HFLIP, (int32_t) !!(orientation & RPi::CamTransform_HFLIP));
>                 ctrls.set(V4L2_CID_VFLIP, (int32_t) !!(orientation & RPi::CamTransform_VFLIP));
>
> Where the 'orientation' flag is retrieved from
>                 RPi::CamTransform orientation = helper_->GetOrientation();
>
> and expressed through members of this enumeration
>                 static constexpr CamTransform CamTransform_IDENTITY = 0;
>                 static constexpr CamTransform CamTransform_HFLIP    = 1;
>                 static constexpr CamTransform CamTransform_VFLIP    = 2;
>
> Now, 'rotation' is expressed in multiple of 90 degrees in the [0-360[
> interval, shouldn't we:
>         if (rotation == 180)
>                 HFLIP
>         if (rotation == 90 || roation == 270)
>                 VFLIP
>  ?

How are we handling transformations that aren't rotations, e.g.
horizontal flip. As I said previously, it's a significant use case.
Also, how are we handling platforms that don't support things like
90/270 degree rotations - it's certain that many platforms won't be
able to do that.

Best regards
David

>
>
> > +     unicam_[Unicam::Image].dev()->setControls(&ctrls);
> > +
> >       return 0;
> >  }
> >
> > @@ -1202,10 +1210,6 @@ void RPiCameraData::queueFrameAction(unsigned int frame, const IPAOperationData
> >                                             { V4L2_CID_EXPOSURE, action.data[1] } });
> >                       sensorMetadata_ = action.data[2];
> >               }
> > -
> > -             /* Set the sensor orientation here as well. */
> > -             ControlList controls = action.controls[0];
> > -             unicam_[Unicam::Image].dev()->setControls(&controls);
>
> Do you think we can now remove the custom rotation handling from the
> IPA helpers ?
>
> >               return;
> >       }
> >
> > --
> > Regards,
> >
> > Laurent Pinchart
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list