dsound: Clean up cp_fields.

This commit is contained in:
Alexander E. Patrakov 2011-12-12 14:03:19 -06:00 committed by Alexandre Julliard
parent f88f3d4149
commit ab4ef6636d
1 changed files with 10 additions and 13 deletions

View File

@ -269,16 +269,19 @@ void DSOUND_CheckEvent(const IDirectSoundBufferImpl *dsb, DWORD playpos, int len
} }
/** /**
* Copy a single frame from the given input buffer to the given output buffer. * Copy frames from the given input buffer to the given output buffer.
* Translate 8 <-> 16 bits and mono <-> stereo * Translate 8 <-> 16 bits and mono <-> stereo
*/ */
static inline void cp_fields(const IDirectSoundBufferImpl *dsb, const BYTE *ibuf, static inline void cp_fields(const IDirectSoundBufferImpl *dsb,
UINT istride, UINT ostride, UINT count, UINT freqAcc, UINT adj) UINT ostride, UINT count, UINT freqAcc)
{ {
DWORD ipos = dsb->sec_mixpos;
UINT istride = dsb->pwfx->nBlockAlign;
UINT adj = dsb->freqAdjust;
DirectSoundDevice *device = dsb->device; DirectSoundDevice *device = dsb->device;
float value; float value;
ULONG adv; ULONG adv;
DWORD ipos = dsb->sec_mixpos, opos = 0; DWORD opos = 0;
while (count-- > 0) { while (count-- > 0) {
if (device->pwfx->nChannels == dsb->pwfx->nChannels || if (device->pwfx->nChannels == dsb->pwfx->nChannels ||
@ -345,13 +348,10 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen, DWORD ptr1, DWORD ptr2)
*/ */
static void DSOUND_MixToTemporary(const IDirectSoundBufferImpl *dsb, DWORD tmp_len) static void DSOUND_MixToTemporary(const IDirectSoundBufferImpl *dsb, DWORD tmp_len)
{ {
INT size;
BYTE *ibp;
INT iAdvance = dsb->pwfx->nBlockAlign;
INT oAdvance = dsb->device->pwfx->nBlockAlign; INT oAdvance = dsb->device->pwfx->nBlockAlign;
INT size = tmp_len / oAdvance;
DWORD freqAcc; DWORD freqAcc;
ibp = dsb->buffer->memory + dsb->sec_mixpos;
if (dsb->device->tmp_buffer_len < tmp_len || !dsb->device->tmp_buffer) if (dsb->device->tmp_buffer_len < tmp_len || !dsb->device->tmp_buffer)
{ {
dsb->device->tmp_buffer_len = tmp_len; dsb->device->tmp_buffer_len = tmp_len;
@ -361,15 +361,12 @@ static void DSOUND_MixToTemporary(const IDirectSoundBufferImpl *dsb, DWORD tmp_l
dsb->device->tmp_buffer = HeapAlloc(GetProcessHeap(), 0, tmp_len); dsb->device->tmp_buffer = HeapAlloc(GetProcessHeap(), 0, tmp_len);
} }
TRACE("(%p, %p)\n", dsb, ibp);
size = tmp_len / oAdvance;
/* Check for same sample rate */ /* Check for same sample rate */
if (dsb->freq == dsb->device->pwfx->nSamplesPerSec) { if (dsb->freq == dsb->device->pwfx->nSamplesPerSec) {
TRACE("(%p) Same sample rate %d = primary %d\n", dsb, TRACE("(%p) Same sample rate %d = primary %d\n", dsb,
dsb->freq, dsb->device->pwfx->nSamplesPerSec); dsb->freq, dsb->device->pwfx->nSamplesPerSec);
cp_fields(dsb, ibp, iAdvance, oAdvance, size, 0, 1 << DSOUND_FREQSHIFT); cp_fields(dsb, oAdvance, size, 0);
return; return;
} }
@ -379,7 +376,7 @@ static void DSOUND_MixToTemporary(const IDirectSoundBufferImpl *dsb, DWORD tmp_l
DSOUND_secpos_to_bufpos(dsb, dsb->sec_mixpos, dsb->sec_mixpos, &freqAcc); DSOUND_secpos_to_bufpos(dsb, dsb->sec_mixpos, dsb->sec_mixpos, &freqAcc);
/* FIXME: Small problem here when we're overwriting buf_mixpos, it then STILL uses old freqAcc, not sure if it matters or not */ /* FIXME: Small problem here when we're overwriting buf_mixpos, it then STILL uses old freqAcc, not sure if it matters or not */
cp_fields(dsb, ibp, iAdvance, oAdvance, size, freqAcc, dsb->freqAdjust); cp_fields(dsb, oAdvance, size, freqAcc);
} }
/** Apply volume to the given soundbuffer from (primary) position writepos and length len /** Apply volume to the given soundbuffer from (primary) position writepos and length len