diff options
Diffstat (limited to 'src/libcamera/camera_manager.cpp')
-rw-r--r-- | src/libcamera/camera_manager.cpp | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 4a880684..12cb5a0b 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -35,11 +35,14 @@ LOG_DEFINE_CATEGORY(Camera) * in the system to applications. The manager owns all Camera objects and * handles hot-plugging and hot-unplugging to manage the lifetime of cameras. * - * To interact with libcamera, an application retrieves the camera manager - * instance with CameraManager::instance(). The manager is initially stopped, - * and shall be configured before being started. In particular a custom event - * dispatcher shall be installed if needed with - * CameraManager::setEventDispatcher(). + * To interact with libcamera, an application starts by creating a camera + * manager instance. Only a single instance of the camera manager may exist at + * a time. Attempting to create a second instance without first deleting the + * existing instance results in undefined behaviour. + * + * The manager is initially stopped, and shall be configured before being + * started. In particular a custom event dispatcher shall be installed if + * needed with CameraManager::setEventDispatcher(). * * Once the camera manager is configured, it shall be started with start(). * This will enumerate all the cameras present in the system, which can then be @@ -56,13 +59,21 @@ LOG_DEFINE_CATEGORY(Camera) * removed due to hot-unplug. */ +CameraManager *CameraManager::self_ = nullptr; + CameraManager::CameraManager() : enumerator_(nullptr) { + if (self_) + LOG(Camera, Fatal) + << "Multiple CameraManager objects are not allowed"; + + self_ = this; } CameraManager::~CameraManager() { + self_ = nullptr; } /** @@ -213,21 +224,6 @@ void CameraManager::removeCamera(Camera *camera) } /** - * \brief Retrieve the camera manager instance - * - * The CameraManager is a singleton and can't be constructed manually. This - * function shall instead be used to retrieve the single global instance of the - * manager. - * - * \return The camera manager instance - */ -CameraManager *CameraManager::instance() -{ - static CameraManager manager; - return &manager; -} - -/** * \fn const std::string &CameraManager::version() * \brief Retrieve the libcamera version string * \return The libcamera version string |