summaryrefslogtreecommitdiff
path: root/test/controls/control_list.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/controls/control_list.cpp')
0 files changed, 0 insertions, 0 deletions
>5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 * Copyright (C) 2018, Google Inc.
 *
 * Media device handler
 */

#pragma once

#include <map>
#include <sstream>
#include <string>
#include <vector>

#include <linux/media.h>

#include <libcamera/base/log.h>
#include <libcamera/base/signal.h>
#include <libcamera/base/unique_fd.h>

#include "libcamera/internal/media_object.h"

namespace libcamera {

class MediaDevice : protected Loggable
{
public:
	MediaDevice(const std::string &deviceNode);
	~MediaDevice();

	bool acquire();
	bool acquireNonExclusive();
	void release();
	bool busy() const { return acquired_; }

	/* HACKS */
	unsigned int get() { return ++users_; }
	unsigned int put() { return --users_; }

	bool lock();
	void unlock();

	int populate();
	bool isValid() const { return valid_; }

	const std::string &driver() const { return driver_; }
	const std::string &deviceNode() const { return deviceNode_; }
	const std::string &model() const { return model_; }
	unsigned int version() const { return version_; }
	unsigned int hwRevision() const { return hwRevision_; }

	const std::vector<MediaEntity *> &entities() const { return entities_; }
	MediaEntity *getEntityByName(const std::string &name) const;

	MediaLink *link(const std::string &sourceName, unsigned int sourceIdx,
			const std::string &sinkName, unsigned int sinkIdx);
	MediaLink *link(const MediaEntity *source, unsigned int sourceIdx,
			const MediaEntity *sink, unsigned int sinkIdx);
	MediaLink *link(const MediaPad *source, const MediaPad *sink);
	int disableLinks();

	int fd() const { return fd_.get(); }
	int fd(unsigned int context) const { return fds_[context - 1].get(); }
	unsigned int numContexts() const { return fds_.size(); }