libcamera  v0.4.0+65-9834402f
Supporting cameras in Linux since 2019
camera_manager.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2023, Ideas on Board Oy.
4  *
5  * Camera manager private data
6  */
7 
8 #pragma once
9 
11 
12 #include <memory>
13 #include <sys/types.h>
14 #include <vector>
15 
16 #include <libcamera/base/class.h>
17 #include <libcamera/base/mutex.h>
18 #include <libcamera/base/thread.h>
19 #include <libcamera/base/thread_annotations.h>
20 
22 
23 namespace libcamera {
24 
25 class Camera;
26 class DeviceEnumerator;
27 class IPAManager;
28 class PipelineHandlerFactoryBase;
29 
30 class CameraManager::Private : public Extensible::Private, public Thread
31 {
32  LIBCAMERA_DECLARE_PUBLIC(CameraManager)
33 
34 public:
35  Private();
36 
37  int start();
38  void addCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);
39  void removeCamera(std::shared_ptr<Camera> camera) LIBCAMERA_TSA_EXCLUDES(mutex_);
40 
41  IPAManager *ipaManager() const { return ipaManager_.get(); }
42 
43 protected:
44  void run() override;
45 
46 private:
47  int init();
48  void createPipelineHandlers();
49  void pipelineFactoryMatch(const PipelineHandlerFactoryBase *factory);
50  void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_);
51 
52  /*
53  * This mutex protects
54  *
55  * - initialized_ and status_ during initialization
56  * - cameras_ after initialization
57  */
58  mutable Mutex mutex_;
59  std::vector<std::shared_ptr<Camera>> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
60 
61  ConditionVariable cv_;
62  bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
63  int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_);
64 
65  std::unique_ptr<DeviceEnumerator> enumerator_;
66 
67  std::unique_ptr<IPAManager> ipaManager_;
68  ProcessManager processManager_;
69 };
70 
71 } /* namespace libcamera */
Utilities to help constructing class interfaces.
Top-level libcamera namespace.
Definition: backtrace.h:17
The camera manager.
Definition: v4l2_pixelformat.h:62
#define LIBCAMERA_DECLARE_PUBLIC(klass)
Declare public data for a private class.
Thread support.
Private()
Construct an instance of an Extensible class private data.
Definition: class.cpp:194
virtual void run()
Main function of the thread.
Definition: thread.cpp:336
int start()
Start the camera manager.
Definition: camera_manager.cpp:325
Process object.
Mutex classes with clang thread safety annotation.