Module: wine Branch: master Commit: 54ff22b8443fcc3023ef8d384656f2f24608a2f8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=54ff22b8443fcc3023ef8d3846...
Author: Andrew Eikum aeikum@codeweavers.com Date: Tue Mar 1 14:57:35 2011 -0600
dsound: Also handle two-to-six-channel conversions.
---
dlls/dsound/mixer.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c index 6647e4a..846278e 100644 --- a/dlls/dsound/mixer.c +++ b/dlls/dsound/mixer.c @@ -294,22 +294,29 @@ static inline void cp_fields(const IDirectSoundBufferImpl *dsb, const BYTE *ibuf INT istep = dsb->pwfx->wBitsPerSample / 8, ostep = device->pwfx->wBitsPerSample / 8;
if (device->pwfx->nChannels == dsb->pwfx->nChannels || - (device->pwfx->nChannels == 2 && dsb->pwfx->nChannels == 6)) { + (device->pwfx->nChannels == 2 && dsb->pwfx->nChannels == 6) || + (device->pwfx->nChannels == 6 && dsb->pwfx->nChannels == 2)) { dsb->convert(ibuf, obuf, istride, ostride, count, freqAcc, adj); - if (device->pwfx->nChannels == 2) + if (device->pwfx->nChannels == 2 || dsb->pwfx->nChannels == 2) dsb->convert(ibuf + istep, obuf + ostep, istride, ostride, count, freqAcc, adj); + return; }
if (device->pwfx->nChannels == 1 && dsb->pwfx->nChannels == 2) { dsb->convert(ibuf, obuf, istride, ostride, count, freqAcc, adj); + return; }
if (device->pwfx->nChannels == 2 && dsb->pwfx->nChannels == 1) { dsb->convert(ibuf, obuf, istride, ostride, count, freqAcc, adj); dsb->convert(ibuf, obuf + ostep, istride, ostride, count, freqAcc, adj); + return; } + + WARN("Unable to remap channels: device=%u, buffer=%u\n", device->pwfx->nChannels, + dsb->pwfx->nChannels); }
/**