153a5a1b3Sopenharmony_ci### v8, implemented by >= 0.8 253a5a1b3Sopenharmony_ci 353a5a1b3Sopenharmony_ciFirst version supported. 453a5a1b3Sopenharmony_ci 553a5a1b3Sopenharmony_ci### v9, implemented by >= 0.9.0 653a5a1b3Sopenharmony_ci 753a5a1b3Sopenharmony_ciReply for PA_COMMAND_CREATE_PLAYBACK_STREAM, 853a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_RECORD_STREAM now returns buffer_attrs that are used: 953a5a1b3Sopenharmony_ci 1053a5a1b3Sopenharmony_ciFour new fields in reply of PA_COMMAND_CREATE_PLAYBACK_STREAM: 1153a5a1b3Sopenharmony_ci 1253a5a1b3Sopenharmony_ci maxlength 1353a5a1b3Sopenharmony_ci tlength 1453a5a1b3Sopenharmony_ci prebuf 1553a5a1b3Sopenharmony_ci minreq 1653a5a1b3Sopenharmony_ci 1753a5a1b3Sopenharmony_ciTwo new fields in reply of PA_COMMAND_CREATE_RECORD_STREAM: 1853a5a1b3Sopenharmony_ci 1953a5a1b3Sopenharmony_ci maxlength 2053a5a1b3Sopenharmony_ci fragsize 2153a5a1b3Sopenharmony_ci 2253a5a1b3Sopenharmony_ci### v10, implemented by >= 0.9.5 2353a5a1b3Sopenharmony_ci 2453a5a1b3Sopenharmony_ciNew opcodes: 2553a5a1b3Sopenharmony_ci 2653a5a1b3Sopenharmony_ci PA_COMMAND_MOVE_SINK_INPUT 2753a5a1b3Sopenharmony_ci PA_COMMAND_MOVE_SOURCE_OUTPUT 2853a5a1b3Sopenharmony_ci 2953a5a1b3Sopenharmony_ciSHM data transfer support 3053a5a1b3Sopenharmony_ci 3153a5a1b3Sopenharmony_ci### v11, implemented by >= 0.9.7 3253a5a1b3Sopenharmony_ci 3353a5a1b3Sopenharmony_ciReply to PA_COMMAND_GET_SINK_INPUT_INFO, PA_COMMAND_GET_SINK_INPUT_INFO_LIST gets new field at the end: 3453a5a1b3Sopenharmony_ci 3553a5a1b3Sopenharmony_ci mute 3653a5a1b3Sopenharmony_ci 3753a5a1b3Sopenharmony_ciNew opcodes: 3853a5a1b3Sopenharmony_ci 3953a5a1b3Sopenharmony_ci PA_COMMAND_SET_SINK_INPUT_MUTE 4053a5a1b3Sopenharmony_ci PA_COMMAND_SUSPEND_SINK 4153a5a1b3Sopenharmony_ci PA_COMMAND_SUSPEND_SOURCE 4253a5a1b3Sopenharmony_ci 4353a5a1b3Sopenharmony_ci### v12, implemented by >= 0.9.8 4453a5a1b3Sopenharmony_ci 4553a5a1b3Sopenharmony_ciS32LE, S32BE is now known as sample spec. 4653a5a1b3Sopenharmony_ci 4753a5a1b3Sopenharmony_ciGained six new bool fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end: 4853a5a1b3Sopenharmony_ci 4953a5a1b3Sopenharmony_ci no_remap_channels 5053a5a1b3Sopenharmony_ci no_remix_channels 5153a5a1b3Sopenharmony_ci fix_format 5253a5a1b3Sopenharmony_ci fix_rate 5353a5a1b3Sopenharmony_ci fix_channels 5453a5a1b3Sopenharmony_ci no_move 5553a5a1b3Sopenharmony_ci variable_rate 5653a5a1b3Sopenharmony_ci 5753a5a1b3Sopenharmony_ciReply to these opcodes now includes: 5853a5a1b3Sopenharmony_ci 5953a5a1b3Sopenharmony_ci sample_spec 6053a5a1b3Sopenharmony_ci channel_map 6153a5a1b3Sopenharmony_ci device_index 6253a5a1b3Sopenharmony_ci device_name 6353a5a1b3Sopenharmony_ci suspended 6453a5a1b3Sopenharmony_ci 6553a5a1b3Sopenharmony_ciNew opcodes for changing buffer attrs: 6653a5a1b3Sopenharmony_ci 6753a5a1b3Sopenharmony_ci PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR 6853a5a1b3Sopenharmony_ci PA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR 6953a5a1b3Sopenharmony_ci 7053a5a1b3Sopenharmony_ciNew opcodes for changing sampling rate: 7153a5a1b3Sopenharmony_ci 7253a5a1b3Sopenharmony_ci PA_COMMAND_UPDATE_PLAYBACK_STREAM_SAMPLE_RATE 7353a5a1b3Sopenharmony_ci PA_COMMAND_UPDATE_RECORD_STREAM_SAMPLE_RATE 7453a5a1b3Sopenharmony_ci 7553a5a1b3Sopenharmony_ciNew opcodes for notifications: 7653a5a1b3Sopenharmony_ci 7753a5a1b3Sopenharmony_ci PA_COMMAND_PLAYBACK_STREAM_SUSPENDED 7853a5a1b3Sopenharmony_ci PA_COMMAND_CAPTURE_STREAM_SUSPENDED 7953a5a1b3Sopenharmony_ci PA_COMMAND_PLAYBACK_STREAM_MOVED 8053a5a1b3Sopenharmony_ci PA_COMMAND_CAPTURE_STREAM_MOVED 8153a5a1b3Sopenharmony_ci 8253a5a1b3Sopenharmony_ci### v13, implemented by >= 0.9.11 8353a5a1b3Sopenharmony_ci 8453a5a1b3Sopenharmony_ciNew fields for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM request at the end: 8553a5a1b3Sopenharmony_ci 8653a5a1b3Sopenharmony_ci peak_detect (bool) 8753a5a1b3Sopenharmony_ci adjust_latency (bool) 8853a5a1b3Sopenharmony_ci 8953a5a1b3Sopenharmony_ciReplace field "name" for PA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM at the end: 9053a5a1b3Sopenharmony_ci 9153a5a1b3Sopenharmony_ci proplist 9253a5a1b3Sopenharmony_ci 9353a5a1b3Sopenharmony_ciReplace field "name" for PA_COMMAND_SET_CLIENT_NAME request at the end: 9453a5a1b3Sopenharmony_ci 9553a5a1b3Sopenharmony_ci proplist 9653a5a1b3Sopenharmony_ci 9753a5a1b3Sopenharmony_ciOn response of PA_COMMAND_SET_CLIENT_NAME: 9853a5a1b3Sopenharmony_ci 9953a5a1b3Sopenharmony_ci client_index 10053a5a1b3Sopenharmony_ci 10153a5a1b3Sopenharmony_ciNew proplist field for sink, source, sink input, source output introspection opcodes and at the end: 10253a5a1b3Sopenharmony_ci 10353a5a1b3Sopenharmony_ci proplist 10453a5a1b3Sopenharmony_ci 10553a5a1b3Sopenharmony_ciNew opcodes for proplist modifications 10653a5a1b3Sopenharmony_ci 10753a5a1b3Sopenharmony_ci PA_COMMAND_UPDATE_RECORD_STREAM_PROPLIST 10853a5a1b3Sopenharmony_ci PA_COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST 10953a5a1b3Sopenharmony_ci PA_COMMAND_UPDATE_CLIENT_PROPLIST 11053a5a1b3Sopenharmony_ci PA_COMMAND_REMOVE_RECORD_STREAM_PROPLIST 11153a5a1b3Sopenharmony_ci PA_COMMAND_REMOVE_PLAYBACK_STREAM_PROPLIST 11253a5a1b3Sopenharmony_ci PA_COMMAND_REMOVE_CLIENT_PROPLIST 11353a5a1b3Sopenharmony_ci 11453a5a1b3Sopenharmony_ciNew field for PA_COMMAND_PLAY_SAMPLE: 11553a5a1b3Sopenharmony_ci 11653a5a1b3Sopenharmony_ci proplist 11753a5a1b3Sopenharmony_ci 11853a5a1b3Sopenharmony_ciNew field for PA_COMMAND_PLAY_SAMPLE response: 11953a5a1b3Sopenharmony_ci 12053a5a1b3Sopenharmony_ci idx 12153a5a1b3Sopenharmony_ci 12253a5a1b3Sopenharmony_ciNew field for PA_COMMAND_CREATE_PLAYBACK_STREAM at the end: 12353a5a1b3Sopenharmony_ci 12453a5a1b3Sopenharmony_ci start_muted 12553a5a1b3Sopenharmony_ci 12653a5a1b3Sopenharmony_ciBuffer attributes for PA_COMMAND_CREATE_PLAYBACK_STREAM and 12753a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_RECORD_STREAM may now be 0 for default values. 12853a5a1b3Sopenharmony_ci 12953a5a1b3Sopenharmony_ciNew field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR, 13053a5a1b3Sopenharmony_ciPA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end: 13153a5a1b3Sopenharmony_ci 13253a5a1b3Sopenharmony_ci adjust_latency (bool) 13353a5a1b3Sopenharmony_ci 13453a5a1b3Sopenharmony_cinew message: 13553a5a1b3Sopenharmony_ci 13653a5a1b3Sopenharmony_ci PA_COMMAND_STARTED 13753a5a1b3Sopenharmony_ci 13853a5a1b3Sopenharmony_ci### v14, implemented by >= 0.9.12 13953a5a1b3Sopenharmony_ci 14053a5a1b3Sopenharmony_cinew message: 14153a5a1b3Sopenharmony_ci 14253a5a1b3Sopenharmony_ci PA_COMMAND_EXTENSION 14353a5a1b3Sopenharmony_ci 14453a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_PLAYBACK_STREAM: 14553a5a1b3Sopenharmony_ci 14653a5a1b3Sopenharmony_ci bool volume_set at the end 14753a5a1b3Sopenharmony_ci 14853a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_RECORD_STREAM, PA_COMMAND_CREATE_PLAYBACK_STREAM: 14953a5a1b3Sopenharmony_ci 15053a5a1b3Sopenharmony_ci bool early_requests at the end 15153a5a1b3Sopenharmony_ci 15253a5a1b3Sopenharmony_ciNew field for PA_COMMAND_SET_PLAYBACK_STREAM_BUFFER_ATTR, 15353a5a1b3Sopenharmony_ciPA_COMMAND_SET_RECORD_STREAM_BUFFER_ATTR at the end: 15453a5a1b3Sopenharmony_ci 15553a5a1b3Sopenharmony_ci early_requests (bool) 15653a5a1b3Sopenharmony_ci 15753a5a1b3Sopenharmony_ci### v15, implemented by >= 0.9.15 15853a5a1b3Sopenharmony_ci 15953a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_PLAYBACK_STREAM 16053a5a1b3Sopenharmony_ci 16153a5a1b3Sopenharmony_ci bool muted at the end 16253a5a1b3Sopenharmony_ci 16353a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_PLAYBACK_STREAM, PA_COMMAND_CREATE_RECORD_STREAM: 16453a5a1b3Sopenharmony_ci 16553a5a1b3Sopenharmony_ci bool dont_inhibit_auto_suspend at the end 16653a5a1b3Sopenharmony_ci 16753a5a1b3Sopenharmony_ciPA_COMMAND_GET_MODULE_INFO_LIST 16853a5a1b3Sopenharmony_ci 16953a5a1b3Sopenharmony_ci remove bool auto_unload 17053a5a1b3Sopenharmony_ci add proplist at the end 17153a5a1b3Sopenharmony_ci 17253a5a1b3Sopenharmony_cinew messages: 17353a5a1b3Sopenharmony_ci 17453a5a1b3Sopenharmony_ci PA_COMMAND_GET_CARD_INFO 17553a5a1b3Sopenharmony_ci PA_COMMAND_GET_CARD_INFO_LIST 17653a5a1b3Sopenharmony_ci PA_COMMAND_SET_CARD_PROFILE 17753a5a1b3Sopenharmony_ci 17853a5a1b3Sopenharmony_ci PA_COMMAND_CLIENT_EVENT 17953a5a1b3Sopenharmony_ci PA_COMMAND_PLAYBACK_STREAM_EVENT 18053a5a1b3Sopenharmony_ci PA_COMMAND_RECORD_STREAM_EVENT 18153a5a1b3Sopenharmony_ci 18253a5a1b3Sopenharmony_ci PA_COMMAND_PLAYBACK_BUFFER_ATTR_CHANGED 18353a5a1b3Sopenharmony_ci PA_COMMAND_RECORD_BUFFER_ATTR_CHANGED 18453a5a1b3Sopenharmony_ci 18553a5a1b3Sopenharmony_ci### v16, implemented by >= 0.9.15 18653a5a1b3Sopenharmony_ci 18753a5a1b3Sopenharmony_cinew messages: 18853a5a1b3Sopenharmony_ci 18953a5a1b3Sopenharmony_ci PA_COMMAND_SET_SINK_PORT 19053a5a1b3Sopenharmony_ci PA_COMMAND_SET_SOURCE_PORT 19153a5a1b3Sopenharmony_ci 19253a5a1b3Sopenharmony_ci## v17, implemented by >= 0.9.20 19353a5a1b3Sopenharmony_ci 19453a5a1b3Sopenharmony_cinew flag at end of CREATE_PLAYBACK_STREAM: 19553a5a1b3Sopenharmony_ci 19653a5a1b3Sopenharmony_ci bool relative_volume 19753a5a1b3Sopenharmony_ci 19853a5a1b3Sopenharmony_ci## v18, implemented by >= 0.9.22 19953a5a1b3Sopenharmony_ci 20053a5a1b3Sopenharmony_cinew flag at end of CREATE_PLAYBACK_STREAM: 20153a5a1b3Sopenharmony_ci 20253a5a1b3Sopenharmony_ci bool passthrough 20353a5a1b3Sopenharmony_ci 20453a5a1b3Sopenharmony_ci## v19, implemented by >= 0.9.22 20553a5a1b3Sopenharmony_ci 20653a5a1b3Sopenharmony_ciNew flag at the end of sink input and source output introspection data: 20753a5a1b3Sopenharmony_ci 20853a5a1b3Sopenharmony_ci bool corked 20953a5a1b3Sopenharmony_ci 21053a5a1b3Sopenharmony_ci## v20, implemented by >= 1.0 21153a5a1b3Sopenharmony_ci 21253a5a1b3Sopenharmony_ciTwo new flags at the end of sink input introspection data: 21353a5a1b3Sopenharmony_ci 21453a5a1b3Sopenharmony_ci bool has_volume 21553a5a1b3Sopenharmony_ci bool volume_writable 21653a5a1b3Sopenharmony_ci 21753a5a1b3Sopenharmony_ci## v21, implemented by >= 1.0 21853a5a1b3Sopenharmony_ci 21953a5a1b3Sopenharmony_ciChanges for format negotiation in the extended API. 22053a5a1b3Sopenharmony_ci 22153a5a1b3Sopenharmony_ciNew fields PA_COMMAND_CREATE_PLAYBACK_STREAM: 22253a5a1b3Sopenharmony_ci 22353a5a1b3Sopenharmony_ci uint8_t n_formats 22453a5a1b3Sopenharmony_ci format_info format1 22553a5a1b3Sopenharmony_ci ... 22653a5a1b3Sopenharmony_ci format_info formatn 22753a5a1b3Sopenharmony_ci 22853a5a1b3Sopenharmony_ciOne new field in reply from PA_COMMAND_CREATE_PLAYBACK_STREAM: 22953a5a1b3Sopenharmony_ci 23053a5a1b3Sopenharmony_ci format_info format 23153a5a1b3Sopenharmony_ci 23253a5a1b3Sopenharmony_ciNew fields in reply from PA_COMMAND_GET_SINK_INFO (and thus 23353a5a1b3Sopenharmony_ciPA_COMMAND_GET_SINK_INFO_LIST) 23453a5a1b3Sopenharmony_ci 23553a5a1b3Sopenharmony_ci uint8_t n_formats 23653a5a1b3Sopenharmony_ci format_info format1 23753a5a1b3Sopenharmony_ci ... 23853a5a1b3Sopenharmony_ci format_info formatn 23953a5a1b3Sopenharmony_ci 24053a5a1b3Sopenharmony_ciOne new field in reply from PA_COMMAND_GET_SINK_INPUT_INFO (and thus 24153a5a1b3Sopenharmony_ciPA_COMMAND_GET_SINK_INPUT_INFO_LIST) 24253a5a1b3Sopenharmony_ci 24353a5a1b3Sopenharmony_ci format_info format 24453a5a1b3Sopenharmony_ci 24553a5a1b3Sopenharmony_ci## v22, implemented by >= 1.0 24653a5a1b3Sopenharmony_ci 24753a5a1b3Sopenharmony_ciNew fields PA_COMMAND_CREATE_RECORD_STREAM: 24853a5a1b3Sopenharmony_ci 24953a5a1b3Sopenharmony_ci uint8_t n_formats 25053a5a1b3Sopenharmony_ci format_info format1 25153a5a1b3Sopenharmony_ci ... 25253a5a1b3Sopenharmony_ci format_info formatn 25353a5a1b3Sopenharmony_ci volume 25453a5a1b3Sopenharmony_ci bool muted 25553a5a1b3Sopenharmony_ci bool volume_set 25653a5a1b3Sopenharmony_ci bool muted_set 25753a5a1b3Sopenharmony_ci bool relative_volume 25853a5a1b3Sopenharmony_ci bool passthrough 25953a5a1b3Sopenharmony_ci 26053a5a1b3Sopenharmony_ciOne new field in reply from PA_COMMAND_CREATE_RECORD_STREAM: 26153a5a1b3Sopenharmony_ci 26253a5a1b3Sopenharmony_ci format_info format 26353a5a1b3Sopenharmony_ci 26453a5a1b3Sopenharmony_ciNew fields in reply from PA_COMMAND_GET_SOURCE_INFO (and thus 26553a5a1b3Sopenharmony_ciPA_COMMAND_GET_SOURCE_INFO_LIST) 26653a5a1b3Sopenharmony_ci 26753a5a1b3Sopenharmony_ci uint8_t n_formats 26853a5a1b3Sopenharmony_ci format_info format1 26953a5a1b3Sopenharmony_ci ... 27053a5a1b3Sopenharmony_ci format_info formatn 27153a5a1b3Sopenharmony_ci 27253a5a1b3Sopenharmony_ciFive new fields in reply from PA_COMMAND_GET_SOURCE_OUTPUT_INFO (and thus 27353a5a1b3Sopenharmony_ciPA_COMMAND_GET_SOURCE_OUTPUT_INFO_LIST) 27453a5a1b3Sopenharmony_ci 27553a5a1b3Sopenharmony_ci volume 27653a5a1b3Sopenharmony_ci bool mute 27753a5a1b3Sopenharmony_ci bool has_volume 27853a5a1b3Sopenharmony_ci bool volume_writable 27953a5a1b3Sopenharmony_ci format_info format 28053a5a1b3Sopenharmony_ci 28153a5a1b3Sopenharmony_ci## v23, implemented by >= 1.0 28253a5a1b3Sopenharmony_ci 28353a5a1b3Sopenharmony_ciNew field in PA_COMMAND_UNDERFLOW: 28453a5a1b3Sopenharmony_ci 28553a5a1b3Sopenharmony_ci int64_t index 28653a5a1b3Sopenharmony_ci 28753a5a1b3Sopenharmony_ci## v24, implemented by >= 2.0 28853a5a1b3Sopenharmony_ci 28953a5a1b3Sopenharmony_ciNew field in all commands that send/receive port introspection data 29053a5a1b3Sopenharmony_ci(PA_COMMAND_GET_(SOURCE|SINK)_INFO, 29153a5a1b3Sopenharmony_ciPA_COMMAND_GET_(SOURCE|SINK)_INFO_LIST): 29253a5a1b3Sopenharmony_ci 29353a5a1b3Sopenharmony_ci uint32_t available 29453a5a1b3Sopenharmony_ci 29553a5a1b3Sopenharmony_ciThe field is added once for every port. 29653a5a1b3Sopenharmony_ci 29753a5a1b3Sopenharmony_ci## v25, implemented by >= 2.0 29853a5a1b3Sopenharmony_ci 29953a5a1b3Sopenharmony_ciWhen port availability changes, send a subscription event for the 30053a5a1b3Sopenharmony_ciowning card. 30153a5a1b3Sopenharmony_ci 30253a5a1b3Sopenharmony_ci## v26, implemented by >= 2.0 30353a5a1b3Sopenharmony_ci 30453a5a1b3Sopenharmony_ciIn reply from PA_COMMAND_GET_CARD_INFO (and thus 30553a5a1b3Sopenharmony_ciPA_COMMAND_GET_CARD_INFO_LIST), the following is added: 30653a5a1b3Sopenharmony_ci 30753a5a1b3Sopenharmony_ci uint32_t n_ports 30853a5a1b3Sopenharmony_ci 30953a5a1b3Sopenharmony_ci...followed by n_ports extended port entries, which look like this: 31053a5a1b3Sopenharmony_ci 31153a5a1b3Sopenharmony_ci string name 31253a5a1b3Sopenharmony_ci string description 31353a5a1b3Sopenharmony_ci uint32_t priority 31453a5a1b3Sopenharmony_ci uint32_t available 31553a5a1b3Sopenharmony_ci uint8_t direction 31653a5a1b3Sopenharmony_ci proplist 31753a5a1b3Sopenharmony_ci uint32_t n_profiles 31853a5a1b3Sopenharmony_ci string profile_name_1 31953a5a1b3Sopenharmony_ci ... 32053a5a1b3Sopenharmony_ci string profile_name_n 32153a5a1b3Sopenharmony_ci 32253a5a1b3Sopenharmony_ciProfile names must match earlier sent profile names for the same card. 32353a5a1b3Sopenharmony_ci 32453a5a1b3Sopenharmony_ci## v27, implemented by >= 3.0 32553a5a1b3Sopenharmony_ci 32653a5a1b3Sopenharmony_ciNew opcodes: 32753a5a1b3Sopenharmony_ci PA_COMMAND_SET_PORT_LATENCY_OFFSET 32853a5a1b3Sopenharmony_ci 32953a5a1b3Sopenharmony_ciNew field in the card commands that send/receive port introspection data 33053a5a1b3Sopenharmony_ciPA_COMMAND_GET_CARD_INFO(_LIST)): 33153a5a1b3Sopenharmony_ci 33253a5a1b3Sopenharmony_ci int64_t latency_offset 33353a5a1b3Sopenharmony_ci 33453a5a1b3Sopenharmony_ciThe field is added once for every port. 33553a5a1b3Sopenharmony_ci 33653a5a1b3Sopenharmony_ci## v28, implemented by >= 4.0 33753a5a1b3Sopenharmony_ci 33853a5a1b3Sopenharmony_ciNew value for encoding format type in format_info 33953a5a1b3Sopenharmony_ciPA_COMMAND_CREATE_(PLAYBACK|RECORDING)_STREAM and its reply, 34053a5a1b3Sopenharmony_ciIn reply from PA_COMMAND_GET_(SOURCE|SOURCE_OUTPUT|SINK|SINK_INPUT)_INFO[_LIST], 34153a5a1b3Sopenharmony_ciSUBCOMMAND_SAVE_FORMATS, in reply from SUBCOMMAND_READ_FORMATS[_ALL] 34253a5a1b3Sopenharmony_ci 34353a5a1b3Sopenharmony_ci (uint8_t ) PA_ENCODING_MPEG2_AAC_IEC61937 := 6 34453a5a1b3Sopenharmony_ci 34553a5a1b3Sopenharmony_ci## v29, implemented by >= 5.0 34653a5a1b3Sopenharmony_ci# 34753a5a1b3Sopenharmony_ciNew field in all commands that send/receive profile introspection data 34853a5a1b3Sopenharmony_ci(PA_COMMAND_GET_CARD_INFO) 34953a5a1b3Sopenharmony_ci 35053a5a1b3Sopenharmony_ci uint32 available 35153a5a1b3Sopenharmony_ci 35253a5a1b3Sopenharmony_ciThe field is added once for every profile. 35353a5a1b3Sopenharmony_ci 35453a5a1b3Sopenharmony_ci## v30, implemented by >= 6.0 35553a5a1b3Sopenharmony_ci# 35653a5a1b3Sopenharmony_ciA new protocol mechanism supported: Two ringbuffers in shared memory. 35753a5a1b3Sopenharmony_ciPulseaudio fdsem (wrappers around event file descriptors) are used for 35853a5a1b3Sopenharmony_cisignalling new data. 35953a5a1b3Sopenharmony_ciThe protocol has a new SHM flag telling whether a SHM memblock is writable 36053a5a1b3Sopenharmony_ciby both sides. 36153a5a1b3Sopenharmony_ci 36253a5a1b3Sopenharmony_ciPA_COMMAND_ENABLE_SRBCHANNEL 36353a5a1b3Sopenharmony_ciFirst sent from server to client, tells the client to start listening on 36453a5a1b3Sopenharmony_cithe additional SHM ringbuffer channel. 36553a5a1b3Sopenharmony_ciThis command also has ancillary data (two eventfds attached to it). 36653a5a1b3Sopenharmony_ciMust be directly followed by a memblock which is the ringbuffer memory. 36753a5a1b3Sopenharmony_ciWhen memblock is received by the client, it acks by sending 36853a5a1b3Sopenharmony_ciPA_COMMAND_ENABLE_SRBCHANNEL back (without ancillary or memblock data). 36953a5a1b3Sopenharmony_ci 37053a5a1b3Sopenharmony_ciPA_COMMAND_DISABLE_SRBCHANNEL 37153a5a1b3Sopenharmony_ciTells the client to stop listening on the additional SHM ringbuffer channel. 37253a5a1b3Sopenharmony_ciAcked by client by sending PA_COMMAND_DISABLE_SRBCHANNEL back. 37353a5a1b3Sopenharmony_ci 37453a5a1b3Sopenharmony_ci## v31, implemented by >= 9.0 37553a5a1b3Sopenharmony_ci 37653a5a1b3Sopenharmony_ciMemfd shared-memory support is now added to PulseAudio as an opt-in feature. 37753a5a1b3Sopenharmony_ciAdd 'enable-memfd=yes' to daemon's configuration to use memfds, instead of 37853a5a1b3Sopenharmony_ciPOSIX shm, by default. 37953a5a1b3Sopenharmony_ci 38053a5a1b3Sopenharmony_ciMemfd is a simple memory sharing mechanism, added by the systemd/kdbus 38153a5a1b3Sopenharmony_cidevelopers, to share pages between processes in an anonymous, no global 38253a5a1b3Sopenharmony_ciregistry needed, no mount-point required, relatively secure, manner. 38353a5a1b3Sopenharmony_ci 38453a5a1b3Sopenharmony_ciPulseAudio memfd support builds the necessary (but not yet sufficient) 38553a5a1b3Sopenharmony_cigroundwork for a better integration with per-app containers (e.g. xdg-app) 38653a5a1b3Sopenharmony_ci 38753a5a1b3Sopenharmony_ciFor further details on memfds in general, please check: 38853a5a1b3Sopenharmony_ci 38953a5a1b3Sopenharmony_ci https://dvdhrm.wordpress.com/2014/06/10/memfd_create2/ 39053a5a1b3Sopenharmony_ci Archived at: http://www.webcitation.org/6gnHTy9Kr 39153a5a1b3Sopenharmony_ci 39253a5a1b3Sopenharmony_ciMoreover, for both client and server, the second most-significant bit of 39353a5a1b3Sopenharmony_cithe version tag is now used to flag memfd SHM support. On the way forward, 39453a5a1b3Sopenharmony_cithe two most-significant _bytes_ of the version tag are now also reserved 39553a5a1b3Sopenharmony_cifor flags. 39653a5a1b3Sopenharmony_ci 39753a5a1b3Sopenharmony_ciPA_COMMAND_REGISTER_MEMFD_SHMID 39853a5a1b3Sopenharmony_ciNew command that can be sent both ways, from client to server and vice versa. 39953a5a1b3Sopenharmony_ciThis is needed to transfer a memfd pool's blocks without passing its fd every 40053a5a1b3Sopenharmony_citime, thus minimizing overhead and avoiding fd leaks. 40153a5a1b3Sopenharmony_ci 40253a5a1b3Sopenharmony_ciThe registration command above sends a packet with the pool's memfd fd as 40353a5a1b3Sopenharmony_ciancillary data. Such packet has an ID that uniquely identifies the pool's 40453a5a1b3Sopenharmony_cimemfd memory area. Upon arrival, the other end (client or server) creates a 40553a5a1b3Sopenharmony_cipermanent ID<->memfd mapping. 40653a5a1b3Sopenharmony_ci 40753a5a1b3Sopenharmony_ciBy doing so, there's need to reference the pool's memfd file descriptor any 40853a5a1b3Sopenharmony_cifurther -- just its ID. Thus both endpoints can then quickly and safely 40953a5a1b3Sopenharmony_ciclose their memfd file descriptors. 41053a5a1b3Sopenharmony_ci 41153a5a1b3Sopenharmony_ci## v32, implemented by >= 10.0 41253a5a1b3Sopenharmony_ci 41353a5a1b3Sopenharmony_ciEnable memfd transport by default. 41453a5a1b3Sopenharmony_ci 41553a5a1b3Sopenharmony_ciThis protocol bump was only created to mark 9.0 clients. Although they 41653a5a1b3Sopenharmony_cisupport memfd transport, such older clients has an iochannel bug that would 41753a5a1b3Sopenharmony_cibreak memfd audio if they're run in 32-bit mode over a 64-bit kernel. Thus 41853a5a1b3Sopenharmony_ciinfluence these buggy libraries to use POSIX shared memory, by signalling 41953a5a1b3Sopenharmony_cimemfd support only to 10.0+ clients. 42053a5a1b3Sopenharmony_ci 42153a5a1b3Sopenharmony_ciCheck commit 451d1d676237c81 for further details. 42253a5a1b3Sopenharmony_ci 42353a5a1b3Sopenharmony_ci## v33, implemented by >= 13.0 42453a5a1b3Sopenharmony_ci 42553a5a1b3Sopenharmony_ciAdded two values to the pa_encoding_t enum: 42653a5a1b3Sopenharmony_ci 42753a5a1b3Sopenharmony_ci PA_ENCODING_TRUEHD_IEC61937 := 7 42853a5a1b3Sopenharmony_ci PA_ENCODING_DTSHD_IEC61937 := 8 42953a5a1b3Sopenharmony_ci 43053a5a1b3Sopenharmony_ci## v34, implemented by >= 14.0 43153a5a1b3Sopenharmony_ci 43253a5a1b3Sopenharmony_ciNew fields in the port introspection data (duplicated for all port types: 43353a5a1b3Sopenharmony_cisink, source and card ports): 43453a5a1b3Sopenharmony_ci 43553a5a1b3Sopenharmony_ci string availability_group 43653a5a1b3Sopenharmony_ci uint32 type 43753a5a1b3Sopenharmony_ci 43853a5a1b3Sopenharmony_ci## v35, implemented by >= 15.0 43953a5a1b3Sopenharmony_ci 44053a5a1b3Sopenharmony_ciAdded new command for communication with objects. 44153a5a1b3Sopenharmony_ci 44253a5a1b3Sopenharmony_ciPA_COMMAND_SEND_OBJECT_MESSAGE: 44353a5a1b3Sopenharmony_cisends a message to an object identified by an object path 44453a5a1b3Sopenharmony_ci 44553a5a1b3Sopenharmony_ciparameters: 44653a5a1b3Sopenharmony_ci string object_path - unique path identifying the object 44753a5a1b3Sopenharmony_ci string message - message name 44853a5a1b3Sopenharmony_ci string message_parameters - additional parameters if required (may be 44953a5a1b3Sopenharmony_ci NULL, which should be treated the same as an 45053a5a1b3Sopenharmony_ci empty string) 45153a5a1b3Sopenharmony_ci 45253a5a1b3Sopenharmony_ciThe command returns a string, which may be empty or NULL (NULL should be 45353a5a1b3Sopenharmony_citreated the same as an empty string). 45453a5a1b3Sopenharmony_ci 45553a5a1b3Sopenharmony_ci#### If you just changed the protocol, read this 45653a5a1b3Sopenharmony_ci## module-tunnel depends on the sink/source/sink-input/source-input protocol 45753a5a1b3Sopenharmony_ci## internals, so if you changed these, you might have broken module-tunnel. 45853a5a1b3Sopenharmony_ci## Don't forget to test module-tunnel-{source,sink} when pushing protocol 45953a5a1b3Sopenharmony_ci## changes. 460