[libcamera-devel] [PATCH v2 0/5] Transform implementation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Aug 19 04:16:27 CEST 2020


Hi David,

On Mon, Aug 17, 2020 at 06:02:52PM +0100, David Plowman wrote:
> Hi everyone
> 
> I was wondering if I could give this a gentle nudge? I also thought it
> might help if I explain a bit more what we're up to - it's a bit less
> random than it might seem!

I've now reviewed the patches. Sorry again about the delay.

> Some of you will know our existing "raspicam" apps, raspistill,
> raspivid etc. The plan is to introduce libcamera equivalents hoping to
> encourage more of our users to move to libcamera. (PiCamera - Python
> bindings for our existing stack - is also popular of course, but we're
> tackling the "raspicam" apps first.)
> 
> The aim is therefore to plug the most obvious functionality gaps,
> which we've identified as:
> 
> 1. Raw stream alongside video. This is addressed by some of Naush's
> recent patches on zero-copy raw buffers.
> 
> 2. Ability to set camera configuration (esp. exposure/gain) before the
> camera starts. This is very important to many users.
> 
> 3. User-level transforms of the image (e.g. 180 degree rotation).
> 
> 4. Lack of digital zoom.
> 
> Having addressed those we plan to start opening the apps to users to try,
> and being libcamera-based they could be helpful to non-Pi users too.

I'll continue with the review of the other pending series :-)

> I hope that extra information is useful!
> 
> On Thu, 6 Aug 2020 at 17:36, David Plowman wrote:
> >
> > Hi everyone
> >
> > Here's a second version of the 2d transform implementation (still for
> > discussion only). It follows the same principles as the previous
> > version, but the ALSC issues that I ran into are no longer part of
> > this set (indeed they have already been merged).
> >
> > There are now 5 patches. I'll add the relevant documentation once we
> > can feel confident there won't be too much more churn. That leaves:
> >
> > 1. The first merely adds the Transform enum. I to-ed and fro-ed a bit
> > here, and decided, after doing it both ways, that wrapping a class
> > round the enum didn't add a whole lot, and just left me with more
> > questions and more boilerplate. Anyway, see what you think...
> >
> > 2. The second patch adds the Transform enum to the
> > CameraConfiguration. I've also amended all the pipeline handlers
> > (including the Raspberry Pi one) simply to coerce it to the Identity
> > if it wasn't, marking the configuration as "adjusted".
> >
> > 3. This patch updates the Raspberry Pi pipeline handler to allow all
> > non-transposing transforms, and to set the flip bits in the sensor.
> >
> > 4. Here I just plumb the Transform through to the Raspberry Pi IPA
> > where it gets put into the CameraMode structure. This bothered me
> > first time round, but on reflection I think it's pragmatic to treat it
> > like that from the point of view of the IPAs.
> >
> > 5. This updates the ALSC algorithm to transform the calibrated tables
> > correctly. Note that we regenerate the tables from scratch if the
> > transform changes.
> >
> > David Plowman (5):
> >   libcamera: Add Transform enum to represet 2d plane transforms.
> >   libcamera: Add user Transform to CameraConfiguration
> >   libcamera: raspberrypi: Set camera flips correctly from user transform
> >   libcamera: raspberrypi: Plumb user transform through to IPA
> >   libcamera: ipa: raspberrypi: ALSC: Handle user transform
> >
> >  include/libcamera/camera.h                    |  3 +
> >  include/libcamera/meson.build                 |  1 +
> >  include/libcamera/transform.h                 | 58 +++++++++++++
> >  src/ipa/raspberrypi/controller/camera_mode.h  |  4 +
> >  src/ipa/raspberrypi/controller/rpi/alsc.cpp   | 13 ++-
> >  src/ipa/raspberrypi/raspberrypi.cpp           | 48 ++++++-----
> >  src/libcamera/camera.cpp                      |  2 +-
> >  src/libcamera/meson.build                     |  1 +
> >  src/libcamera/pipeline/ipu3/ipu3.cpp          |  5 ++
> >  .../pipeline/raspberrypi/raspberrypi.cpp      | 26 +++++-
> >  src/libcamera/pipeline/rkisp1/rkisp1.cpp      |  5 ++
> >  src/libcamera/pipeline/simple/simple.cpp      |  5 ++
> >  src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  5 ++
> >  src/libcamera/pipeline/vimc/vimc.cpp          |  5 ++
> >  src/libcamera/transform.cpp                   | 83 +++++++++++++++++++
> >  15 files changed, 238 insertions(+), 26 deletions(-)
> >  create mode 100644 include/libcamera/transform.h
> >  create mode 100644 src/libcamera/transform.cpp

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list