On 2014-10-22 18:21, 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.

On devices that can use tsched, there is no problem.

On Ubuntu, since before my time, this has been the default:

default-fragments = 8
default-fragment-size-msec = 10

...so 8 x 10 = 80 ms. If you end up with 5 x 4 = 20 ms, I think that's a bit too short/sensitive, we should then increase the number of periods to 16 or at least 8 in the same go, so you'll end up with something above 50 ms in total. I think this could help against underruns caused by inoptimal scheduling.

I discussed this with Alexander briefly on Linuxcon, and I'm not opposed to lowering the fragment-size parameter. I have not looked into the wine DirectSound driver, but if it requires a period size of 10 ms, why does not 10 ms work?

Also, how well does wine work with non-ALSA sinks, such as bluetooth, tunnel sinks, etc?





Signed-off-by: Alexander E. Patrakov <[email protected]>
---
  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,
      .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


--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to