Files
external_libcamera/include/libcamera/internal/device_enumerator_udev.h
Barnabás Pőcze bb021aa549 libcamera: device_enumerator_udev: Disable copy/move
The default implementations generated by the compiler are not appropriate.
So disable them.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
2025-12-16 10:49:27 +01:00

78 lines
1.5 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2018-2019, Google Inc.
*
* udev-based device enumerator
*/
#pragma once
#include <list>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <sys/types.h>
#include <libcamera/base/class.h>
#include "libcamera/internal/device_enumerator.h"
struct udev;
struct udev_device;
struct udev_monitor;
namespace libcamera {
class EventNotifier;
class MediaDevice;
class MediaEntity;
class DeviceEnumeratorUdev final : public DeviceEnumerator
{
public:
DeviceEnumeratorUdev();
~DeviceEnumeratorUdev();
int init();
int enumerate();
private:
using DependencyMap = std::map<dev_t, std::list<MediaEntity *>>;
struct MediaDeviceDeps {
MediaDeviceDeps(std::unique_ptr<MediaDevice> media,
DependencyMap deps)
: media_(std::move(media)), deps_(std::move(deps))
{
}
bool operator==(const MediaDeviceDeps &other) const
{
return media_ == other.media_;
}
std::unique_ptr<MediaDevice> media_;
DependencyMap deps_;
};
LIBCAMERA_DISABLE_COPY_AND_MOVE(DeviceEnumeratorUdev)
int addUdevDevice(struct udev_device *dev);
int populateMediaDevice(MediaDevice *media, DependencyMap *deps);
std::string lookupDeviceNode(dev_t devnum);
int addV4L2Device(dev_t devnum);
void udevNotify();
struct udev *udev_;
struct udev_monitor *monitor_;
EventNotifier *notifier_;
std::set<dev_t> orphans_;
std::list<MediaDeviceDeps> pending_;
std::map<dev_t, MediaDeviceDeps *> devMap_;
};
} /* namespace libcamera */