#pragma once #include #include #include #include namespace Potato { enum class NodeType { Unknown, Hardware, Virtual, Application, Bus }; enum class MediaClass { Unknown, AudioSink, AudioSource, AudioDuplex, Stream }; struct PortInfo { uint32_t id; uint32_t nodeId; QString name; uint32_t direction; QString channelName; PortInfo() : id(0), nodeId(0), direction(0) {} PortInfo(uint32_t portId, uint32_t owningNodeId, const QString &portName, uint32_t portDir, const QString &channel = QString()) : id(portId), nodeId(owningNodeId), name(portName), direction(portDir), channelName(channel) {} }; struct NodeInfo { uint32_t id; QString name; QString description; QString stableId; NodeType type; MediaClass mediaClass; QVector inputPorts; QVector outputPorts; NodeInfo() : id(0) , type(NodeType::Unknown) , mediaClass(MediaClass::Unknown) {} bool isValid() const { return id != 0; } static NodeType typeFromProperties(const QString &mediaClass, const QString &appName); static MediaClass mediaClassFromString(const QString &str); }; struct LinkInfo { uint32_t id; uint32_t outputNodeId; uint32_t outputPortId; uint32_t inputNodeId; uint32_t inputPortId; LinkInfo() : id(0) , outputNodeId(0) , outputPortId(0) , inputNodeId(0) , inputPortId(0) {} LinkInfo(uint32_t linkId, uint32_t outNode, uint32_t outPort, uint32_t inNode, uint32_t inPort) : id(linkId) , outputNodeId(outNode) , outputPortId(outPort) , inputNodeId(inNode) , inputPortId(inPort) {} bool isValid() const { return id != 0; } }; }