From: Anton Baskanov <baskanov@gmail.com> --- dlls/dsound/dsound_convert.c | 18 ++++++------------ dlls/dsound/dsound_private.h | 2 +- dlls/dsound/mixer.c | 5 +++-- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/dlls/dsound/dsound_convert.c b/dlls/dsound/dsound_convert.c index 2a5878b2c95..d6c86f1959d 100644 --- a/dlls/dsound/dsound_convert.c +++ b/dlls/dsound/dsound_convert.c @@ -89,18 +89,6 @@ float getieee32(const IDirectSoundBufferImpl *dsb, BYTE *base, DWORD channel) return *sbuf; } -float get_mono(const IDirectSoundBufferImpl *dsb, BYTE *base, DWORD channel) -{ - DWORD channels = dsb->pwfx->nChannels; - DWORD c; - float val = 0; - /* XXX: does Windows include LFE into the mix? */ - for (c = 0; c < channels; c++) - val += dsb->get_aux(dsb, base, c); - val /= channels; - return val; -} - void putieee32(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) { BYTE *buf = (BYTE *)dsb->device->tmp_buffer; @@ -164,6 +152,12 @@ void put_stereo2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD c } } +void put_mono(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) +{ + /* XXX: does Windows include LFE into the mix? */ + dsb->put_aux(dsb, pos, 0, value); +} + void put_surround512stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value) { /* based on analyzing a recording of a dsound downmix */ diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h index a9ff0f04e3e..7f38d223767 100644 --- a/dlls/dsound/dsound_private.h +++ b/dlls/dsound/dsound_private.h @@ -170,12 +170,12 @@ struct IDirectSoundBufferImpl struct list entry; }; -float get_mono(const IDirectSoundBufferImpl *dsb, BYTE *base, DWORD channel); void put_mono2stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_mono2quad(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_stereo2quad(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_mono2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_stereo2surround51(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); +void put_mono(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_surround512stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_surround712stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); void put_quad2stereo(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel, float value); diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c index 56e7b3b95c6..6bded757739 100644 --- a/dlls/dsound/mixer.c +++ b/dlls/dsound/mixer.c @@ -164,8 +164,9 @@ void DSOUND_RecalcFormat(IDirectSoundBufferImpl *dsb) } else if (ochannels == 1) { - dsb->mix_channels = 1; - dsb->get = get_mono; + dsb->mix_channels = ichannels; + dsb->put = put_mono; + dsb->put_aux = putieee32_sum; } else if (ichannels == 2 && ochannels == 4) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11082