From 5c12425d48e7f3aad70a4e712ec35b96653b9935 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Fri, 28 Nov 2025 01:57:30 +0900 Subject: [PATCH] internal/pipewire: implement Registry::Global Dealing with this event reawakened my burning hatred for OOP. Signed-off-by: Ophestra --- internal/pipewire/core.go | 30 +++ internal/pipewire/core_test.go | 442 ++++++++++++++++++++++++++++++- internal/pipewire/header_test.go | 210 +++++++++++++++ 3 files changed, 681 insertions(+), 1 deletion(-) diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go index c172d0c..a54ec11 100644 --- a/internal/pipewire/core.go +++ b/internal/pipewire/core.go @@ -225,3 +225,33 @@ func (c *CoreGetRegistry) MarshalBinary() ([]byte, error) { return Marshal(c) } // UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal]. func (c *CoreGetRegistry) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) } + +// A RegistryGlobal event is emitted to notify a client about a new global object. +type RegistryGlobal struct { + // The global id. + ID Int `json:"id"` + // Permission bits. + Permissions Int `json:"permissions"` + // The type of object. + Type String `json:"type"` + // The server version of the object. + Version Int `json:"version"` + // Extra global properties. + Properties *SPADict `json:"props"` +} + +// Size satisfies [KnownSize] with a value computed at runtime. +func (c *RegistryGlobal) Size() Word { + return SizePrefix + + Size(SizeInt) + + Size(SizeInt) + + SizeString[Word](c.Type) + + Size(SizeInt) + + c.Properties.Size() +} + +// MarshalBinary satisfies [encoding.BinaryMarshaler] via [Marshal]. +func (c *RegistryGlobal) MarshalBinary() ([]byte, error) { return Marshal(c) } + +// UnmarshalBinary satisfies [encoding.BinaryUnmarshaler] via [Unmarshal]. +func (c *RegistryGlobal) UnmarshalBinary(data []byte) error { return Unmarshal(data, c) } diff --git a/internal/pipewire/core_test.go b/internal/pipewire/core_test.go index 9cfc571..0997e9c 100644 --- a/internal/pipewire/core_test.go +++ b/internal/pipewire/core_test.go @@ -127,7 +127,447 @@ func TestCoreGetRegistry(t *testing.T) { encodingTestCases[pipewire.CoreGetRegistry, *pipewire.CoreGetRegistry]{ {"sample", samplePWContainer[0][2][1], pipewire.CoreGetRegistry{ Version: pipewire.PW_VERSION_REGISTRY, - NewID: 2, + // this ends up as the Id of PW_TYPE_INTERFACE_Registry + NewID: 2, + }, nil}, + }.run(t) +} + +func TestRegistryGlobal(t *testing.T) { + t.Parallel() + + encodingTestCases[pipewire.RegistryGlobal, *pipewire.RegistryGlobal]{ + {"sample0", samplePWContainer[1][6][1], pipewire.RegistryGlobal{ + ID: pipewire.PW_ID_CORE, + Permissions: pipewire.PW_CORE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Core, + Version: pipewire.PW_VERSION_CORE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "0"}, + {Key: "core.name", Value: "pipewire-0"}, + }, + }, nil}, + + {"sample1", samplePWContainer[1][7][1], pipewire.RegistryGlobal{ + ID: 1, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "1"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-rt"}, + }, + }, nil}, + + {"sample2", samplePWContainer[1][8][1], pipewire.RegistryGlobal{ + ID: 3, // registry takes up 2 + Permissions: pipewire.PW_SECURITY_CONTEXT_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_SecurityContext, + Version: pipewire.PW_VERSION_SECURITY_CONTEXT, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "3"}, + }, + }, nil}, + + {"sample3", samplePWContainer[1][9][1], pipewire.RegistryGlobal{ + ID: 2, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "2"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-protocol-native"}, + }, + }, nil}, + + {"sample4", samplePWContainer[1][10][1], pipewire.RegistryGlobal{ + ID: 5, + Permissions: pipewire.PW_PROFILER_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Profiler, + Version: pipewire.PW_VERSION_PROFILER, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "5"}, + }, + }, nil}, + + {"sample5", samplePWContainer[1][11][1], pipewire.RegistryGlobal{ + ID: 4, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "4"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-profiler"}, + }, + }, nil}, + + {"sample6", samplePWContainer[1][12][1], pipewire.RegistryGlobal{ + ID: 6, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "6"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-metadata"}, + }, + }, nil}, + + {"sample7", samplePWContainer[1][13][1], pipewire.RegistryGlobal{ + ID: 7, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "7"}, + {Key: "module.id", Value: "6"}, + {Key: "factory.name", Value: "metadata"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Metadata}, + {Key: "factory.type.version", Value: "3"}, + }, + }, nil}, + + {"sample8", samplePWContainer[1][14][1], pipewire.RegistryGlobal{ + ID: 8, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "8"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-device-factory"}, + }, + }, nil}, + + {"sample9", samplePWContainer[1][15][1], pipewire.RegistryGlobal{ + ID: 9, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "9"}, + {Key: "module.id", Value: "8"}, + {Key: "factory.name", Value: "spa-device-factory"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Device}, + {Key: "factory.type.version", Value: "3"}, + }, + }, nil}, + + {"sample10", samplePWContainer[1][16][1], pipewire.RegistryGlobal{ + ID: 10, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "10"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-node-factory"}, + }, + }, nil}, + + {"sample11", samplePWContainer[1][17][1], pipewire.RegistryGlobal{ + ID: 11, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "11"}, + {Key: "module.id", Value: "10"}, + {Key: "factory.name", Value: "spa-node-factory"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node}, + {Key: "factory.type.version", Value: "3"}, + }, + }, nil}, + + {"sample12", samplePWContainer[1][18][1], pipewire.RegistryGlobal{ + ID: 12, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "12"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-node"}, + }, + }, nil}, + + {"sample13", samplePWContainer[1][19][1], pipewire.RegistryGlobal{ + ID: 13, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "13"}, + {Key: "module.id", Value: "12"}, + {Key: "factory.name", Value: "client-node"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_ClientNode}, + {Key: "factory.type.version", Value: "6"}, + }, + }, nil}, + + {"sample14", samplePWContainer[1][20][1], pipewire.RegistryGlobal{ + ID: 14, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "14"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-device"}, + }, + }, nil}, + + {"sample15", samplePWContainer[1][21][1], pipewire.RegistryGlobal{ + ID: 15, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "15"}, + {Key: "module.id", Value: "14"}, + {Key: "factory.name", Value: "client-device"}, + {Key: "factory.type.name", Value: "Spa:Pointer:Interface:Device"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample16", samplePWContainer[1][22][1], pipewire.RegistryGlobal{ + ID: 16, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "16"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-portal"}, + }, + }, nil}, + + {"sample17", samplePWContainer[1][23][1], pipewire.RegistryGlobal{ + ID: 17, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "17"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-access"}, + }, + }, nil}, + + {"sample18", samplePWContainer[1][24][1], pipewire.RegistryGlobal{ + ID: 18, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "18"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-adapter"}, + }, + }, nil}, + + {"sample19", samplePWContainer[1][25][1], pipewire.RegistryGlobal{ + ID: 19, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "19"}, + {Key: "module.id", Value: "18"}, + {Key: "factory.name", Value: "adapter"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node}, + {Key: "factory.type.version", Value: "3"}, + }, + }, nil}, + + {"sample20", samplePWContainer[1][26][1], pipewire.RegistryGlobal{ + ID: 20, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "20"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-link-factory"}, + }, + }, nil}, + + {"sample21", samplePWContainer[1][27][1], pipewire.RegistryGlobal{ + ID: 21, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "21"}, + {Key: "module.id", Value: "20"}, + {Key: "factory.name", Value: "link-factory"}, + {Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Link}, + {Key: "factory.type.version", Value: "3"}, + }, + }, nil}, + + {"sample22", samplePWContainer[1][28][1], pipewire.RegistryGlobal{ + ID: 22, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "22"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-session-manager"}, + }, + }, nil}, + + {"sample23", samplePWContainer[1][29][1], pipewire.RegistryGlobal{ + ID: 23, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "23"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "client-endpoint"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:ClientEndpoint"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample24", samplePWContainer[1][30][1], pipewire.RegistryGlobal{ + ID: 24, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "24"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "client-session"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:ClientSession"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample25", samplePWContainer[1][31][1], pipewire.RegistryGlobal{ + ID: 25, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "25"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "session"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:Session"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample26", samplePWContainer[1][32][1], pipewire.RegistryGlobal{ + ID: 26, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "26"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "endpoint"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:Endpoint"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample27", samplePWContainer[1][33][1], pipewire.RegistryGlobal{ + ID: 27, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "27"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "endpoint-stream"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:EndpointStream"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample28", samplePWContainer[1][34][1], pipewire.RegistryGlobal{ + ID: 28, + Permissions: pipewire.PW_FACTORY_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Factory, + Version: pipewire.PW_VERSION_FACTORY, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "28"}, + {Key: "module.id", Value: "22"}, + {Key: "factory.name", Value: "endpoint-link"}, + {Key: "factory.type.name", Value: "PipeWire:Interface:EndpointLink"}, + {Key: "factory.type.version", Value: "0"}, + }, + }, nil}, + + {"sample29", samplePWContainer[1][35][1], pipewire.RegistryGlobal{ + ID: 29, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "29"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-x11-bell"}, + }, + }, nil}, + + {"sample30", samplePWContainer[1][36][1], pipewire.RegistryGlobal{ + ID: 30, + Permissions: pipewire.PW_MODULE_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Module, + Version: pipewire.PW_VERSION_MODULE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "30"}, + {Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-jackdbus-detect"}, + }, + }, nil}, + + {"sample31", samplePWContainer[1][37][1], pipewire.RegistryGlobal{ + ID: 31, + Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK? + Type: pipewire.PW_TYPE_INTERFACE_Node, + Version: pipewire.PW_VERSION_NODE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "31"}, + {Key: "factory.id", Value: "11"}, + {Key: "priority.driver", Value: "200000"}, + {Key: "node.name", Value: "Dummy-Driver"}, + }, + }, nil}, + + {"sample32", samplePWContainer[1][38][1], pipewire.RegistryGlobal{ + ID: 32, + Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK? + Type: pipewire.PW_TYPE_INTERFACE_Node, + Version: pipewire.PW_VERSION_NODE, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "32"}, + {Key: "factory.id", Value: "11"}, + {Key: "priority.driver", Value: "190000"}, + {Key: "node.name", Value: "Freewheel-Driver"}, + }, + }, nil}, + + {"sample33", samplePWContainer[1][39][1], pipewire.RegistryGlobal{ + ID: 33, + Permissions: pipewire.PW_METADATA_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Metadata, + Version: pipewire.PW_VERSION_METADATA, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "33"}, + {Key: "metadata.name", Value: "settings"}, + }, + }, nil}, + + {"sample34", samplePWContainer[1][40][1], pipewire.RegistryGlobal{ + ID: 34, + Permissions: pipewire.PW_CLIENT_PERM_MASK, + Type: pipewire.PW_TYPE_INTERFACE_Client, + Version: pipewire.PW_VERSION_CLIENT, + Properties: &pipewire.SPADict{ + {Key: "object.serial", Value: "34"}, + {Key: "module.id", Value: "2"}, + {Key: "pipewire.protocol", Value: "protocol-native"}, + {Key: "pipewire.sec.pid", Value: "1443"}, + {Key: "pipewire.sec.uid", Value: "1000"}, + {Key: "pipewire.sec.gid", Value: "100"}, + {Key: "pipewire.sec.socket", Value: "pipewire-0-manager"}, + {Key: "pipewire.access", Value: "unrestricted"}, + {Key: "application.name", Value: "pw-container"}, + }, }, nil}, }.run(t) } diff --git a/internal/pipewire/header_test.go b/internal/pipewire/header_test.go index b7b1065..a35ed98 100644 --- a/internal/pipewire/header_test.go +++ b/internal/pipewire/header_test.go @@ -71,6 +71,216 @@ func TestHeader(t *testing.T) { Size: 0x58, Sequence: 5, FileCount: 0, }, nil}, + {"PW_REGISTRY_EVENT_GLOBAL 0", samplePWContainer[1][6][0], pipewire.Header{ + ID: 2, // this is specified by Core::GetRegistry in samplePWContainer[0][2][1] + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xc8, Sequence: 6, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 1", samplePWContainer[1][7][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xd8, Sequence: 7, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 2", samplePWContainer[1][8][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xa8, Sequence: 8, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 3", samplePWContainer[1][9][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 9, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 4", samplePWContainer[1][10][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xa0, Sequence: 10, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 5", samplePWContainer[1][11][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 11, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 6", samplePWContainer[1][12][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 12, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 7", samplePWContainer[1][13][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 13, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 8", samplePWContainer[1][14][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 14, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 9", samplePWContainer[1][15][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x178, Sequence: 15, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 10", samplePWContainer[1][16][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 16, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 11", samplePWContainer[1][17][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 17, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 12", samplePWContainer[1][18][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 18, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 13", samplePWContainer[1][19][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 19, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 14", samplePWContainer[1][20][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 20, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 15", samplePWContainer[1][21][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 21, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 16", samplePWContainer[1][22][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 22, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 17", samplePWContainer[1][23][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 23, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 18", samplePWContainer[1][24][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 24, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 19", samplePWContainer[1][25][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x160, Sequence: 25, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 20", samplePWContainer[1][26][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 26, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 21", samplePWContainer[1][27][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x168, Sequence: 27, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 22", samplePWContainer[1][28][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 28, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 23", samplePWContainer[1][29][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x178, Sequence: 29, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 24", samplePWContainer[1][30][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x178, Sequence: 30, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 25", samplePWContainer[1][31][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x168, Sequence: 31, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 26", samplePWContainer[1][32][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 32, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 27", samplePWContainer[1][33][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x178, Sequence: 33, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 28", samplePWContainer[1][34][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x170, Sequence: 34, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 29", samplePWContainer[1][35][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe0, Sequence: 35, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 30", samplePWContainer[1][36][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xe8, Sequence: 36, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 31", samplePWContainer[1][37][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x118, Sequence: 37, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 32", samplePWContainer[1][38][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x120, Sequence: 38, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 33", samplePWContainer[1][39][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0xd0, Sequence: 39, FileCount: 0, + }, nil}, + + {"PW_REGISTRY_EVENT_GLOBAL 34", samplePWContainer[1][40][0], pipewire.Header{ + ID: 2, + Opcode: pipewire.PW_REGISTRY_EVENT_GLOBAL, + Size: 0x238, Sequence: 40, FileCount: 0, + }, nil}, + {"PW_SECURITY_CONTEXT_METHOD_CREATE", []byte{ // Id 3, 0, 0, 0,