The lookupDeviceNode() method is declared as pure virtual in the base DeviceEnumerator class, but is only called by derived classes. Move it to the DeviceEnumeratorSysfs and DeviceEnumeratorUdev. This allows changing the udev version to take a dev_t instead of separate major/minor, as that's what both the caller and the callee end up using. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
58 lines
1.1 KiB
C++
58 lines
1.1 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2018, Google Inc.
|
|
*
|
|
* device_enumerator.h - API to enumerate and find media devices
|
|
*/
|
|
#ifndef __LIBCAMERA_DEVICE_ENUMERATOR_H__
|
|
#define __LIBCAMERA_DEVICE_ENUMERATOR_H__
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <linux/media.h>
|
|
|
|
namespace libcamera {
|
|
|
|
class MediaDevice;
|
|
|
|
class DeviceMatch
|
|
{
|
|
public:
|
|
DeviceMatch(const std::string &driver);
|
|
|
|
void add(const std::string &entity);
|
|
|
|
bool match(const MediaDevice *device) const;
|
|
|
|
private:
|
|
std::string driver_;
|
|
std::vector<std::string> entities_;
|
|
};
|
|
|
|
class DeviceEnumerator
|
|
{
|
|
public:
|
|
static std::unique_ptr<DeviceEnumerator> create();
|
|
|
|
virtual ~DeviceEnumerator();
|
|
|
|
virtual int init() = 0;
|
|
virtual int enumerate() = 0;
|
|
|
|
std::shared_ptr<MediaDevice> search(const DeviceMatch &dm);
|
|
|
|
protected:
|
|
std::shared_ptr<MediaDevice> createDevice(const std::string &deviceNode);
|
|
void addDevice(const std::shared_ptr<MediaDevice> &media);
|
|
void removeDevice(const std::string &deviceNode);
|
|
|
|
private:
|
|
std::vector<std::shared_ptr<MediaDevice>> devices_;
|
|
};
|
|
|
|
} /* namespace libcamera */
|
|
|
|
#endif /* __LIBCAMERA_DEVICE_ENUMERATOR_H__ */
|