<html>Tested-by: Ashok Sidipotu <ashok.sidipotu@collabora.com><br />On Monday, May 15, 2023 18:15 IST, Kieran Bingham <kieran.bingham@ideasonboard.com> wrote:<br /> <blockquote type="cite" cite="20230515124550.3601128-3-kieran.bingham@ideasonboard.com">The CameraManager makes use of the Extensible pattern to provide an<br />internal private implementation that is not exposed in the public API.<br /><br />Move the Private declaration to an internal header to make it available<br />from other internal components in preperation for reducing the surface<br />area of the public interface of the Camera Manager.<br /><br />Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com><br />Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com><br />---<br />include/libcamera/internal/camera_manager.h | 64 +++++++++++++++++++++<br />include/libcamera/internal/meson.build | 1 +<br />src/libcamera/camera_manager.cpp | 50 ++--------------<br />3 files changed, 69 insertions(+), 46 deletions(-)<br />create mode 100644 include/libcamera/internal/camera_manager.h<br /><br />diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h<br />new file mode 100644<br />index 000000000000..05a1e4df8add<br />--- /dev/null<br />+++ b/include/libcamera/internal/camera_manager.h<br />@@ -0,0 +1,64 @@<br />+/* SPDX-License-Identifier: LGPL-2.1-or-later */<br />+/*<br />+ * Copyright (C) 2023, Ideas on Board Oy.<br />+ *<br />+ * camera_manager.h - Camera manager private data<br />+ */<br />+<br />+#pragma once<br />+<br />+#include <map><br />+<br />+#include <libcamera/base/mutex.h><br />+#include <libcamera/base/thread.h><br />+<br />+#include <libcamera/camera_manager.h><br />+<br />+#include "libcamera/internal/ipa_manager.h"<br />+#include "libcamera/internal/process.h"<br />+<br />+namespace libcamera {<br />+<br />+class DeviceEnumerator;<br />+<br />+class CameraManager::Private : public Extensible::Private, public Thread<br />+{<br />+ LIBCAMERA_DECLARE_PUBLIC(CameraManager)<br />+<br />+public:<br />+ Private();<br />+<br />+ int start();<br />+ void addCamera(std::shared_ptr<Camera> camera,<br />+ const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);<br />+ void removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_);<br />+<br />+ /*<br />+ * This mutex protects<br />+ *<br />+ * - initialized_ and status_ during initialization<br />+ * - cameras_ and camerasByDevnum_ after initialization<br />+ */<br />+ mutable Mutex mutex_;<br />+ std::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />+ std::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />+<br />+protected:<br />+ void run() override;<br />+<br />+private:<br />+ int init();<br />+ void createPipelineHandlers();<br />+ void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);<br />+<br />+ ConditionVariable cv_;<br />+ bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />+ int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />+<br />+ std::unique_ptr<DeviceEnumerator> enumerator_;<br />+<br />+ IPAManager ipaManager_;<br />+ ProcessManager processManager_;<br />+};<br />+<br />+} /* namespace libcamera */<br />diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build<br />index d75088059996..0028ed0dc27f 100644<br />--- a/include/libcamera/internal/meson.build<br />+++ b/include/libcamera/internal/meson.build<br />@@ -13,6 +13,7 @@ libcamera_internal_headers = files([<br />'bayer_format.h',<br />'byte_stream_buffer.h',<br />'camera.h',<br />+ 'camera_manager.h',<br />'camera_controls.h',<br />'camera_lens.h',<br />'camera_sensor.h',<br />diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp<br />index c1edefdad160..d3c297b888d8 100644<br />--- a/src/libcamera/camera_manager.cpp<br />+++ b/src/libcamera/camera_manager.cpp<br />@@ -5,24 +5,22 @@<br />* camera_manager.h - Camera management<br />*/<br /><br />-#include <libcamera/camera_manager.h><br />+#include "libcamera/internal/camera_manager.h"<br /><br />#include <map><br /><br />-#include <libcamera/camera.h><br />-<br />#include <libcamera/base/log.h><br />#include <libcamera/base/mutex.h><br />#include <libcamera/base/thread.h><br />#include <libcamera/base/utils.h><br /><br />+#include <libcamera/camera.h><br />+<br />#include "libcamera/internal/device_enumerator.h"<br />-#include "libcamera/internal/ipa_manager.h"<br />#include "libcamera/internal/pipeline_handler.h"<br />-#include "libcamera/internal/process.h"<br /><br />/**<br />- * \file camera_manager.h<br />+ * \file libcamera/camera_manager.h<br />* \brief The camera manager<br />*/<br /><br />@@ -33,46 +31,6 @@ namespace libcamera {<br /><br />LOG_DEFINE_CATEGORY(Camera)<br /><br />-class CameraManager::Private : public Extensible::Private, public Thread<br />-{<br />- LIBCAMERA_DECLARE_PUBLIC(CameraManager)<br />-<br />-public:<br />- Private();<br />-<br />- int start();<br />- void addCamera(std::shared_ptr<Camera> camera,<br />- const std::vector<dev_t> &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_);<br />- void removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_);<br />-<br />- /*<br />- * This mutex protects<br />- *<br />- * - initialized_ and status_ during initialization<br />- * - cameras_ and camerasByDevnum_ after initialization<br />- */<br />- mutable Mutex mutex_;<br />- std::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />- std::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />-<br />-protected:<br />- void run() override;<br />-<br />-private:<br />- int init();<br />- void createPipelineHandlers();<br />- void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);<br />-<br />- ConditionVariable cv_;<br />- bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />- int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);<br />-<br />- std::unique_ptr<DeviceEnumerator> enumerator_;<br />-<br />- IPAManager ipaManager_;<br />- ProcessManager processManager_;<br />-};<br />-<br />CameraManager::Private::Private()<br />: initialized_(false)<br />{<br />--<br />2.34.1<br /> </blockquote><br /><br /> </html>