This patch set fixes this release blocker bug: https://bugs.freedesktop.org/show_bug.cgi?id=68952 The most important bits are pa_format_info_to_sample_spec2() and pa_format_info_from_sample_spec2(), which enable pa_sink_input_new() and pa_source_output_new() to interpret missing PCM parameters as a request to decide those parameters at the server end. When implementing those, I wanted to use helper functions for getting the parameters from a pa_format_info object, so I wrote those helper functions first. When validating the individual parameter values, I also wanted to use validation functions for that, so the patch set begins with the addition of some simple validation functions. At the end of the patch set there are documentation patches that add some explanation about how to manage the PCM parameter configuration with the pa_format_info interface. Tanu Kaskinen (16): Add pa_sample_format_valid() Add pa_sample_rate_valid() Add pa_channels_valid() Move pa_format_info_to_sample_spec_fake() to core-format core-format: Add pa_format_info_get_sample_format() core-format: Add pa_format_info_get_rate() core-format: Add pa_format_info_get_channels() core-format: Add pa_format_info_get_channel_map() format: Simplify pa_format_info_to_sample_spec() core-format: Add pa_format_info_to_sample_spec2() core-format: Add pa_format_info_from_sample_spec2() sink-input, source-output: Do routing related validity checks immediately after routing sink-input, source-output: Don't support clients that configure volume but not channels sink-input, source-output: Interpret missing PCM parameters in format info as a request to decide those parameters at the server end def, format: Document how to leave PCM parameters to be decided by the server stream: Mention pa_stream_new_extended() in the high-level stream creation documentation src/Makefile.am | 1 + src/daemon/daemon-conf.c | 6 +- src/map-file | 3 + src/modules/alsa/alsa-ucm.c | 10 +- src/modules/bluetooth/module-bluez4-device.c | 5 +- src/modules/dbus/iface-core.c | 10 +- src/modules/jack/module-jack-sink.c | 3 +- src/modules/jack/module-jack-source.c | 3 +- src/modules/jack/module-jackdbus-detect.c | 2 +- src/pulse/channelmap.c | 8 +- src/pulse/def.h | 38 +++- src/pulse/format.c | 67 ++----- src/pulse/format.h | 56 +++++- src/pulse/sample.c | 29 +-- src/pulse/sample.h | 10 ++ src/pulse/stream.c | 2 +- src/pulse/stream.h | 11 +- src/pulse/volume.c | 5 +- src/pulsecore/core-format.c | 252 +++++++++++++++++++++++++++ src/pulsecore/core-format.h | 81 +++++++++ src/pulsecore/mix.c | 6 +- src/pulsecore/modargs.c | 13 +- src/pulsecore/protocol-native.c | 2 +- src/pulsecore/resampler.c | 12 +- src/pulsecore/sconv.c | 32 +--- src/pulsecore/sink-input.c | 86 +++------ src/pulsecore/sink.c | 3 +- src/pulsecore/source-output.c | 83 +++------ src/pulsecore/source.c | 3 +- src/pulsecore/svolume_c.c | 6 +- 30 files changed, 569 insertions(+), 279 deletions(-) create mode 100644 src/pulsecore/core-format.c create mode 100644 src/pulsecore/core-format.h -- 1.8.3.1