diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-12-14 09:06:44 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-12-14 09:06:44 +0900 |
| commit | 00a5bdf006ba800e0797ff4c2b732e5df4fa28ff (patch) | |
| tree | 1d3c8169e2801f1332ca217a0545a2454efc3498 /internal/pipewire | |
| parent | a27dfdc058caf4ca0578a7cf98282c1998c94e6b (diff) | |
internal/pipewire: do not emit None for spa_dict
Turns out the PipeWire server does not expect a value of type None here at all.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire')
| -rw-r--r-- | internal/pipewire/core_test.go | 13 | ||||
| -rw-r--r-- | internal/pipewire/pod.go | 18 |
2 files changed, 11 insertions, 20 deletions
diff --git a/internal/pipewire/core_test.go b/internal/pipewire/core_test.go index 7785a74f..39fbcd67 100644 --- a/internal/pipewire/core_test.go +++ b/internal/pipewire/core_test.go @@ -311,7 +311,7 @@ func TestCoreCreateObject(t *testing.T) { encodingTestCases[pipewire.CoreCreateObject, *pipewire.CoreCreateObject]{ {"sample", []byte{ - /* size: rest of data */ 0x70, 0, 0, 0, + /* size: rest of data */ 0x80, 0, 0, 0, /* type: Struct */ 0xe, 0, 0, 0, /* size: 0x13 bytes */ 0x13, 0, 0, 0, @@ -343,8 +343,13 @@ func TestCoreCreateObject(t *testing.T) { /* value: 3 */ 3, 0, 0, 0, /* padding */ 0, 0, 0, 0, - /* size */ 0, 0, 0, 0, - /* type: None */ 1, 0, 0, 0, + /* size */ 0x10, 0, 0, 0, + /* type: Struct */ 0xe, 0, 0, 0, + + /* size: 4 bytes */ 4, 0, 0, 0, + /* type: Int */ 4, 0, 0, 0, + /* value: 0 */ 0, 0, 0, 0, + /* padding */ 0, 0, 0, 0, /* size: 4 bytes */ 4, 0, 0, 0, /* type: Int */ 4, 0, 0, 0, @@ -354,7 +359,7 @@ func TestCoreCreateObject(t *testing.T) { FactoryName: "spa-device-factory", Type: pipewire.PW_TYPE_INTERFACE_Device, Version: pipewire.PW_VERSION_FACTORY, - Properties: new(pipewire.SPADict), + Properties: &pipewire.SPADict{}, NewID: 0xbad, }, nil}, }.run(t) diff --git a/internal/pipewire/pod.go b/internal/pipewire/pod.go index caf83fd0..7cfafc87 100644 --- a/internal/pipewire/pod.go +++ b/internal/pipewire/pod.go @@ -524,9 +524,8 @@ type SPADict []SPADictItem // Size satisfies [KnownSize] with a value computed at runtime. func (d *SPADict) Size() Word { - if *d == nil { - // None type prefix with zero-length body - return SizePrefix + if d == nil { + return 0 } // struct prefix, NItems value @@ -541,11 +540,6 @@ func (d *SPADict) Size() Word { // MarshalPOD satisfies [PODMarshaler] as [SPADict] violates the POD type system. func (d *SPADict) MarshalPOD(data []byte) ([]byte, error) { return appendInner(data, func(dataPrefix []byte) (data []byte, err error) { - if *d == nil { - data = SPA_TYPE_None.append(dataPrefix) - return - } - data = SPA_TYPE_Struct.append(dataPrefix) if data, err = MarshalAppend(data, Int(len(*d))); err != nil { return @@ -565,14 +559,6 @@ func (d *SPADict) MarshalPOD(data []byte) ([]byte, error) { // UnmarshalPOD satisfies [PODUnmarshaler] as [SPADict] violates the POD type system. func (d *SPADict) UnmarshalPOD(data []byte) (Word, error) { var wireSize Word - - if ok, err := unmarshalHandleNone(&data, &wireSize); err != nil { - return wireSize, err - } else if ok { - *d = nil - return wireSize, nil - } - if err := unmarshalCheckTypeBounds(&data, SPA_TYPE_Struct, &wireSize); err != nil { return wireSize, err } |
