http://bugs.winehq.org/show_bug.cgi?id=10495
--- Comment #312 from Raymond superquad.vortex2@gmail.com 2011-01-18 19:27:17 CST --- (In reply to comment #310)
If pulseaudio take up the role of Kmixer in linux , winepulse should provide hardware secondary buffers like the Kmixer in windows
...
why onboard HDA cannot use Full Acceleration (i.e. hardware secondary buffers) with winepulse
winepulse CANNOT provide hardware acceleration in any way because pulse is a software-only mixer that locks out all applications from direct hardware access (as well as dmix).
DSCAPS_CONTINUOUSRATE The device supports all sample rates between the dwMinSecondarySampleRate and dwMaxSecondarySampleRate member values. Typically, this means that the actual output rate will be within +/- 10 hertz (Hz) of the requested frequency.
DSCAPS_SECONDARY16BIT The device supports hardware-mixed secondary sound buffers with 16-bit samples. DSCAPS_SECONDARY8BIT The device supports hardware-mixed secondary buffers with 8-bit samples. DSCAPS_SECONDARYMONO The device supports hardware-mixed monophonic secondary buffers. DSCAPS_SECONDARYSTEREO The device supports hardware-mixed stereo secondary buffers
this mean winealsa.drv is incorrect to use those flags when it disable the alsa-lib resampling
*flags = DSCAPS_CERTIFIED | DSCAPS_CONTINUOUSRATE; *flags |= DSCAPS_SECONDARYMONO | DSCAPS_SECONDARYSTEREO; *flags |= DSCAPS_SECONDARY8BIT | DSCAPS_SECONDARY16BIT;
since only wineoss.drv with ossv4 have hardware mixing buffers which define PCM_CAP_MULT
#define DSP_CAP_MULTI PCM_CAP_MULTI
#ifdef DSP_CAP_MULTI /* not every oss has this */ /* check for hardware secondary buffer support (multi open) */ if ((arg & DSP_CAP_MULTI) && (ossdev->out_caps.dwSupport & WAVECAPS_DIRECTSOUND)) { TRACE("hardware secondary buffer support available\n");
ossdev->ds_caps.dwMaxHwMixingAllBuffers = 16; ossdev->ds_caps.dwMaxHwMixingStaticBuffers = 0; ossdev->ds_caps.dwMaxHwMixingStreamingBuffers = 16;
ossdev->ds_caps.dwFreeHwMixingAllBuffers = 16; ossdev->ds_caps.dwFreeHwMixingStaticBuffers = 0; ossdev->ds_caps.dwFreeHwMixingStreamingBuffers = 16; } #endif
This is equivalent to those 16 or more playback subdevices in alsa