winealsa.drv: Waveout rewrite to allow multiple waveopens

Joerg-Cyril.Hoehle at Joerg-Cyril.Hoehle at
Tue Mar 8 05:36:32 CST 2011


let me apologize for barely taking the time to look at the extra patches
you write outside of the main git tree.  I hope other people find more time
to try them out with real apps and report on their findings.

Here are a few comments of mine on your winealsa rewrite (beside bug #22261, comment #6).

- It's been a pleasure to hear mciwave+winealsa open multiple devices concurrently
  with dmix mixing all playing sounds thanks to this rewrite.

- wodNotifyDoneList is called from within a critical section in wodTick().
This may break havoc with DCB_FUNCTION callbacks, as the driver
does not appear to be re-entrant.

EnterCriticalSection offers no protection from within the same thread.
Some apps are known to call waveOutClose() from within the DONE callback.

Of course you may delegate this issue to a solution to bug #3930.  I'd be curious
if you have any ideas about how to delay notification to a later point
in time, "until it is safe to do" -- native appears to delay as well.

- You may wish to look into bug #22880.
Lemmix is a small (143KB) downloadable application that opens two waveout devices.
It plays both music and sound effects on Mac OS using the winecoreaudio
driver, but fails to do so with your ALSA driver, although both devices open
and WINEDEBUG=+wave shows calls to waveOutWrite.  I could not figure out
what goes wrong.

- I've seen old apps ask for ~7000 samples per second.
Your limit of 8000 is too high.
Here's a patch to use DSBFREQUENCY_* like the other devices do.
Lemmix needs it (although I did not investigate why the msacm/pcmconverter
did not kick in and resample to a higher frequency).

More information about the wine-devel mailing list