/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2018, Google Inc. * * media_device.h - Media device handler */ #ifndef __LIBCAMERA_INTERNAL_MEDIA_DEVICE_H__ #define __LIBCAMERA_INTERNAL_MEDIA_DEVICE_H__ #include #include #include #include #include #include #include #include "libcamera/internal/media_object.h" namespace libcamera { class MediaDevice : protected Loggable { public: MediaDevice(const std::string &deviceNode); ~MediaDevice(); bool acquire(); void release(); bool busy() const { return acquired_; } 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 &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(); Signal disconnected; protected: std::string logPrefix() const override; private: int open(); void close(); MediaObject *object(unsigned int id); bool addObject(MediaObject *object); void clear(); struct media_v2_interface *findInterface(const struct media_v2_topology &topology, unsigned int entityId); bool populateEntities(const struct media_v2_topology &topology); bool populatePads(const struct media_v2_topology &topology); bool populateLinks(const struct media_v2_topology &topology); void fixupEntityFlags(struct media_v2_entity *entity); friend int MediaLink::setEnabled(bool enable); int setupLink(const MediaLink *link, unsigned int flags); std::string driver_; std::string deviceNode_; std::string model_; unsigned int version_; unsigned int hwRevision_; int fd_; bool valid_; bool acquired_; bool lockOwner_; std::map objects_; std::vector entities_; }; } /* namespace libcamera */ #endif /* __LIBCAMERA_INTERNAL_MEDIA_DEVICE_H__ */