diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-11-24 21:48:01 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-11-24 22:00:09 +0900 |
| commit | 9f7b0c2f46305f8a321791d6fcedc3df7f966783 (patch) | |
| tree | b565a4a7d8e77f8f6717e46837f6b7d6ee174fc7 /internal/pipewire/pod.go | |
| parent | 3e87187c4c4eb43ed1c9dc1c0c6613e5bed1dc6c (diff) | |
internal/pipewire: add type constants
This change also centralises encoding testing.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire/pod.go')
| -rw-r--r-- | internal/pipewire/pod.go | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/internal/pipewire/pod.go b/internal/pipewire/pod.go new file mode 100644 index 00000000..7c01543d --- /dev/null +++ b/internal/pipewire/pod.go @@ -0,0 +1,133 @@ +package pipewire + +type ( + // A Word is a 32-bit unsigned integer. + // + // Values internal to a message appear to always be aligned to 32-bit boundary. + Word = uint32 + + // An Int is a signed integer the size of a PipeWire Word. + Int = int32 + // An Uint is an unsigned integer the size of a PipeWire Word. + Uint = Word +) + +/* Basic types */ +const ( + /* POD's can contain a number of basic SPA types: */ + + SPA_TYPE_START = 0x00000 + iota + SPA_TYPE_None // No value or a NULL pointer. + SPA_TYPE_Bool // A boolean value. + SPA_TYPE_Id // An enumerated value. + SPA_TYPE_Int // An integer value, 32-bit. + SPA_TYPE_Long // An integer value, 64-bit. + SPA_TYPE_Float // A floating point value, 32-bit. + SPA_TYPE_Double // A floating point value, 64-bit. + SPA_TYPE_String // A string. + SPA_TYPE_Bytes // A byte array. + SPA_TYPE_Rectangle // A rectangle with width and height. + SPA_TYPE_Fraction // A fraction with numerator and denominator. + SPA_TYPE_Bitmap // An array of bits. + + /* POD's can be grouped together in these container types: */ + + SPA_TYPE_Array // An array of equal sized objects. + SPA_TYPE_Struct // A collection of types and objects. + SPA_TYPE_Object // An object with properties. + SPA_TYPE_Sequence // A timed sequence of POD's. + + /* POD's can also contain some extra types: */ + + SPA_TYPE_Pointer // A typed pointer in memory. + SPA_TYPE_Fd // A file descriptor. + SPA_TYPE_Choice // A choice of values. + SPA_TYPE_Pod // A generic type for the POD itself. + + _SPA_TYPE_LAST // not part of ABI +) + +/* Pointers */ +const ( + SPA_TYPE_POINTER_START = 0x10000 + iota + SPA_TYPE_POINTER_Buffer + SPA_TYPE_POINTER_Meta + SPA_TYPE_POINTER_Dict + + _SPA_TYPE_POINTER_LAST // not part of ABI +) + +/* Events */ +const ( + SPA_TYPE_EVENT_START = 0x20000 + iota + SPA_TYPE_EVENT_Device + SPA_TYPE_EVENT_Node + + _SPA_TYPE_EVENT_LAST // not part of ABI +) + +/* Commands */ +const ( + SPA_TYPE_COMMAND_START = 0x30000 + iota + SPA_TYPE_COMMAND_Device + SPA_TYPE_COMMAND_Node + + _SPA_TYPE_COMMAND_LAST // not part of ABI +) + +/* Objects */ +const ( + SPA_TYPE_OBJECT_START = 0x40000 + iota + SPA_TYPE_OBJECT_PropInfo + SPA_TYPE_OBJECT_Props + SPA_TYPE_OBJECT_Format + SPA_TYPE_OBJECT_ParamBuffers + SPA_TYPE_OBJECT_ParamMeta + SPA_TYPE_OBJECT_ParamIO + SPA_TYPE_OBJECT_ParamProfile + SPA_TYPE_OBJECT_ParamPortConfig + SPA_TYPE_OBJECT_ParamRoute + SPA_TYPE_OBJECT_Profiler + SPA_TYPE_OBJECT_ParamLatency + SPA_TYPE_OBJECT_ParamProcessLatency + SPA_TYPE_OBJECT_ParamTag + _SPA_TYPE_OBJECT_LAST // not part of ABI +) + +/* vendor extensions */ +const ( + SPA_TYPE_VENDOR_PipeWire = 0x02000000 + + SPA_TYPE_VENDOR_Other = 0x7f000000 +) + +const ( + SPA_TYPE_INFO_BASE = "Spa:" + + SPA_TYPE_INFO_Flags = SPA_TYPE_INFO_BASE + "Flags" + SPA_TYPE_INFO_FLAGS_BASE = SPA_TYPE_INFO_Flags + ":" + + SPA_TYPE_INFO_Enum = SPA_TYPE_INFO_BASE + "Enum" + SPA_TYPE_INFO_ENUM_BASE = SPA_TYPE_INFO_Enum + ":" + + SPA_TYPE_INFO_Pod = SPA_TYPE_INFO_BASE + "Pod" + SPA_TYPE_INFO_POD_BASE = SPA_TYPE_INFO_Pod + ":" + + SPA_TYPE_INFO_Struct = SPA_TYPE_INFO_POD_BASE + "Struct" + SPA_TYPE_INFO_STRUCT_BASE = SPA_TYPE_INFO_Struct + ":" + + SPA_TYPE_INFO_Object = SPA_TYPE_INFO_POD_BASE + "Object" + SPA_TYPE_INFO_OBJECT_BASE = SPA_TYPE_INFO_Object + ":" + + SPA_TYPE_INFO_Pointer = SPA_TYPE_INFO_BASE + "Pointer" + SPA_TYPE_INFO_POINTER_BASE = SPA_TYPE_INFO_Pointer + ":" + + SPA_TYPE_INFO_Interface = SPA_TYPE_INFO_POINTER_BASE + "Interface" + SPA_TYPE_INFO_INTERFACE_BASE = SPA_TYPE_INFO_Interface + ":" + + SPA_TYPE_INFO_Event = SPA_TYPE_INFO_OBJECT_BASE + "Event" + SPA_TYPE_INFO_EVENT_BASE = SPA_TYPE_INFO_Event + ":" + + SPA_TYPE_INFO_Command = SPA_TYPE_INFO_OBJECT_BASE + "Command" + SPA_TYPE_INFO_COMMAND_BASE = SPA_TYPE_INFO_Command + ":" +) |
