1 ### v8, implemented by >= 0.8
3 First version supported.
5 ### v9, implemented by >= 0.9.0
7 Reply for PA_COMMAND_CREATE_PLAYBACK_STREAM,
8 PA_COMMAND_CREATE_RECORD_STREAM now returns buffer_attrs that are used:
10 Four new fields in reply of PA_COMMAND_CREATE_PLAYBACK_STREAM:
17 Two new fields in reply of PA_COMMAND_CREATE_RECORD_STREAM:
22 ### v10, implemented by >= 0.9.5
26 PA_COMMAND_MOVE_SINK_INPUT
27 PA_COMMAND_MOVE_SOURCE_OUTPUT
29 SHM data transfer support
31 ### v11, implemented by >= 0.9.7
33 Reply to PA_COMMAND_GET_SINK_INPUT_INFO, PA_COMMAND_GET_SINK_INPUT_INFO_LIST gets new field at the end:
39 PA_COMMAND_SET_SINK_INPUT_MUTE
40 PA_COMMAND_SUSPEND_SINK
41 PA_COMMAND_SUSPEND_SOURCE
43 ### v12, implemented by >= 0.9.8
45 S32LE, S32BE is now known as sample spec.
47 Gained six new bool fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end:
57 Reply to these opcodes now includes:
65 New opcodes for changing buffer attrs:
67 PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR
68 PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR
70 New opcodes for changing sampling rate:
72 PA_COMMAND_UPDATE_PLAYBACK_STREAM_SAMPLE_RATE
73 PA_COMMAND_UPDATE_RECORD_STREAM_SAMPLE_RATE
75 New opcodes for notifications:
77 PA_COMMAND_PLAYBACK_STREAM_SUSPENDED
78 PA_COMMAND_CAPTURE_STREAM_SUSPENDED
79 PA_COMMAND_PLAYBACK_STREAM_MOVED
80 PA_COMMAND_CAPTURE_STREAM_MOVED
82 ### v13, implemented by >= 0.9.11
84 New fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end:
89 Replace field "name" for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM at the end:
93 Replace field "name" for PA_COMMAND_SET_CLIENT_NAME request at the end:
97 On response of PA_COMMAND_SET_CLIENT_NAME:
101 New proplist field for sink, source, sink input, source output introspection opcodes and at the end:
105 New opcodes for proplist modifications
107 PA_COMMAND_UPDATE_RECORD_STREAM_PROPLIST
108 PA_COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST
109 PA_COMMAND_UPDATE_CLIENT_PROPLIST
110 PA_COMMAND_REMOVE_RECORD_STREAM_PROPLIST
111 PA_COMMAND_REMOVE_PLAYBACK_STREAM_PROPLIST
112 PA_COMMAND_REMOVE_CLIENT_PROPLIST
114 New field for PA_COMMAND_PLAY_SAMPLE:
118 New field for PA_COMMAND_PLAY_SAMPLE response:
122 New field for PA_COMMAND_CREATE_PLAYBACK_STREAM at the end:
126 Buffer attributes for PA_COMMAND_CREATE_PLAYBACK_STREAM and
127 PA_COMMAND_CREATE_RECORD_STREAM may now be 0 for default values.
129 New field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR,
130 PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end:
132 adjust_latency (bool)
138 ### v14, implemented by >= 0.9.12
144 PA_COMMAND_CREATE_PLAYBACK_STREAM:
146 bool volume_set at the end
148 PA_COMMAND_CREATE_RECORD_STREAM, PA_COMMAND_CREATE_PLAYBACK_STREAM:
150 bool early_requests at the end
152 New field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR,
153 PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end:
155 early_requests (bool)
157 ### v15, implemented by >= 0.9.15
159 PA_COMMAND_CREATE_PLAYBACK_STREAM
161 bool muted at the end
163 PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM:
165 bool dont_inhibit_auto_suspend at the end
167 PA_COMMAND_GET_MODULE_INFO_LIST
169 remove bool auto_unload
170 add proplist at the end
174 PA_COMMAND_GET_CARD_INFO
175 PA_COMMAND_GET_CARD_INFO_LIST
176 PA_COMMAND_SET_CARD_PROFILE
178 PA_COMMAND_CLIENT_EVENT
179 PA_COMMAND_PLAYBACK_STREAM_EVENT
180 PA_COMMAND_RECORD_STREAM_EVENT
182 PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED
183 PA_COMMAND_RECORD_BUFFER_ATTR_CHANGED
185 ### v16, implemented by >= 0.9.15
189 PA_COMMAND_SET_SINK_PORT
190 PA_COMMAND_SET_SOURCE_PORT
192 ## v17, implemented by >= 0.9.20
194 new flag at end of CREATE_PLAYBACK_STREAM:
198 ## v18, implemented by >= 0.9.22
200 new flag at end of CREATE_PLAYBACK_STREAM:
204 ## v19, implemented by >= 0.9.22
206 New flag at the end of sink input and source output introspection data:
210 ## v20, implemented by >= 1.0
212 Two new flags at the end of sink input introspection data:
217 ## v21, implemented by >= 1.0
219 Changes for format negotiation in the extended API.
221 New fields PA_COMMAND_CREATE_PLAYBACK_STREAM:
228 One new field in reply from PA_COMMAND_CREATE_PLAYBACK_STREAM:
232 New fields in reply from PA_COMMAND_GET_SINK_INFO (and thus
233 PA_COMMAND_GET_SINK_INFO_LIST)
240 One new field in reply from PA_COMMAND_GET_SINK_INPUT_INFO (and thus
241 PA_COMMAND_GET_SINK_INPUT_INFO_LIST)
245 ## v22, implemented by >= 1.0
247 New fields PA_COMMAND_CREATE_RECORD_STREAM:
260 One new field in reply from PA_COMMAND_CREATE_RECORD_STREAM:
264 New fields in reply from PA_COMMAND_GET_SOURCE_INFO (and thus
265 PA_COMMAND_GET_SOURCE_INFO_LIST)
272 Five new fields in reply from PA_COMMAND_GET_SOURCE_OUTPUT_INFO (and thus
273 PA_COMMAND_GET_SOURCE_OUTPUT_INFO_LIST)
281 ## v23, implemented by >= 1.0
283 New field in PA_COMMAND_UNDERFLOW:
287 ## v24, implemented by >= 2.0
289 New field in all commands that send/receive port introspection data
290 (PA_COMMAND_GET_(SOURCE|SINK)_INFO,
291 PA_COMMAND_GET_(SOURCE|SINK)_INFO_LIST):
295 The field is added once for every port.
297 ## v25, implemented by >= 2.0
299 When port availability changes, send a subscription event for the
302 ## v26, implemented by >= 2.0
304 In reply from PA_COMMAND_GET_CARD_INFO (and thus
305 PA_COMMAND_GET_CARD_INFO_LIST), the following is added:
309 ...followed by n_ports extended port entries, which look like this:
318 string profile_name_1
320 string profile_name_n
322 Profile names must match earlier sent profile names for the same card.
324 ## v27, implemented by >= 3.0
327 PA_COMMAND_SET_PORT_LATENCY_OFFSET
329 New field in the card commands that send/receive port introspection data
330 PA_COMMAND_GET_CARD_INFO(_LIST)):
332 int64_t latency_offset
334 The field is added once for every port.
336 ## v28, implemented by >= 4.0
338 New value for encoding format type in format_info
339 PA_COMMAND_CREATE_(PLAYBACK|RECORDING)_STREAM and its reply,
340 In reply from PA_COMMAND_GET_(SOURCE|SOURCE_OUTPUT|SINK|SINK_INPUT)_INFO[_LIST],
341 SUBCOMMAND_SAVE_FORMATS, in reply from SUBCOMMAND_READ_FORMATS[_ALL]
343 (uint8_t ) PA_ENCODING_MPEG2_AAC_IEC61937 := 6
345 ## v29, implemented by >= 5.0
347 New field in all commands that send/receive profile introspection data
348 (PA_COMMAND_GET_CARD_INFO)
352 The field is added once for every profile.
354 ## v30, implemented by >= 6.0
356 A new protocol mechanism supported: Two ringbuffers in shared memory.
357 Pulseaudio fdsem (wrappers around event file descriptors) are used for
359 The protocol has a new SHM flag telling whether a SHM memblock is writable
362 PA_COMMAND_ENABLE_SRBCHANNEL
363 First sent from server to client, tells the client to start listening on
364 the additional SHM ringbuffer channel.
365 This command also has ancillary data (two eventfds attached to it).
366 Must be directly followed by a memblock which is the ringbuffer memory.
367 When memblock is received by the client, it acks by sending
368 PA_COMMAND_ENABLE_SRBCHANNEL back (without ancillary or memblock data).
370 PA_COMMAND_DISABLE_SRBCHANNEL
371 Tells the client to stop listening on the additional SHM ringbuffer channel.
372 Acked by client by sending PA_COMMAND_DISABLE_SRBCHANNEL back.
374 ## v31, implemented by >= 9.0
376 Memfd shared-memory support is now added to PulseAudio as an opt-in feature.
377 Add 'enable-memfd=yes' to daemon's configuration to use memfds, instead of
378 POSIX shm, by default.
380 Memfd is a simple memory sharing mechanism, added by the systemd/kdbus
381 developers, to share pages between processes in an anonymous, no global
382 registry needed, no mount-point required, relatively secure, manner.
384 PulseAudio memfd support builds the necessary (but not yet sufficient)
385 groundwork for a better integration with per-app containers (e.g. xdg-app)
387 For further details on memfds in general, please check:
389 https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
390 Archived at: http://www.webcitation.org/6gnHTy9Kr
392 Moreover, for both client and server, the second most-significant bit of
393 the version tag is now used to flag memfd SHM support. On the way forward,
394 the two most-significant _bytes_ of the version tag are now also reserved
397 PA_COMMAND_REGISTER_MEMFD_SHMID
398 New command that can be sent both ways, from client to server and vice versa.
399 This is needed to transfer a memfd pool's blocks without passing its fd every
400 time, thus minimizing overhead and avoiding fd leaks.
402 The registration command above sends a packet with the pool's memfd fd as
403 ancillary data. Such packet has an ID that uniquely identifies the pool's
404 memfd memory area. Upon arrival, the other end (client or server) creates a
405 permanent ID<->memfd mapping.
407 By doing so, there's need to reference the pool's memfd file descriptor any
408 further -- just its ID. Thus both endpoints can then quickly and safely
409 close their memfd file descriptors.
411 ## v32, implemented by >= 10.0
413 Enable memfd transport by default.
415 This protocol bump was only created to mark 9.0 clients. Although they
416 support memfd transport, such older clients has an iochannel bug that would
417 break memfd audio if they're run in 32-bit mode over a 64-bit kernel. Thus
418 influence these buggy libraries to use POSIX shared memory, by signalling
419 memfd support only to 10.0+ clients.
421 Check commit 451d1d676237c81 for further details.
423 ## v33, implemented by >= 13.0
425 Added two values to the pa_encoding_t enum:
427 PA_ENCODING_TRUEHD_IEC61937 := 7
428 PA_ENCODING_DTSHD_IEC61937 := 8
430 ## v34, implemented by >= 14.0
432 New fields in the port introspection data (duplicated for all port types:
433 sink, source and card ports):
435 string availability_group
438 ## v35, implemented by >= 15.0
440 Added new command for communication with objects.
442 PA_COMMAND_SEND_OBJECT_MESSAGE:
443 sends a message to an object identified by an object path
446 string object_path - unique path identifying the object
447 string message - message name
448 string message_parameters - additional parameters if required (may be
449 NULL, which should be treated the same as an
452 The command returns a string, which may be empty or NULL (NULL should be
453 treated the same as an empty string).
455 #### If you just changed the protocol, read this
456 ## module-tunnel depends on the sink/source/sink-input/source-input protocol
457 ## internals, so if you changed these, you might have broken module-tunnel.
458 ## Don't forget to test module-tunnel-{source,sink} when pushing protocol