[libcamera-devel] [PATCH v1 0/5] Vendor controls and properties

Naushir Patuck naush at raspberrypi.com
Fri Nov 10 11:59:57 CET 2023


Hi,

This change introduces a first attempt at implementing vendor specific controls
and properties in libcamera.  Vendor controls and properties live in their own
namespace, and each vendor must now reserve a numeric control id range to avoid
any id value clashes.  Vendor controls may either live in the libcamera
control_ids.yaml/property_ids.yaml files or preferably separate vendor specific
files.

To designate a vendor control, the YAML control description must contain a
"vendor: <vendor_string>" tag.  For example,

- RaspberryPiExampleControl:
    type: string
    vendor: rpi
    description: |
      Example vendor control with the "rpi" vendor tag.

will create a control in the libcamera::controls::rpi namespace, with the
numeric id value taken from the "rpi" reservation.  Additionally, a #define
LIBCAMERA_RPI_VENDOR_CONTROL will be available for applications to selectively
compile in vendor control support.  Similar applies to the property generation.

The current mechanism for draft controls and propertiers have been deprecated,
and now these are designated with the "draft" vendor tag.  Note that this causes
an API breaking change since the numeric control id values for draft control
have their own designated range and namespace.  So, for example, the use of
controls::NOISE_REDUCTION_MODE will need to be replaced with
controls::draft::NOISE_REDUCTION_MODE.

Thanks,
Naush

Naushir Patuck (5):
  controls: Add vendor control/property support to generation scripts
  controls: build: Allow separate vendor control YAML files
  libcamera: control: Add vendor control id range reservation
  libcamera: controls: Use vendor tags for draft controls and properties
  documentation: Document vendor specific control and properties
    handling

 Documentation/guides/pipeline-handler.rst     |  53 ++++++
 include/libcamera/control_ids.h.in            |   6 +-
 include/libcamera/meson.build                 |  58 +++++-
 include/libcamera/property_ids.h.in           |   8 +-
 meson.build                                   |   2 +
 src/ipa/rpi/common/ipa_base.cpp               |   2 +-
 src/ipa/rpi/vc4/vc4.cpp                       |   2 +-
 src/libcamera/control_ids.cpp.in              |  16 +-
 src/libcamera/control_ids.yaml                |  20 +--
 src/libcamera/control_ids_rpi.yaml            |  17 ++
 src/libcamera/control_ranges.yaml             |  17 ++
 src/libcamera/meson.build                     |  20 ++-
 src/libcamera/property_ids.cpp.in             |  16 +-
 src/libcamera/property_ids.yaml               |   2 +-
 src/py/libcamera/gen-py-controls.py           |  31 +++-
 src/py/libcamera/meson.build                  |  26 +--
 src/py/libcamera/py_controls_generated.cpp.in |   6 +-
 .../libcamera/py_properties_generated.cpp.in  |   4 +-
 utils/gen-controls.py                         | 169 +++++++++++++-----
 19 files changed, 348 insertions(+), 127 deletions(-)
 create mode 100644 src/libcamera/control_ids_rpi.yaml
 create mode 100644 src/libcamera/control_ranges.yaml

-- 
2.34.1



More information about the libcamera-devel mailing list