libcamera: camera_manager, pipeline_handler: allow retrieving cameras by device numbers

The V4L2 compatibility layer will need a way to map device numbers to
libcamera Camera instances. Expose a method in the camera manager to
retrieve Camera instances by devnum. The mapping from device numbers to
Camera instances is optionally declared by pipeline handlers when they
register cameras with the camera manager.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Paul Elder 2019-12-22 02:31:56 -06:00
parent 58a19b9d56
commit effe4d6ced
4 changed files with 69 additions and 14 deletions

View file

@ -7,8 +7,10 @@
#ifndef __LIBCAMERA_CAMERA_MANAGER_H__
#define __LIBCAMERA_CAMERA_MANAGER_H__
#include <map>
#include <memory>
#include <string>
#include <sys/types.h>
#include <vector>
#include <libcamera/object.h>
@ -33,8 +35,9 @@ public:
const std::vector<std::shared_ptr<Camera>> &cameras() const { return cameras_; }
std::shared_ptr<Camera> get(const std::string &name);
std::shared_ptr<Camera> get(dev_t devnum);
void addCamera(std::shared_ptr<Camera> camera);
void addCamera(std::shared_ptr<Camera> camera, dev_t devnum);
void removeCamera(Camera *camera);
static const std::string &version() { return version_; }
@ -46,6 +49,7 @@ private:
std::unique_ptr<DeviceEnumerator> enumerator_;
std::vector<std::shared_ptr<PipelineHandler>> pipes_;
std::vector<std::shared_ptr<Camera>> cameras_;
std::map<dev_t, std::weak_ptr<Camera>> camerasByDevnum_;
static const std::string version_;
static CameraManager *self_;