[PATCH] winealsa: fix input sound distortion and heap corruption
Andrew Eikum
aeikum at codeweavers.com
Fri Nov 7 08:12:43 CST 2014
On Fri, Nov 07, 2014 at 04:06:55AM +0000, Mark Harmstone wrote:
> At present, winealsa attempts to call map_channels when a capture
> device is opened. If a microphone can be opened in either stereo or
> mono mode, and mono is requested, Wine will still return stereo
> data. Not only does this result in distorted in audio, it also very
> frequently results in heap corruption when snd_pcm_readi overruns
> the buffer allocated by the program.
>
Thanks for fixing this.
The patch doesn't apply because it got mangled in transit:
http://source.winehq.org/patches/data/107529
The idea look OK to me, but don't we want to disable channel remapping
for _all_ capture devices? Your patch only disables it if the
application is using WAVE_FORMAT_EXTENSIBLE
I don't think we can do capture channel remapping reliably without
switching to the new ALSA channel mapping API. So it makes sense to
disable it entirely for now.
Andrew
> I don't have a copy of World of Warcraft to test this on, but this
> may also fix bug 31684. It's the same symptoms, at least.
>
> ---
> dlls/winealsa.drv/mmdevdrv.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c
> index a4c02bf..91fba2f 100644
> --- a/dlls/winealsa.drv/mmdevdrv.c
> +++ b/dlls/winealsa.drv/mmdevdrv.c
> @@ -1164,7 +1164,7 @@ static DWORD get_channel_mask(unsigned int channels)
>
> static HRESULT map_channels(ACImpl *This, const WAVEFORMATEX *fmt)
> {
> - if(fmt->wFormatTag == WAVE_FORMAT_EXTENSIBLE || fmt->nChannels > 2){
> + if( (This->dataflow != eCapture && fmt->wFormatTag ==
> WAVE_FORMAT_EXTENSIBLE) || fmt->nChannels > 2){
> WAVEFORMATEXTENSIBLE *fmtex = (void*)fmt;
> DWORD mask, flag = SPEAKER_FRONT_LEFT;
> UINT i = 0;
> --
> 2.0.4
>
>
More information about the wine-devel
mailing list