[libcamera-devel] [RFC PATCH 0/5] Libcamera Controls

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Jun 7 17:51:55 CEST 2019


On Thu, Jun 06, 2019 at 09:56:49PM +0100, Kieran Bingham wrote:
> I've been sketching out these controls for a bit, and I wanted to get them on
> the list as a refernce point for some furthur discussions.
> 
> The patches are based on top of a combination of both Jacopo's V4L2 Control
> series, and Niklas' enum series.
> 
> I am still undecided as to whether the best route forwards is to keep the
> controls as a std::set <Control> with the Control class handling the ID and
> type checking, or if a std::map<ControlID, ControlValue> might be more
> flexible.
> 
> With a control class, I can make sure the construction logic is contained, but
> I lose the ease of 'mapping' an ID to the control value within the std::set.
> I've implemented a comparator, which allows the use of .find(), but I'm not
> sure I'm fond of that yet, especially in the pain points of handling searching
> for an ID which isn't in the set.
> 
> I'd love to be able to make a set operate more like a map using the internal
> key, or perhaps make a map look more like a set, so that the ID and Value are
> more closely associated.

Couldn't you use an std::unordered_set with custom comparison and hash
functions that only take the ID into account ?

> I have also considered that I could update Jacopo's V4L2 controls to utilise
> the ControlValue type, which would then allow for any controls which want to
> map directly to a V4L2 control - the ControlValue itself could be passed to the
> V4L2 layer and populated there. However this would only then push the
> requirement to 'find' the appropriate ControlValue object down to the V4L2
> layer.

I haven't read the patches from this series yet, but sharing a control
value class could possibly make sense.

> Anyway, there's a lovely demo at the end which shows setting the Brightness
> control from the qcam application as a sine wave which makes for a visual
> clarification that the controls are successfully being set.
> 
> As noted there, We will likely want to extend controls such that a particular
> control knows about it's max/min/default values. And that then (to me) provides
> another argument to use the class Control with a set over a map.

We may want to separate the control value, which will be set per
request, from the control information that will be global.

> Anyway, any thoughts on a postcard sized reply. Please don't focus on typos' or
> grammar, as this is an RFC about the usage and API more than the patches
> themselves.
> 
> 
> Kieran Bingham (5):
>   libcamera: Add control handling
>   libcamera: request: add a control set
>   libcamera: pipeline: Add readControls(), writeControl() interfaces
>   QCam: Set a read control on each request to get Gain value
>   [PoC] QCam: Control demo: A SineWave Brightness
> 
>  include/libcamera/controls.h             | 106 ++++++++
>  include/libcamera/meson.build            |   1 +
>  include/libcamera/request.h              |   4 +
>  src/libcamera/controls.cpp               | 310 +++++++++++++++++++++++
>  src/libcamera/include/pipeline_handler.h |   3 +
>  src/libcamera/meson.build                |   1 +
>  src/libcamera/pipeline/ipu3/ipu3.cpp     |  19 ++
>  src/libcamera/pipeline/raspberrypi.cpp   | 108 +++++++-
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp |  19 ++
>  src/libcamera/pipeline/uvcvideo.cpp      | 127 +++++++++-
>  src/libcamera/pipeline/vimc.cpp          |  19 ++
>  src/qcam/main_window.cpp                 |  24 ++
>  12 files changed, 739 insertions(+), 2 deletions(-)
>  create mode 100644 include/libcamera/controls.h
>  create mode 100644 src/libcamera/controls.cpp
> 
> -- 
> 2.20.1
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list