### v8, implemented by >= 0.8

First version supported.

### v9, implemented by >= 0.9.0

Reply for PA_COMMAND_CREATE_PLAYBACK_STREAM,
PA_COMMAND_CREATE_RECORD_STREAM now returns buffer_attrs that are used:

Four new fields in reply of PA_COMMAND_CREATE_PLAYBACK_STREAM:

   maxlength
   tlength
   prebuf
   minreq

Two new fields in reply of PA_COMMAND_CREATE_RECORD_STREAM:

   maxlength
   fragsize

### v10, implemented by >= 0.9.5

New opcodes:

 PA_COMMAND_MOVE_SINK_INPUT
 PA_COMMAND_MOVE_SOURCE_OUTPUT

SHM data transfer support

### v11, implemented by >= 0.9.7

Reply to to PA_COMMAND_GET_SINK_INPUT_INFO, PA_COMMAND_GET_SINK_INPUT_INFO_LIST gets new field at the end:

 mute

New opcodes:

 PA_COMMAND_SET_SINK_INPUT_MUTE
 PA_COMMAND_SUSPEND_SINK
 PA_COMMAND_SUSPEND_SOURCE

### v12, implemented by >= 0.9.8

S32LE, S32BE is now known as sample spec.

Gained six new bool fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end:

 no_remap_channels
 no_remix_channels
 fix_format
 fix_rate
 fix_channels
 no_move
 variable_rate

Reply to these opcodes now includes:

 sample_spec
 channel_map
 device_index
 device_name
 suspended

New opcodes for changing buffer attrs:

 PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR
 PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR

New opcodes for changing sampling rate:

 PA_COMMAND_UPDATE_PLAYBACK_STREAM_SAMPLE_RATE
 PA_COMMAND_UPDATE_RECORD_STREAM_SAMPLE_RATE

New opcodes for notifications:

 PA_COMMAND_PLAYBACK_STREAM_SUSPENDED
 PA_COMMAND_CAPTURE_STREAM_SUSPENDED
 PA_COMMAND_PLAYBACK_STREAM_MOVED
 PA_COMMAND_CAPTURE_STREAM_MOVED

### v13, implemented by >= 0.9.11

New fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end:

 peak_detect (bool)
 adjust_latency  (bool)

Replace field "name" for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM at the end:

 proplist

Replace field "name" for PA_COMMAND_SET_CLIENT_NAME request at the end:

 proplist

On response of PA_COMMAND_SET_CLIENT_NAME:

 client_index

New proplist field for sink, source, sink input, source output introspection opcodes and at the end:

 proplist

New opcodes for proplist modifications

  PA_COMMAND_UPDATE_RECORD_STREAM_PROPLIST
  PA_COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST
  PA_COMMAND_UPDATE_CLIENT_PROPLIST
  PA_COMMAND_REMOVE_RECORD_STREAM_PROPLIST
  PA_COMMAND_REMOVE_PLAYBACK_STREAM_PROPLIST
  PA_COMMAND_REMOVE_CLIENT_PROPLIST

New field for PA_COMMAND_PLAY_SAMPLE:

  proplist

New field for PA_COMMAND_PLAY_SAMPLE response:

  idx

New field for PA_COMMAND_CREATE_PLAYBACK_STREAM at the end:

  start_muted

Buffer attributes for PA_COMMAND_CREATE_PLAYBACK_STREAM and
PA_COMMAND_CREATE_RECORD_STREAM may now be 0 for default values.

New field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR,
PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end:

  adjust_latency (bool)

new message:

  PA_COMMAND_STARTED

### v14, implemented by >= 0.9.12

new message:

  PA_COMMAND_EXTENSION

PA_COMMAND_CREATE_PLAYBACK_STREAM:

  bool volume_set at the end

PA_COMMAND_CREATE_RECORD_STREAM, PA_COMMAND_CREATE_PLAYBACK_STREAM:

  bool early_requests at the end

New field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR,
PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end:

  early_requests (bool)

### v15, implemented by >= 0.9.15

PA_COMMAND_CREATE_PLAYBACK_STREAM

  bool muted at the end

PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM:

  bool dont_inhibit_auto_suspend at the end

PA_COMMAND_GET_MODULE_INFO_LIST

  remove bool auto_unload
  add proplist at the end

new messages:

  PA_COMMAND_GET_CARD_INFO
  PA_COMMAND_GET_CARD_INFO_LIST
  PA_COMMAND_SET_CARD_PROFILE

  PA_COMMAND_CLIENT_EVENT
  PA_COMMAND_PLAYBACK_STREAM_EVENT
  PA_COMMAND_RECORD_STREAM_EVENT

  PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED
  PA_COMMAND_RECORD_BUFFER_ATTR_CHANGED

### v16, implemented by >= 0.9.15

new messages:

  PA_COMMAND_SET_SINK_PORT
  PA_COMMAND_SET_SOURCE_PORT

## v17, implemented by >= 0.9.20

new flag at end of CREATE_PLAYBACK_STREAM:

    bool relative_volume

## v18, implemented by >= 0.9.22

new flag at end of CREATE_PLAYBACK_STREAM:

    bool passthrough

## v19, implemented by >= 0.9.22

New flag at the end of sink input and source output introspection data:

    bool corked

## v20, implemented by >= 1.0

Two new flags at the end of sink input introspection data:

    bool has_volume
    bool volume_writable

## v21, implemented by >= 1.0

Changes for format negotiation in the extended API.

New fields PA_COMMAND_CREATE_PLAYBACK_STREAM:

    uint8_t n_formats
    format_info format1
    ...
    format_info formatn

One new field in reply from PA_COMMAND_CREATE_PLAYBACK_STREAM:

    format_info format

New fields in reply from PA_COMMAND_GET_SINK_INFO (and thus
PA_COMMAND_GET_SINK_INFO_LIST)

    uint8_t n_formats
    format_info format1
    ...
    format_info formatn

One new field in reply from PA_COMMAND_GET_SINK_INPUT_INFO (and thus
PA_COMMAND_GET_SINK_INPUT_INFO_LIST)

    format_info format

## v22, implemented by >= 1.0

New fields PA_COMMAND_CREATE_RECORD_STREAM:

    uint8_t n_formats
    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 format

New fields in reply from PA_COMMAND_GET_SOURCE_INFO (and thus
PA_COMMAND_GET_SOURCE_INFO_LIST)

    uint8_t n_formats
    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)_INFO,
PA_COMMAND_GET_(SOURCE|SINK)_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.

## v27, implemented by >= 3.0

New opcodes:
    PA_COMMAND_SET_PORT_LATENCY_OFFSET

New field in the card commands that send/receive port introspection data
PA_COMMAND_GET_CARD_INFO(_LIST)):

    int64_t latency_offset

The field is added once for every port.

## v28, implemented by >= 4.0

New value for encoding format type in format_info
PA_COMMAND_CREATE_(PLAYBACK|RECORDING)_STREAM and its reply,
In reply from PA_COMMAND_GET_(SOURCE|SOURCE_OUTPUT|SINK|SINK_INPUT)_INFO[_LIST],
SUBCOMMAND_SAVE_FORMATS, in reply from SUBCOMMAND_READ_FORMATS[_ALL]

    (uint8_t ) PA_ENCODING_MPEG2_AAC_IEC61937 := 6

## v29, implemented by >= 5.0
#
New field in all commands that send/receive profile introspection data
(PA_COMMAND_GET_CARD_INFO)

    uint32 available

The field is added once for every profile.

#### 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.
