[PATCH 11/13] dsound: Unused functions removed.

Krzysztof Nikiel knik00 at gmail.com
Fri Feb 11 03:31:49 CST 2011


---
 dlls/dsound/mixer.c |  357
---------------------------------------------------
 1 files changed, 0 insertions(+), 357 deletions(-)

diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c
index 0d7afdb..4a0b60e 100644
--- a/dlls/dsound/mixer.c
+++ b/dlls/dsound/mixer.c
@@ -162,34 +162,6 @@ void DSOUND_CheckEvent(const IDirectSoundBufferImpl
*dsb, DWORD playpos, int len
     }
 }

-/**
- * Copy a single frame from the given input buffer to the given output
buffer.
- * Translate 8 <-> 16 bits and mono <-> stereo
- */
-static inline void cp_fields(const IDirectSoundBufferImpl *dsb, const BYTE
*ibuf, BYTE *obuf,
-        UINT istride, UINT ostride, UINT count, UINT freqAcc, UINT adj)
-{
-    DirectSoundDevice *device = dsb->device;
-    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)) {
-        dsb->convert(ibuf, obuf, istride, ostride, count, freqAcc, adj);
-        if (device->pwfx->nChannels == 2)
-            dsb->convert(ibuf + istep, obuf + ostep, istride, ostride,
count, freqAcc, adj);
-    }
-
-    if (device->pwfx->nChannels == 1 && dsb->pwfx->nChannels == 2)
-    {
-        dsb->convert(ibuf, obuf, istride, ostride, count, freqAcc, adj);
-    }
-
-    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);
-    }
-}

 /**
  * Calculate the distance between two buffer offsets, taking wraparound
@@ -206,335 +178,6 @@ static inline DWORD DSOUND_BufPtrDiff(DWORD buflen,
DWORD ptr1, DWORD ptr2)
         return buflen + ptr1 - ptr2;
     }
 }
-/**
- * Mix at most the given amount of data into the allocated temporary buffer
- * of the given secondary buffer, starting from the dsb's first currently
- * unsampled frame (writepos), translating frequency (pitch), stereo/mono
- * and bits-per-sample so that it is ideal for the primary buffer.
- * Doesn't perform any mixing - this is a straight copy/convert operation.
- *
- * dsb = the secondary buffer
- * writepos = Starting position of changed buffer
- * len = number of bytes to resample from writepos
- *
- * NOTE: writepos + len <= buflen. When called by mixer, MixOne makes sure
of this.
- */
-void DSOUND_MixToTemporary(const IDirectSoundBufferImpl *dsb, DWORD
writepos, DWORD len, BOOL inmixer)
-{
-    INT    size;
-    BYTE    *ibp, *obp, *obp_begin;
-    INT    iAdvance = dsb->pwfx->nBlockAlign;
-    INT    oAdvance = dsb->device->pwfx->nBlockAlign;
-    DWORD freqAcc, target_writepos = 0, overshot, maxlen;
-
-    /* We resample only when needed */
-    if ((dsb->tmp_buffer && inmixer) || (!dsb->tmp_buffer && !inmixer) ||
dsb->resampleinmixer != inmixer)
-        return;
-
-    assert(writepos + len <= dsb->buflen);
-    if (inmixer && writepos + len < dsb->buflen)
-        len += dsb->pwfx->nBlockAlign;
-
-    maxlen = DSOUND_secpos_to_bufpos(dsb, len, 0, NULL);
-
-    ibp = dsb->buffer->memory + writepos;
-    if (!inmixer)
-        obp_begin = dsb->tmp_buffer;
-    else if (dsb->device->tmp_buffer_len < maxlen ||
!dsb->device->tmp_buffer)
-    {
-        dsb->device->tmp_buffer_len = maxlen;
-        if (dsb->device->tmp_buffer)
-            dsb->device->tmp_buffer = HeapReAlloc(GetProcessHeap(), 0,
dsb->device->tmp_buffer, maxlen);
-        else
-            dsb->device->tmp_buffer = HeapAlloc(GetProcessHeap(), 0,
maxlen);
-        obp_begin = dsb->device->tmp_buffer;
-    }
-    else
-        obp_begin = dsb->device->tmp_buffer;
-
-    TRACE("(%p, %p)\n", dsb, ibp);
-    size = len / iAdvance;
-
-    /* Check for same sample rate */
-    if (dsb->freq == dsb->device->pwfx->nSamplesPerSec) {
-        TRACE("(%p) Same sample rate %d = primary %d\n", dsb,
-            dsb->freq, dsb->device->pwfx->nSamplesPerSec);
-        obp = obp_begin;
-        if (!inmixer)
-             obp += writepos/iAdvance*oAdvance;
-
-        cp_fields(dsb, ibp, obp, iAdvance, oAdvance, size, 0, 1 <<
DSOUND_FREQSHIFT);
-        return;
-    }
-
-    /* Mix in different sample rates */
-    TRACE("(%p) Adjusting frequency: %d -> %d\n", dsb, dsb->freq,
dsb->device->pwfx->nSamplesPerSec);
-
-    target_writepos = DSOUND_secpos_to_bufpos(dsb, writepos,
dsb->sec_mixpos, &freqAcc);
-    overshot = freqAcc >> DSOUND_FREQSHIFT;
-    if (overshot)
-    {
-        if (overshot >= size)
-            return;
-        size -= overshot;
-        writepos += overshot * iAdvance;
-        if (writepos >= dsb->buflen)
-            return;
-        ibp = dsb->buffer->memory + writepos;
-        freqAcc &= (1 << DSOUND_FREQSHIFT) - 1;
-        TRACE("Overshot: %d, freqAcc: %04x\n", overshot, freqAcc);
-    }
-
-    if (!inmixer)
-        obp = obp_begin + target_writepos;
-    else obp = obp_begin;
-
-    /* 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, obp, iAdvance, oAdvance, size, freqAcc,
dsb->freqAdjust);
-}
-
-/** Apply volume to the given soundbuffer from (primary) position writepos
and length len
- * Returns: NULL if no volume needs to be applied
- * or else a memory handle that holds 'len' volume adjusted buffer */
-static LPBYTE DSOUND_MixerVol(const IDirectSoundBufferImpl *dsb, INT len)
-{
-    INT    i;
-    BYTE    *bpc;
-    INT16    *bps, *mems;
-    DWORD vLeft, vRight;
-    INT nChannels = dsb->device->pwfx->nChannels;
-    LPBYTE mem = (dsb->tmp_buffer ? dsb->tmp_buffer : dsb->buffer->memory)
+ dsb->buf_mixpos;
-
-    if (dsb->resampleinmixer)
-        mem = dsb->device->tmp_buffer;
-
-    TRACE("(%p,%d)\n",dsb,len);
-    TRACE("left = %x, right = %x\n", dsb->volpan.dwTotalLeftAmpFactor,
-        dsb->volpan.dwTotalRightAmpFactor);
-
-    if ((!(dsb->dsbd.dwFlags & DSBCAPS_CTRLPAN) || (dsb->volpan.lPan == 0))
&&
-        (!(dsb->dsbd.dwFlags & DSBCAPS_CTRLVOLUME) || (dsb->volpan.lVolume
== 0)) &&
-         !(dsb->dsbd.dwFlags & DSBCAPS_CTRL3D))
-        return NULL; /* Nothing to do */
-
-    if (nChannels != 1 && nChannels != 2)
-    {
-        FIXME("There is no support for %d channels\n", nChannels);
-        return NULL;
-    }
-
-    if (dsb->device->pwfx->wBitsPerSample != 8 &&
dsb->device->pwfx->wBitsPerSample != 16)
-    {
-        FIXME("There is no support for %d bpp\n",
dsb->device->pwfx->wBitsPerSample);
-        return NULL;
-    }
-
-    if (dsb->device->tmp_buffer_len < len || !dsb->device->tmp_buffer)
-    {
-        /* If we just resampled in DSOUND_MixToTemporary, we shouldn't need
to resize here */
-        assert(!dsb->resampleinmixer);
-        dsb->device->tmp_buffer_len = len;
-        if (dsb->device->tmp_buffer)
-            dsb->device->tmp_buffer = HeapReAlloc(GetProcessHeap(), 0,
dsb->device->tmp_buffer, len);
-        else
-            dsb->device->tmp_buffer = HeapAlloc(GetProcessHeap(), 0, len);
-    }
-
-    bpc = dsb->device->tmp_buffer;
-    bps = (INT16 *)bpc;
-    mems = (INT16 *)mem;
-    vLeft = dsb->volpan.dwTotalLeftAmpFactor;
-    if (nChannels > 1)
-        vRight = dsb->volpan.dwTotalRightAmpFactor;
-    else
-        vRight = vLeft;
-
-    switch (dsb->device->pwfx->wBitsPerSample) {
-    case 8:
-        /* 8-bit WAV is unsigned, but we need to operate */
-        /* on signed data for this to work properly */
-        for (i = 0; i < len-1; i+=2) {
-            *(bpc++) = (((*(mem++) - 128) * vLeft) >> 16) + 128;
-            *(bpc++) = (((*(mem++) - 128) * vRight) >> 16) + 128;
-        }
-        if (len % 2 == 1 && nChannels == 1)
-            *(bpc++) = (((*(mem++) - 128) * vLeft) >> 16) + 128;
-        break;
-    case 16:
-        /* 16-bit WAV is signed -- much better */
-        for (i = 0; i < len-3; i += 4) {
-            *(bps++) = (*(mems++) * vLeft) >> 16;
-            *(bps++) = (*(mems++) * vRight) >> 16;
-        }
-        if (len % 4 == 2 && nChannels == 1)
-            *(bps++) = ((INT)*(mems++) * vLeft) >> 16;
-        break;
-    }
-    return dsb->device->tmp_buffer;
-}
-
-/**
- * Mix (at most) the given number of bytes into the given position of the
- * device buffer, from the secondary buffer "dsb" (starting at the current
- * mix position for that buffer).
- *
- * Returns the number of bytes actually mixed into the device buffer. This
- * will match fraglen unless the end of the secondary buffer is reached
- * (and it is not looping).
- *
- * dsb  = the secondary buffer to mix from
- * writepos = position (offset) in device buffer to write at
- * fraglen = number of bytes to mix
- */
-static DWORD DSOUND_MixInBuffer(IDirectSoundBufferImpl *dsb, DWORD
writepos, DWORD fraglen)
-{
-    INT len = fraglen, ilen;
-    BYTE *ibuf = (dsb->tmp_buffer ? dsb->tmp_buffer : dsb->buffer->memory)
+ dsb->buf_mixpos, *volbuf;
-    DWORD oldpos, mixbufpos;
-
-    TRACE("buf_mixpos=%d/%d sec_mixpos=%d/%d\n", dsb->buf_mixpos,
dsb->tmp_buffer_len, dsb->sec_mixpos, dsb->buflen);
-    TRACE("(%p,%d,%d)\n",dsb,writepos,fraglen);
-
-    assert(dsb->buf_mixpos + len <= dsb->tmp_buffer_len);
-
-    if (len % dsb->device->pwfx->nBlockAlign) {
-        INT nBlockAlign = dsb->device->pwfx->nBlockAlign;
-        ERR("length not a multiple of block size, len = %d, block size =
%d\n", len, nBlockAlign);
-        len -= len % nBlockAlign; /* data alignment */
-    }
-
-    /* Resample buffer to temporary buffer specifically allocated for this
purpose, if needed */
-    DSOUND_MixToTemporary(dsb, dsb->sec_mixpos,
DSOUND_bufpos_to_secpos(dsb, dsb->buf_mixpos+len) - dsb->sec_mixpos, TRUE);
-    if (dsb->resampleinmixer)
-        ibuf = dsb->device->tmp_buffer;
-
-    /* Apply volume if needed */
-    volbuf = DSOUND_MixerVol(dsb, len);
-    if (volbuf)
-        ibuf = volbuf;
-
-    mixbufpos = DSOUND_bufpos_to_mixpos(dsb->device, writepos);
-    /* Now mix the temporary buffer into the devices main buffer */
-    if ((writepos + len) <= dsb->device->buflen)
-        dsb->device->mixfunction(ibuf, dsb->device->mix_buffer + mixbufpos,
len);
-    else
-    {
-        DWORD todo = dsb->device->buflen - writepos;
-        dsb->device->mixfunction(ibuf, dsb->device->mix_buffer + mixbufpos,
todo);
-        dsb->device->mixfunction(ibuf + todo, dsb->device->mix_buffer, len
- todo);
-    }
-
-    oldpos = dsb->sec_mixpos;
-    dsb->buf_mixpos += len;
-
-    if (dsb->buf_mixpos >= dsb->tmp_buffer_len) {
-        if (dsb->buf_mixpos > dsb->tmp_buffer_len)
-            ERR("Mixpos (%u) past buflen (%u), capping...\n",
dsb->buf_mixpos, dsb->tmp_buffer_len);
-        if (dsb->playflags & DSBPLAY_LOOPING) {
-            dsb->buf_mixpos -= dsb->tmp_buffer_len;
-        } else if (dsb->buf_mixpos >= dsb->tmp_buffer_len) {
-            dsb->buf_mixpos = dsb->sec_mixpos = 0;
-            dsb->state = STATE_STOPPED;
-        }
-        DSOUND_RecalcFreqAcc(dsb);
-    }
-
-    dsb->sec_mixpos = DSOUND_bufpos_to_secpos(dsb, dsb->buf_mixpos);
-    ilen = DSOUND_BufPtrDiff(dsb->buflen, dsb->sec_mixpos, oldpos);
-    /* check for notification positions */
-    if (dsb->dsbd.dwFlags & DSBCAPS_CTRLPOSITIONNOTIFY &&
-        dsb->state != STATE_STARTING) {
-        DSOUND_CheckEvent(dsb, oldpos, ilen);
-    }
-
-    /* increase mix position */
-    dsb->primary_mixpos += len;
-    if (dsb->primary_mixpos >= dsb->device->buflen)
-        dsb->primary_mixpos -= dsb->device->buflen;
-    return len;
-}
-
-/**
- * Mix some frames from the given secondary buffer "dsb" into the device
- * primary buffer.
- *
- * dsb = the secondary buffer
- * playpos = the current play position in the device buffer (primary
buffer)
- * writepos = the current safe-to-write position in the device buffer
- * mixlen = the maximum number of bytes in the primary buffer to mix, from
the
- *          current writepos.
- *
- * Returns: the number of bytes beyond the writepos that were mixed.
- */
-static DWORD DSOUND_MixOne(IDirectSoundBufferImpl *dsb, DWORD writepos,
DWORD mixlen)
-{
-    /* The buffer's primary_mixpos may be before or after the device
-     * buffer's mixpos, but both must be ahead of writepos. */
-    DWORD primary_done;
-
-    TRACE("(%p,%d,%d)\n",dsb,writepos,mixlen);
-    TRACE("writepos=%d, buf_mixpos=%d, primary_mixpos=%d, mixlen=%d\n",
writepos, dsb->buf_mixpos, dsb->primary_mixpos, mixlen);
-    TRACE("looping=%d, leadin=%d, buflen=%d\n", dsb->playflags,
dsb->leadin, dsb->tmp_buffer_len);
-
-    /* If leading in, only mix about 20 ms, and 'skip' mixing the rest, for
more fluid pointer advancement */
-    if (dsb->leadin && dsb->state == STATE_STARTING)
-    {
-        if (mixlen > 2 * dsb->device->fraglen)
-        {
-            dsb->primary_mixpos += mixlen - 2 * dsb->device->fraglen;
-            dsb->primary_mixpos %= dsb->device->buflen;
-        }
-    }
-    dsb->leadin = FALSE;
-
-    /* calculate how much pre-buffering has already been done for this
buffer */
-    primary_done = DSOUND_BufPtrDiff(dsb->device->buflen,
dsb->primary_mixpos, writepos);
-
-    /* sanity */
-    if(mixlen < primary_done)
-    {
-        /* Should *NEVER* happen */
-        ERR("Fatal error. Under/Overflow? primary_done=%d, mixpos=%d/%d
(%d/%d), primary_mixpos=%d, writepos=%d, mixlen=%d\n",
primary_done,dsb->buf_mixpos,dsb->tmp_buffer_len,dsb->sec_mixpos,
dsb->buflen, dsb->primary_mixpos, writepos, mixlen);
-        dsb->primary_mixpos = writepos + mixlen;
-        dsb->primary_mixpos %= dsb->device->buflen;
-        return mixlen;
-    }
-
-    /* take into account already mixed data */
-    mixlen -= primary_done;
-
-    TRACE("primary_done=%d, mixlen (primary) = %i\n", primary_done,
mixlen);
-
-    if (!mixlen)
-        return primary_done;
-
-    /* First try to mix to the end of the buffer if possible
-     * Theoretically it would allow for better optimization
-    */
-    if (mixlen + dsb->buf_mixpos >= dsb->tmp_buffer_len)
-    {
-        DWORD newmixed, mixfirst = dsb->tmp_buffer_len - dsb->buf_mixpos;
-        newmixed = DSOUND_MixInBuffer(dsb, dsb->primary_mixpos, mixfirst);
-        mixlen -= newmixed;
-
-        if (dsb->playflags & DSBPLAY_LOOPING)
-            while (newmixed && mixlen)
-            {
-                mixfirst = (dsb->tmp_buffer_len < mixlen ?
dsb->tmp_buffer_len : mixlen);
-                newmixed = DSOUND_MixInBuffer(dsb, dsb->primary_mixpos,
mixfirst);
-                mixlen -= newmixed;
-            }
-    }
-    else DSOUND_MixInBuffer(dsb, dsb->primary_mixpos, mixlen);
-
-    /* re-calculate the primary done */
-    primary_done = DSOUND_BufPtrDiff(dsb->device->buflen,
dsb->primary_mixpos, writepos);
-
-    TRACE("new primary_mixpos=%d, total mixed data=%d\n",
dsb->primary_mixpos, primary_done);
-
-    /* Report back the total prebuffered amount for this buffer */
-    return primary_done;
-}

 /**
  * For a DirectSoundDevice, go through all the currently playing buffers
and
-- 
1.7.2.3
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-patches/attachments/20110211/4e3cf911/attachment-0001.htm>


More information about the wine-patches mailing list