[pulseaudio-discuss] [PATCH] Change the default fragment size to 5 ms
Alexander E. Patrakov
patrakov at gmail.com
Wed Oct 22 13:27:52 PDT 2014
23.10.2014 02:06, Pierre-Louis Bossart wrote:
> On 10/22/14, 11:21 AM, Alexander E. Patrakov wrote:
>> Of course, this only applies to ALSA devices that can't use tsched, as
>> well as to OSS on more exotic platforms.
>>
>> This is needed for compatibility with Wine games that use DirectSound8
>> on distributions such as Arch Linux who don't accept the unofficial
>> winepulse patch. The reason is that Wine DirectSound8 emulation requests
>> a period of 10 ms and expects it to work for the purposes of timing. And
>> in fact, it cannot know (via ALSA API) that it is not going to work!
>>
>> A known malware-free test application is Foobar2000 version 1.2. Later
>> versions no longer use DirectSound.
>>
>> This issue is not going to be fixed on the Wine side, because the audio
>> subsystem in Wine is not really maintained, and the maintainer has
>> already privately expressed some negative thoughts about the state of
>> the linux audio ecosystem in general.
>>
>> The correct solution (at least from the "isolate the clients from
>> hardware limitations as thoroughly as possible" viewpoint) would be to
>> consume audio from sink inputs using a timer if the actual sink does not
>> provide sufficiently small minreq. In other words, adapt tsched to BATCH
>> cards and drop non-tsched. But that's a whole project. So, as a stopgap
>> solution for running Wine games on e.g. USB audio (which is a topic that
>> pops up regularly on #pulseaudio IRC channel), let's reduce the default
>> fragment size to a value suitable for unpatched Wine.
>>
>> Regarding the value: on my system, for mp3 playback through Foobar2000,
>> 8ms fragments work, 9ms fragments result in constant underruns.
>>
>> Wine wiki recommends 5ms.
>
> Maybe it should be made clearer that the actual periods may differ
> slightly from the default settings due to hardware constraints or
> rounding issues, e.g. with your 5ms setting at 44100 Hz the period of
> 220.5 samples is going to be rounded....
OK, I will clarify the commit message tomorrow.
>
>>
>> On devices that can use tsched, there is no problem.
>>
>> Signed-off-by: Alexander E. Patrakov <patrakov at gmail.com>
>> ---
>> man/pulse-daemon.conf.5.xml.in | 4 ++--
>> src/daemon/daemon-conf.c | 2 +-
>> src/daemon/daemon.conf.in | 2 +-
>> 3 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/man/pulse-daemon.conf.5.xml.in
>> b/man/pulse-daemon.conf.5.xml.in
>> index 8bd076d..ff54435 100644
>> --- a/man/pulse-daemon.conf.5.xml.in
>> +++ b/man/pulse-daemon.conf.5.xml.in
>> @@ -463,8 +463,8 @@ USA.
>> </option>
>> <option>
>> <p><opt>default-fragment-size-msec=</opt>The duration of a
>> - single fragment. Defaults to 25ms (i.e. the total buffer is thus
>> - 100ms long).</p>
>> + single fragment. Defaults to 5ms (i.e. the total buffer is thus
>> + 20ms long).</p>
>> </option>
>>
>> </section>
>> diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
>> index b7a85aa..6dc15cf 100644
>> --- a/src/daemon/daemon-conf.c
>> +++ b/src/daemon/daemon-conf.c
>> @@ -96,7 +96,7 @@ static const pa_daemon_conf default_conf = {
>> .lock_memory = false,
>> .deferred_volume = true,
>> .default_n_fragments = 4,
>> - .default_fragment_size_msec = 25,
>> + .default_fragment_size_msec = 5,
>
> I've never understood why 4 fragments would be needed. Use 2 fragments
> and 10ms periods...
This works here, indeed. As for not using 2 periods, I think this may be
related to cards that, according to the ALSA driver, should not work
with just 2 periods (does anyone have a ymfpci?).
>
>> .deferred_volume_safety_margin_usec = 8000,
>> .deferred_volume_extra_delay_usec = 0,
>> .default_sample_spec = { .format = PA_SAMPLE_S16NE, .rate =
>> 44100, .channels = 2 },
>> diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in
>> index 5b20130..3d758cd 100644
>> --- a/src/daemon/daemon.conf.in
>> +++ b/src/daemon/daemon.conf.in
>> @@ -85,7 +85,7 @@ ifelse(@HAVE_SYS_RESOURCE_H@, 1, [dnl
>> ; default-channel-map = front-left,front-right
>>
>> ; default-fragments = 4
>> -; default-fragment-size-msec = 25
>> +; default-fragment-size-msec = 5
>>
>> ; enable-deferred-volume = yes
>> ; deferred-volume-safety-margin-usec = 8000
>>
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
--
Alexander E. Patrakov
More information about the pulseaudio-discuss
mailing list