http://bugs.winehq.org/show_bug.cgi?id=28723
Jörg Höhle hoehle@users.sourceforge.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |1.4.0
--- Comment #49 from Jörg Höhle hoehle@users.sourceforge.net 2011-11-16 04:16:08 CST --- A closer inspection of test data submitted to me shows that GetPosition is behind the dynamic limit 'sum of ReleasedFrames - GetCurrentPadding' by 30-40ms in shared mode (24-34ms with one 5:1 card), i.e. it's outside the mmdevapi buffer. In exclusive mode, GetPosition alternates around that limit.
Thinking about a mixer, I've observed that it's easy to write a 3 period one (one period playing, one fully prepared which the HW already knows to play next and the third one where mixing occurs). Attempting to use 2 only is possible but requires the system to tell the HW which buffer to play next right before underrun would happen. This does not fit a periodic timer model.
Back to the 2 period 20ms buffer event-driven app. It's not the sustained 10ms rate that causes trouble, it's the assumption that Wine ought to feed ALSA from solely 20ms. That leads to seeking problematic speedups, like believing that ReleaseBuffer must call write. Add a 10ms lead, and you are in still water.