potato/src/pipewire/nodeinfo.h
2026-01-27 16:41:51 -07:00

86 lines
1.8 KiB
C++

#pragma once
#include <QString>
#include <QVector>
#include <cstdint>
#include <QtGlobal>
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<PortInfo> inputPorts;
QVector<PortInfo> 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; }
};
}