Files
external_libcamera/src/libcamera/include/device_enumerator.h
Laurent Pinchart b3cdccbff9 libcamera: device_enumerator: Move lookupDeviceNode() to child classes
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>
2019-09-13 20:13:16 +03:00

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__ */