[libcamera-devel] [PATCH 11/12] libcamera: Add ControlValidator implementation for Camera
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Sep 28 17:22:37 CEST 2019
Add a new CameraControlValidator class that implements the
ControlValidator interface for a Camera object.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/libcamera/camera_controls.cpp | 53 +++++++++++++++++++++++++
src/libcamera/include/camera_controls.h | 30 ++++++++++++++
src/libcamera/include/meson.build | 1 +
src/libcamera/meson.build | 1 +
4 files changed, 85 insertions(+)
create mode 100644 src/libcamera/camera_controls.cpp
create mode 100644 src/libcamera/include/camera_controls.h
diff --git a/src/libcamera/camera_controls.cpp b/src/libcamera/camera_controls.cpp
new file mode 100644
index 000000000000..341da56019f7
--- /dev/null
+++ b/src/libcamera/camera_controls.cpp
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * camera_controls.cpp - Camera controls
+ */
+
+#include "camera_controls.h"
+
+#include <libcamera/camera.h>
+#include <libcamera/controls.h>
+
+/**
+ * \file camera_controls.h
+ * \brief Controls for Camera instances
+ */
+
+namespace libcamera {
+
+/**
+ * \class CameraControlValidator
+ * \brief A control validator for Camera instances
+ *
+ * This ControlValidator specialisation validates that controls exist in the
+ * Camera associated with the validator.
+ */
+
+/**
+ * \brief Construst a CameraControlValidator for the \a camera
+ * \param[in] camera The camera
+ */
+CameraControlValidator::CameraControlValidator(Camera *camera)
+ : camera_(camera)
+{
+}
+
+const std::string &CameraControlValidator::name() const
+{
+ return camera_->name();
+}
+
+/**
+ * \brief Validate a control
+ * \param[in] id The control ID
+ * \return True if the control is valid, false otherwise
+ */
+bool CameraControlValidator::validate(const ControlId &id) const
+{
+ const ControlInfoMap &controls = camera_->controls();
+ return controls.find(&id) != controls.end();
+}
+
+} /* namespace libcamera */
diff --git a/src/libcamera/include/camera_controls.h b/src/libcamera/include/camera_controls.h
new file mode 100644
index 000000000000..998a2d155a44
--- /dev/null
+++ b/src/libcamera/include/camera_controls.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * camera_controls.h - Camera controls
+ */
+#ifndef __LIBCAMERA_CAMERA_CONTROLS_H__
+#define __LIBCAMERA_CAMERA_CONTROLS_H__
+
+#include "control_validator.h"
+
+namespace libcamera {
+
+class Camera;
+
+class CameraControlValidator final : public ControlValidator
+{
+public:
+ CameraControlValidator(Camera *camera);
+
+ const std::string &name() const override;
+ bool validate(const ControlId &id) const override;
+
+private:
+ Camera *camera_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_CAMERA_CONTROLS_H__ */
diff --git a/src/libcamera/include/meson.build b/src/libcamera/include/meson.build
index 1cf47204f2b5..2c74d29bd925 100644
--- a/src/libcamera/include/meson.build
+++ b/src/libcamera/include/meson.build
@@ -1,4 +1,5 @@
libcamera_headers = files([
+ 'camera_controls.h',
'camera_sensor.h',
'control_validator.h',
'device_enumerator.h',
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 984cb9985f49..fbfa11d469e4 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -2,6 +2,7 @@ libcamera_sources = files([
'bound_method.cpp',
'buffer.cpp',
'camera.cpp',
+ 'camera_controls.cpp',
'camera_manager.cpp',
'camera_sensor.cpp',
'controls.cpp',
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list