android: camera_device: Make CameraDevice a shared object
CameraDevice needs to be wrapper into the std::shared_ptr instead of std::unique_ptr to enable refcounting. The refcounting will help us to support hotplug and hot-unplug CameraHalManager operations in the subsequent commit. Signed-off-by: Umang Jain <email@uajain.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
7197fd9d67
commit
f8e2813ffe
4 changed files with 14 additions and 4 deletions
|
@ -233,6 +233,13 @@ CameraDevice::~CameraDevice()
|
|||
delete it.second;
|
||||
}
|
||||
|
||||
std::shared_ptr<CameraDevice> CameraDevice::create(unsigned int id,
|
||||
const std::shared_ptr<Camera> &cam)
|
||||
{
|
||||
CameraDevice *camera = new CameraDevice(id, cam);
|
||||
return std::shared_ptr<CameraDevice>(camera);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the camera static information.
|
||||
* This method is called before the camera device is opened.
|
||||
|
|
|
@ -47,7 +47,8 @@ struct CameraStream {
|
|||
class CameraDevice : protected libcamera::Loggable
|
||||
{
|
||||
public:
|
||||
CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);
|
||||
static std::shared_ptr<CameraDevice> create(unsigned int id,
|
||||
const std::shared_ptr<libcamera::Camera> &cam);
|
||||
~CameraDevice();
|
||||
|
||||
int initialize();
|
||||
|
@ -72,6 +73,8 @@ protected:
|
|||
std::string logPrefix() const override;
|
||||
|
||||
private:
|
||||
CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);
|
||||
|
||||
struct Camera3RequestDescriptor {
|
||||
Camera3RequestDescriptor(unsigned int frameNumber,
|
||||
unsigned int numBuffers);
|
||||
|
|
|
@ -64,12 +64,12 @@ int CameraHalManager::init()
|
|||
*/
|
||||
unsigned int index = 0;
|
||||
for (auto &cam : cameraManager_->cameras()) {
|
||||
CameraDevice *camera = new CameraDevice(index, cam);
|
||||
std::shared_ptr<CameraDevice> camera = CameraDevice::create(index, cam);
|
||||
ret = camera->initialize();
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
cameras_.emplace_back(camera);
|
||||
cameras_.emplace_back(std::move(camera));
|
||||
++index;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ private:
|
|||
libcamera::CameraManager *cameraManager_;
|
||||
|
||||
const camera_module_callbacks_t *callbacks_;
|
||||
std::vector<std::unique_ptr<CameraDevice>> cameras_;
|
||||
std::vector<std::shared_ptr<CameraDevice>> cameras_;
|
||||
};
|
||||
|
||||
#endif /* __ANDROID_CAMERA_MANAGER_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue