[libcamera-devel] [PATCH v2 00/14] Use ControlList for both libcamera and V4L2 controls

Jacopo Mondi jacopo at jmondi.org
Sun Oct 13 15:32:11 CEST 2019


Hi Laurent,
    thank you for this work

On Sat, Oct 12, 2019 at 09:43:53PM +0300, Laurent Pinchart wrote:
> Hello,
>
> This patch series generalises usage of ControlList for all controls,
> both libcamera and V4L2.

Thank you for having clarified my design related concerns.
You can hvae my
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
for the first 6 patches, while I'll review the other ones separately
but I think I will mostly find minor issues now.

Thanks
   j

>
> The rationale is that using a single container to store controls allows
> better sharing of code, especially when we will implement serialisation
> and deserialisation. Additionally, a single container type simplifies
> the IPA API.
>
> Compared to v1, the series has been rebased on top of the IPA API, which
> unveiled issues I hadn't foreseen. Large parts of the code have thus
> been rewritten.
>
> Patches 01/14 and 02/14 are small cleanups and fixes, and patch 03/14
> restores the global list of libcamera controls that used to be
> auto-generated. While this wasn't strictly required in v1, this version
> now depends on it.
>
> The next three patches are also small enhancements to simplify usage of
> ControlValue, ControlList and ControlId (04/14 to 06/14).
>
> Patch 07/14 is the first large change, and extends the ControlLis API to
> support accessing controls by numerical ID. This was previously
> implemented in the V4L2ControlList class and got moved to ControlList as
> this API will likely be used for deserialisation. As a result, the
> ControlList now needs to be constructed with a reference to a
> ControlIdMap to support mapping numerical IDs to ControlId instances.
>
> Patch 08/14 adds a new test for V4L2 controls, based on the vivid
> driver. The test uses the existing V4L2ControlList API, and gets
> migrated to ControlList further down in the series, to ensure that the
> API switch doesn't create regressions.
>
> Patch 09/14 is another small enhancement, after which patch 10/14 starts
> the migration of V4L2 controls by using ControlId in V4L2ControlInfo. To
> do so, a new V4L2ControlId class is introduced that simply wraps
> ControlId with a convenience constructor. Patch 11/14 then removes the
> V4L2ControlInfo::type field that duplicates ControlId::type, and patch
> 12/14 turns V4L2ControlInfoMap into a real class in preparation for
> extending it.
>
> Patch 13/14 is the bulk of the work, and by far the largest in the
> series (but with a nice net removal of 168 lines of code). It moves
> V4L2ControlList to become an optional thin convenience wrapper around
> ControlList, and ControlList can be used directly for V4L2 controls if
> desired.
>
> Finally patch 14/14 merges the control and v4l2controls fields in
> IPAOperationData, simplifying the IPA API.
>
> More code sharing between V4L2 and libcamera controls may still be
> possible, especially around V4L2ControlInfo and V4L2ControlInfoMap. I
> believe it can be built on top of this series.
>
> The series is based on top of the master branch, patches have been
> compiled and tested individually with gcc 5.4.0, and the whole series
> has been compiled with gcc 5 to 9 and clang 6 to 8. Niklas, would you be
> able to run your manual rkisp1 IPA tests ?
>
> Laurent Pinchart (14):
>   libcamera: pipeline: rkisp1: Avoid copy assignment of V4L2 control map
>   libcamera: control_ids: Fix documentation for controls namespace
>   libcamera: control_ids: Generate map of all supported controls
>   libcamera: controls: Add comparison operators for ControlValue
>   libcamera: controls: Default ControlList validator argument to nullptr
>   libcamera: controls: Store control name in ControlId
>   libcamera: controls: Support accessing controls by numerical ID
>   test: v4l2_videodevice: Add V4L2 control test
>   libcamera: v4l2_device: Avoid copy of V4L2ControlInfo
>   libcamera: v4l2_controls: Add V4L2ControlId
>   libcamera: v4l2_controls: Remove V4L2ControlInfo type field
>   libcamera: v4l2_controls: Turn V4L2ControlInfoMap into a class
>   libcamera: v4l2_device: Replace V4L2ControlList with ControlList
>   libcamera: ipa: Merge controls and v4l2controls in IPAOperationData
>
>  include/ipa/ipa_interface.h              |   1 -
>  include/libcamera/control_ids.h.in       |   2 +
>  include/libcamera/controls.h             |  30 ++-
>  src/ipa/rkisp1/rkisp1.cpp                |  22 +-
>  src/libcamera/camera_sensor.cpp          |   4 +-
>  src/libcamera/control_ids.cpp.in         |  20 +-
>  src/libcamera/controls.cpp               | 181 ++++++++++++---
>  src/libcamera/gen-controls.py            |  21 +-
>  src/libcamera/include/camera_sensor.h    |   7 +-
>  src/libcamera/include/v4l2_controls.h    |  74 +++---
>  src/libcamera/include/v4l2_device.h      |   6 +-
>  src/libcamera/ipa_interface.cpp          |   8 -
>  src/libcamera/pipeline/ipu3/ipu3.cpp     |   9 +-
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp |   8 +-
>  src/libcamera/pipeline/uvcvideo.cpp      |  24 +-
>  src/libcamera/pipeline/vimc.cpp          |  25 +--
>  src/libcamera/request.cpp                |   5 +-
>  src/libcamera/v4l2_controls.cpp          | 273 ++++++++---------------
>  src/libcamera/v4l2_device.cpp            |  71 +++---
>  test/controls/control_list.cpp           |   2 +-
>  test/v4l2_videodevice/controls.cpp       |  98 ++++++++
>  test/v4l2_videodevice/meson.build        |   1 +
>  22 files changed, 526 insertions(+), 366 deletions(-)
>  create mode 100644 test/v4l2_videodevice/controls.cpp
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20191013/1c2c4831/attachment.sig>


More information about the libcamera-devel mailing list