Files
external_libcamera/include/libcamera/internal/v4l2_device.h
Laurent Pinchart f2067dffed libcamera: v4l2_device: Make fd() function const
There are use cases for getting the file descriptor of a const
V4L2Device instance, for instance to print it in a log. Make the
function const. There's little risk of abuse here (as in code then
performing operations on the file descriptors that conceptually modify
the V4L2 device), as the fd() function is protected.

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>
2021-03-04 10:05:35 +02:00

76 lines
1.7 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* v4l2_device.h - Common base for V4L2 video devices and subdevices
*/
#ifndef __LIBCAMERA_INTERNAL_V4L2_DEVICE_H__
#define __LIBCAMERA_INTERNAL_V4L2_DEVICE_H__
#include <map>
#include <memory>
#include <vector>
#include <linux/videodev2.h>
#include <libcamera/signal.h>
#include "libcamera/internal/log.h"
#include "libcamera/internal/v4l2_controls.h"
namespace libcamera {
class EventNotifier;
class V4L2Device : protected Loggable
{
public:
void close();
bool isOpen() const { return fd_ != -1; }
const ControlInfoMap &controls() const { return controls_; }
ControlList getControls(const std::vector<uint32_t> &ids);
int setControls(ControlList *ctrls);
const struct v4l2_query_ext_ctrl *controlInfo(uint32_t id) const;
const std::string &deviceNode() const { return deviceNode_; }
std::string devicePath() const;
int setFrameStartEnabled(bool enable);
Signal<uint32_t> frameStart;
protected:
V4L2Device(const std::string &deviceNode);
~V4L2Device();
int open(unsigned int flags);
int setFd(int fd);
int ioctl(unsigned long request, void *argp);
int fd() const { return fd_; }
private:
void listControls();
void updateControls(ControlList *ctrls,
const struct v4l2_ext_control *v4l2Ctrls,
unsigned int count);
void eventAvailable(EventNotifier *notifier);
std::map<unsigned int, struct v4l2_query_ext_ctrl> controlInfo_;
std::vector<std::unique_ptr<V4L2ControlId>> controlIds_;
ControlInfoMap controls_;
std::string deviceNode_;
int fd_;
EventNotifier *fdEventNotifier_;
bool frameStartEnabled_;
};
} /* namespace libcamera */
#endif /* __LIBCAMERA_INTERNAL_V4L2_DEVICE_H__ */