[PATCH 1/7] dsound: Remove support for IKsPropertySet for now

Robert Reif reif at earthlink.net
Fri Dec 4 18:29:46 CST 2009

I don't have issues with what Maarten is trying to accomplish.  In fact 
I'm happy to see someone making a serious effort to fix wine audio.  
What I do have serious issue with is the way he is attacking the problem.

The windows 95 driver model is not a bad model.  If you look at the 
winmm driver API and the winmm API, they are virtually the same.  The 
same is true for the direct sound driver API and the direct sound API.  
Under ideal circumstances the winmm and direct sound dlls are doing 
nothing but marshaling between user space and kernel space.  An 
application is virtually interfacing directly with the audio driver.

The problem with the windows 95 driver model is that the user experience 
depends totally on the quality of the sound driver and sound hardware.  
If the hardware doesn't do something, an application using it also can't 
do it.  Microsoft redesigned their sound system to provide consistent 
audio capabilities regardless of the hardware capabilities by placing 
software between the drivers and the APIs to change whatever the APIs 
requested to something the hardware can handle.  Also because all audio 
drivers were virtually the same, they also refactored the audio system 
to place common code in intermediate software layers. 

The problems Microsoft had are the same problems wine currently has: 
inconsistent audio experience.  Wine audio works fine for some people 
and not at all for others because the hardware and operating system and 
audio API they are using are different.

The approach Maarten is taking by starting with direct sound is 
backwards and will cause serious regressions.  You can't just throw out 
working code that applications use just because most people won't 
notice.  Maarten has admitted that he will have to develop an openal 
winmm driver but not right away.  What he should do is develop that 
driver first and get it working well along side the current drivers.  
This won't immediately help direct sound but direct sound will be able 
to use it.

The next step should be to decide if we want to use openal as the one 
and only audio API in wine.  If so, then we have two approaches to do 
that.  We can add a direct sound API to the openal winmm driver just 
like we do with existing drivers or put openal code in the direct sound 
dll.  If we are absolutely confident that the openal winmm driver can 
operate properly with the openal direct sound dll at the same time, then 
that would be a reasonable approach.  The only down side is that audio 
code is not centralized. If state needs to be shared between the two 
APIs, then a single driver is the best approach.

The big problem with the current direct sound dll is that it must do 
software mixing and format and sample rate conversions when the low 
level driver doesn't do what the application requested.  In wine, none 
of the drivers can  do what is requested. If the low level driver was 
guaranteed to do anything the application requested, we could remove 
that code.  Then we are down to just marshaling between the app and the 
audio driver or API.

We need a design approach and a road map and an agreement that the 
approach is correct.  We also need to insure that regressions are not 
introduced during the process.  I would like to see an incremental 
solution that doesn't introduce regressions.  That is developing an 
openal winmm driver first and then address the best solution for the 
direct sound issue later.  Not the other way around.

More information about the wine-devel mailing list