Yes. The test program is attached. For stereo S16_LE output, it reports
32 samples (i.e. 128 bytes) as the minimum period size.
your program segfault when using NULL plugin
what other events pulseaudio need to rewind beside
- change in volume of sink/source
Volume change of the sink is supposed to be real time event
User are allowed to change the volume slider even when the sink is not playing or source is not capturing
If the requested volume cannot be satisfied by changing hardware volume controls , does pulseaudio keep the calculated software volume adjustment when the sink start playing while the hardware volume is supposed to be updated immediately ?
when user specify ignore_DB=1 or codec does not have any volume control (e.g. SPDIF stereo playback) which force pulseaudio to use software volume. The software volume will be same as the requested volume(volume slider in sound preference) even when there is no playing stream.
Do this software volume setting saved in pulseaudio database when shutdown and restore on pulseaudio next startup by module-device-restore for the SPDIF stereo profile ?
- change in volume of streams
since there may be multiple streams (clients) playing at the same time, Do pulseaudio still keep copies of unmixed audio of all connected clients ?
- change in latency
- sync slaves of combined sinks
I don't think that (4) is valid. It is handled by resampling, not
rewinding.
- explicit rewrite request from the client (if the sink has already
rendered the rewritten data into its buffer)
- state change ("If we are added for the first time...") of the sink
input
If the stream is the first client ,
How about a low latency client connect to server when a high latency client is already playing ?
Do pulseaudio still rewind the sink when low latency client is playing and a high latency client connect to server ?
- corking/uncorking
Do you mean pause of the playing stream while other stream is still playing ?
- end of underrun (for specific sink inputs)
if appl_ptr is behind hw_ptr , you need to use snd_pcm_forward to advance the appl_ptr to a suitable position which you write enough data so that final appl_ptr is at least one period ahead of hwptr
Why do end of underrun need rewind ?
- moving streams between sinks
What happen when the sinks have different buffer size ?
Do all playing streams need to re-adjust latency ?