mirror of
https://github.com/pulseaudio/pulseaudio.git
synced 2024-11-24 02:14:14 +08:00
651a3d108e
Required for the addition of new pa_encoding_t values.
435 lines
11 KiB
Plaintext
435 lines
11 KiB
Plaintext
### 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 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.
|
|
|
|
## v30, implemented by >= 6.0
|
|
#
|
|
A new protocol mechanism supported: Two ringbuffers in shared memory.
|
|
Pulseaudio fdsem (wrappers around event file descriptors) are used for
|
|
signalling new data.
|
|
The protocol has a new SHM flag telling whether a SHM memblock is writable
|
|
by both sides.
|
|
|
|
PA_COMMAND_ENABLE_SRBCHANNEL
|
|
First sent from server to client, tells the client to start listening on
|
|
the additional SHM ringbuffer channel.
|
|
This command also has ancillary data (two eventfds attached to it).
|
|
Must be directly followed by a memblock which is the ringbuffer memory.
|
|
When memblock is received by the client, it acks by sending
|
|
PA_COMMAND_ENABLE_SRBCHANNEL back (without ancillary or memblock data).
|
|
|
|
PA_COMMAND_DISABLE_SRBCHANNEL
|
|
Tells the client to stop listening on the additional SHM ringbuffer channel.
|
|
Acked by client by sending PA_COMMAND_DISABLE_SRBCHANNEL back.
|
|
|
|
## v31, implemented by >= 9.0
|
|
|
|
Memfd shared-memory support is now added to PulseAudio as an opt-in feature.
|
|
Add 'enable-memfd=yes' to daemon's configuration to use memfds, instead of
|
|
POSIX shm, by default.
|
|
|
|
Memfd is a simple memory sharing mechanism, added by the systemd/kdbus
|
|
developers, to share pages between processes in an anonymous, no global
|
|
registry needed, no mount-point required, relatively secure, manner.
|
|
|
|
PulseAudio memfd support builds the necessary (but not yet sufficient)
|
|
groundwork for a better integration with per-app containers (e.g. xdg-app)
|
|
|
|
For further details on memfds in general, please check:
|
|
|
|
https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/
|
|
Archived at: http://www.webcitation.org/6gnHTy9Kr
|
|
|
|
Moreover, for both client and server, the second most-significant bit of
|
|
the version tag is now used to flag memfd SHM support. On the way forward,
|
|
the two most-significant _bytes_ of the version tag are now also reserved
|
|
for flags.
|
|
|
|
PA_COMMAND_REGISTER_MEMFD_SHMID
|
|
New command that can be sent both ways, from client to server and vice versa.
|
|
This is needed to transfer a memfd pool's blocks without passing its fd every
|
|
time, thus minimizing overhead and avoiding fd leaks.
|
|
|
|
The registration command above sends a packet with the pool's memfd fd as
|
|
ancillary data. Such packet has an ID that uniquely identifies the pool's
|
|
memfd memory area. Upon arrival, the other end (client or server) creates a
|
|
permanent ID<->memfd mapping.
|
|
|
|
By doing so, there's need to reference the pool's memfd file descriptor any
|
|
further -- just its ID. Thus both endpoints can then quickly and safely
|
|
close their memfd file descriptors.
|
|
|
|
## v32, implemented by >= 10.0
|
|
|
|
Enable memfd transport by default.
|
|
|
|
This protocol bump was only created to mark 9.0 clients. Although they
|
|
support memfd transport, such older clients has an iochannel bug that would
|
|
break memfd audio if they're run in 32-bit mode over a 64-bit kernel. Thus
|
|
influence these buggy libraries to use POSIX shared memory, by signalling
|
|
memfd support only to 10.0+ clients.
|
|
|
|
Check commit 451d1d676237c81 for further details.
|
|
|
|
## v33, implemented by >= 13.0
|
|
|
|
Added two values to the pa_encoding_t enum:
|
|
|
|
PA_ENCODING_TRUEHD_IEC61937 := 7
|
|
PA_ENCODING_DTSHD_IEC61937 := 8
|
|
|
|
#### 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.
|