libcamera: camera_manager: Make the class a singleton
There can only be a single camera manager instance in the application. Creating it as a singleton helps avoiding mistakes. It also allows the camera manager to be used as a storage of global data, such as the future event dispatcher. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
f3829b5745
commit
8b0de29c41
3 changed files with 22 additions and 8 deletions
|
@ -19,15 +19,19 @@ class PipelineHandler;
|
|||
class CameraManager
|
||||
{
|
||||
public:
|
||||
CameraManager();
|
||||
|
||||
int start();
|
||||
void stop();
|
||||
|
||||
std::vector<std::string> list() const;
|
||||
Camera *get(const std::string &name);
|
||||
|
||||
static CameraManager *instance();
|
||||
|
||||
private:
|
||||
CameraManager();
|
||||
CameraManager(const CameraManager &) = delete;
|
||||
void operator=(const CameraManager &) = delete;
|
||||
|
||||
DeviceEnumerator *enumerator_;
|
||||
std::vector<PipelineHandler *> pipes_;
|
||||
};
|
||||
|
|
|
@ -161,4 +161,19 @@ Camera *CameraManager::get(const std::string &name)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* \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;
|
||||
}
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
|
@ -19,10 +19,7 @@ class ListTest : public Test
|
|||
protected:
|
||||
int init()
|
||||
{
|
||||
cm = new CameraManager();
|
||||
if (!cm)
|
||||
return -ENOMEM;
|
||||
|
||||
cm = CameraManager::instance();
|
||||
cm->start();
|
||||
|
||||
return 0;
|
||||
|
@ -43,8 +40,6 @@ protected:
|
|||
void cleanup()
|
||||
{
|
||||
cm->stop();
|
||||
|
||||
delete cm;
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue