Very uneven playback timestamps
I installed pipewire on Fedora Silverblue Rawhide using the following command:
rpm-ostree override remove pulseaudio pulseaudio-module-bluetooth pulseaudio-module-x11 alsa-plugins-pulseaudio --install=pipewire-pulseaudio
Here are the deployments I'm using:
● ostree://fedora:fedora/rawhide/x86_64/silverblue
Version: Rawhide.20210104.n.0 (2021-01-04T06:14:50Z)
BaseCommit: 0e00463e39409f22591a3e6490b2617f10b05d9e4bed8583ac07f59f8dd071ca
GPGSignature: Valid signature by 963A2BEB02009608FE67EA4249FD77499570FF31
LayeredPackages: exa fish fprintd fprintd-pam
Pinned: yes
ostree://fedora:fedora/rawhide/x86_64/silverblue
Version: Rawhide.20210104.n.0 (2021-01-04T06:14:50Z)
BaseCommit: 0e00463e39409f22591a3e6490b2617f10b05d9e4bed8583ac07f59f8dd071ca
GPGSignature: Valid signature by 963A2BEB02009608FE67EA4249FD77499570FF31
RemovedBasePackages: pulseaudio-module-bluetooth pulseaudio-module-x11 pulseaudio 14.0-2.fc34, alsa-plugins-pulseaudio 1.2.2-3.fc33
LayeredPackages: exa fish fprintd fprintd-pam pipewire-pulseaudio
Pinned: yes
The pipewire version is 0.3.18-1.fc34.
Now, I'm not sure I have a better description for this; I'm not very familiar with how the underlying systems work. I have a rhythm game, Quaver (free on Steam). It uses the Bass audio library which works through ALSA (it has no PA backend). Every frame (at 60 FPS, synchronized via Wayland frame callbacks) the game asks Bass the current audio position using Bass.ChannelGetPosition(Stream)
and renders the playfield (rectangles moving down) according to that timestamp. On PulseAudio this results in smooth movement, while when running pipewire the movement is very jerky and all over the place.
Here's a video recording on PulseAudio. If you go frame-by-frame you will see that the rectangles generally move the same distance every frame as they should.
Here's a high-exposure photo on PulseAudio. It shows multiple frames at once. Since the movement is smooth, the relative distances between rectangles are the same.
Here's a video recording on pipewire. If you go frame-by-frame you will see that the rectangles move different distances every frame.
Here's a high-exposure photo on pipewire. Since the movement is jerky, the relative distances between rectangles are all different.