[pulseaudio-discuss] [PATCH 0/2] module-tunnel-source broken - Something went wrong at protocol version 22 :-(
David Henningsson
david.henningsson at canonical.com
Mon Jan 30 07:47:28 PST 2012
I'm trying to set up a module-tunnel-source, but it fails with a
protocol error.
Here's the analysis.
According to spec:
<---
## v22, implemented by >= 1.0
New fields PA_COMMAND_CREATE_RECORD_STREAM:
uint8_t n_formats
format_info format1
...
format_info formatn
--->
1) According to code in module-tunnel.c, the code for sending n_formats
is missing.
2) More interesting is that according to code in protocol-native.c, not
only does PA_COMMAND_CREATE_RECORD_STREAM assume the above to come in,
but also these fields:
<---
if (pa_tagstruct_get_cvolume(t, &volume) < 0 ||
pa_tagstruct_get_boolean(t, &muted) < 0 ||
pa_tagstruct_get_boolean(t, &volume_set) < 0 ||
pa_tagstruct_get_boolean(t, &muted_set) < 0 ||
pa_tagstruct_get_boolean(t, &relative_volume) < 0 ||
pa_tagstruct_get_boolean(t, &passthrough) < 0) {
--->
...which is consistent with the code in src/pulse/stream.c. These are
not documented in the PROTOCOL file.
3) Actually, they remotely correspond to something in the documentation
for protocol v22 as well:
<---
Five new fields in reply from PA_COMMAND_GET_SOURCE_OUTPUT_INFO (and
thus PA_COMMAND_GET_SOURCE_OUTPUT_INFO_LIST)
format_info format
volume
bool mute
bool has_volume
bool volume_writable
--->
In the code, the format_info comes last instead of first. :-/
This is a problem both in PulseAudio 1.x and in git master. (And thus in
Ubuntu 11.10 and Ubuntu 12.04.)
After some thoughts, I think the wisest course of action is to fixup
module-tunnel to send more fields, and fixup the documentation to match
the code. I'll send some patches for this. Next question is if we should
also consider backwards compatibility with 1.x's broken implementation
of module-tunnel-source...?
--
David Henningsson, Canonical Ltd.
http://launchpad.net/~diwic
More information about the pulseaudio-discuss
mailing list