This is based on work done by Andrew Eikum. It has been in some form in Proton for the last 4 years.
If server's sampling rate is not 48kHz **DOOM Eternal** will try to set it 48kHz for the streams using the implemented interface. There's a whole class of audio devices that use 44.1kHz sampling rate and at least PulseAudio / PipeWire tends to inherit the value from the hardware to avoid resampling. The value can also be overridden by the user via the audio server's config files.
In such cases, if the interface is not present or stubbed, this results in **audio underruns and noticeable crackling**.
It's easy to test with pipewire-pulse:
```
$ cat /etc/pipewire/pipewire.conf.d/sample-rate.conf
context.properties = {
default.clock.rate = 41100
}
```
With PulseAudio this should be doable via setting `default-sample-rate = 41100` in `/etc/pulse/daemon.conf`.
--
v3: winepulse.drv: Implement set_sample_rate.
mmdevapi: Implement AudioClockAdjustment_SetSampleRate.
mmdevapi: Add stub IAudioClockAdjustment implementation.
mmdevapi/tets: Add more IAudioClock tests.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5585
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56674
Now that we write all the display modes as a blob, we also write their header to the registry. This includes the dmSize field which is later used to iterate the modes after they've been read from the registry. The virtual desktop mode and some drivers were not setting it properly.
--
v2: winemac: Set DEVMODEW dmSize field.
wineandroid: Set DEVMODEW dmSize field.
win32u: Set DEVMODEW dmSize field.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5679
This format is used by many Unity games, with D3D-enabled source reader.
--
v7: mfreadwrite/reader: Fixup MFVideoFormat_ABGR32 subtype to enumerate the video processor.
winegstreamer: Support MFVideoFormat_ABGR32 output in the video processor.
mfreadwrite/tests: Add tests with MFVideoFormat_ABGR32 output format.
mf/tests: Add video processor tests with MFVideoFormat_ABGR32 format.
mfplat: Add MFVideoFormat_ABGR32 format information.
https://gitlab.winehq.org/wine/wine/-/merge_requests/5626
First part of Proton shared memory series. The full branch can be seen at https://gitlab.winehq.org/rbernon/wine/-/commits/mr/shared-memories.
--
v40: win32u: Use the desktop shared data for GetCursorPos.
server: Move the last cursor time to the desktop session object.
server: Move the cursor position to the desktop session object.
win32u: Open the desktop shared object in NtUserSetThreadDesktop.
server: Return the desktop object locator in (get|set)_thread_desktop.
server: Allocate shared session object for desktops.
include: Add ReadNoFence64 inline helpers.
server: Create a global session shared mapping.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3103