format_info format1
...
format_info formatn
+ volume
+ bool muted
+ bool volume_set
+ bool muted_set
+ bool relative_volume
+ bool passthrough
One new field in reply from PA_COMMAND_CREATE_RECORD_STREAM:
format_info format1
...
format_info formatn
+
+Five new fields in reply from PA_COMMAND_GET_SOURCE_OUTPUT_INFO (and thus
+PA_COMMAND_GET_SOURCE_OUTPUT_INFO_LIST)
+
+ volume
+ bool mute
+ bool has_volume
+ bool volume_writable
+ format_info format
+
+## v23, implemented by >= 1.0
+
+New field in PA_COMMAND_UNDERFLOW:
+
+ int64_t index
+
+## v24, implemented by >= 2.0
+
+New field in all commands that send/receive port introspection data
+(PA_COMMAND_GET_(SOURCE|SINK)_OUTPUT_INFO,
+PA_COMMAND_GET_(SOURCE|SINK)_OUTPUT_INFO_LIST):
+
+ uint32_t available
+
+The field is added once for every port.
+
+## v25, implemented by >= 2.0
+
+When port availability changes, send a subscription event for the
+owning card.
+
+## v26, implemented by >= 2.0
+
+In reply from PA_COMMAND_GET_CARD_INFO (and thus
+PA_COMMAND_GET_CARD_INFO_LIST), the following is added:
+
+ uint32_t n_ports
+
+...followed by n_ports extended port entries, which look like this:
+
+ string name
+ string description
+ uint32_t priority
+ uint32_t available
+ uint8_t direction
+ proplist
+ uint32_t n_profiles
+ string profile_name_1
+ ...
+ string profile_name_n
+
+Profile names must match earlier sent profile names for the same card.
+
+
+#### If you just changed the protocol, read this
+## module-tunnel depends on the sink/source/sink-input/source-input protocol
+## internals, so if you changed these, you might have broken module-tunnel.
+## Don't forget to test module-tunnel-{source,sink} when pushing protocol
+## changes.