---<br> dlls/dsound/mixer.c |  133 ++------------------------------------------------<br> 1 files changed, 6 insertions(+), 127 deletions(-)<br><br>diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c<br>index e08cbca..0d7afdb 100644<br>
--- a/dlls/dsound/mixer.c<br>+++ b/dlls/dsound/mixer.c<br>@@ -95,138 +95,17 @@ void DSOUND_AmpFactorToVolPan(PDSVOLUMEPAN volpan)<br>     TRACE(&quot;Vol=%d Pan=%d\n&quot;, volpan-&gt;lVolume, volpan-&gt;lPan);<br> }<br> <br>
-/** Convert a primary buffer position to a pointer position for device-&gt;mix_buffer<br>- * device: DirectSoundDevice for which to calculate<br>- * pos: Primary buffer position to converts<br>- * Returns: Offset for mix_buffer<br>
- */<br>-DWORD DSOUND_bufpos_to_mixpos(const DirectSoundDevice* device, DWORD pos)<br>-{<br>-    DWORD ret = pos * 32 / device-&gt;pwfx-&gt;wBitsPerSample;<br>-    if (device-&gt;pwfx-&gt;wBitsPerSample == 32)<br>-        ret *= 2;<br>
-    return ret;<br>-}<br>-<br>-/* NOTE: Not all secpos have to always be mapped to a bufpos, other way around is always the case<br>- * DWORD64 is used here because a single DWORD wouldn&#39;t be big enough to fit the freqAcc for big buffers<br>
- */<br> /** This function converts a &#39;native&#39; sample pointer to a resampled pointer that fits for primary<br>- * secmixpos is used to decide which freqAcc is needed<br>- * overshot tells what the &#39;actual&#39; secpos is now (optional)<br>
- */<br>-DWORD DSOUND_secpos_to_bufpos(const IDirectSoundBufferImpl *dsb, DWORD secpos, DWORD secmixpos, DWORD* overshot)<br>-{<br>-    DWORD64 framelen = secpos / dsb-&gt;pwfx-&gt;nBlockAlign;<br>-    DWORD64 freqAdjust = dsb-&gt;freqAdjust;<br>
-    DWORD64 acc, freqAcc;<br>-<br>-    if (secpos &lt; secmixpos)<br>-        freqAcc = dsb-&gt;freqAccNext;<br>-    else freqAcc = dsb-&gt;freqAcc;<br>-    acc = (framelen &lt;&lt; DSOUND_FREQSHIFT) + (freqAdjust - 1 - freqAcc);<br>
-    acc /= freqAdjust;<br>-    if (overshot)<br>-    {<br>-        DWORD64 oshot = acc * freqAdjust + freqAcc;<br>-        assert(oshot &gt;= framelen &lt;&lt; DSOUND_FREQSHIFT);<br>-        oshot -= framelen &lt;&lt; DSOUND_FREQSHIFT;<br>
-        *overshot = (DWORD)oshot;<br>-        assert(*overshot &lt; dsb-&gt;freqAdjust);<br>-    }<br>-    return (DWORD)acc * dsb-&gt;device-&gt;pwfx-&gt;nBlockAlign;<br>-}<br>-<br>-/** Convert a resampled pointer that fits for primary to a &#39;native&#39; sample pointer<br>
- * freqAccNext is used here rather than freqAcc: In case the app wants to fill up to<br>- * the play position it won&#39;t overwrite it<br>- */<br>-static DWORD DSOUND_bufpos_to_secpos(const IDirectSoundBufferImpl *dsb, DWORD bufpos)<br>
-{<br>-    DWORD oAdv = dsb-&gt;device-&gt;pwfx-&gt;nBlockAlign, iAdv = dsb-&gt;pwfx-&gt;nBlockAlign, pos;<br>-    DWORD64 framelen;<br>-    DWORD64 acc;<br>-<br>-    framelen = bufpos/oAdv;<br>-    acc = framelen * (DWORD64)dsb-&gt;freqAdjust + (DWORD64)dsb-&gt;freqAccNext;<br>
-    acc = acc &gt;&gt; DSOUND_FREQSHIFT;<br>-    pos = (DWORD)acc * iAdv;<br>-    if (pos &gt;= dsb-&gt;buflen)<br>-        /* Because of differences between freqAcc and freqAccNext, this might happen */<br>-        pos = dsb-&gt;buflen - iAdv;<br>
-    TRACE(&quot;Converted %d/%d to %d/%d\n&quot;, bufpos, dsb-&gt;tmp_buffer_len, pos, dsb-&gt;buflen);<br>-    return pos;<br>-}<br>-<br>-/**<br>- * Move freqAccNext to freqAcc, and find new values for buffer length and freqAccNext<br>
  */<br>-static void DSOUND_RecalcFreqAcc(IDirectSoundBufferImpl *dsb)<br>+DWORD DSOUND_secpos_to_bufpos(const IDirectSoundBufferImpl *dsb, DWORD secpos)<br> {<br>-    if (!dsb-&gt;freqneeded) return;<br>-    dsb-&gt;freqAcc = dsb-&gt;freqAccNext;<br>
-    dsb-&gt;tmp_buffer_len = DSOUND_secpos_to_bufpos(dsb, dsb-&gt;buflen, 0, &amp;dsb-&gt;freqAccNext);<br>-    TRACE(&quot;New freqadjust: %04x, new buflen: %d\n&quot;, dsb-&gt;freqAccNext, dsb-&gt;tmp_buffer_len);<br>-}<br>
-<br>-/**<br>- * Recalculate the size for temporary buffer, and new writelead<br>- * Should be called when one of the following things occur:<br>- * - Primary buffer format is changed<br>- * - This buffer format (frequency) is changed<br>
- *<br>- * After this, DSOUND_MixToTemporary(dsb, 0, dsb-&gt;buflen) should<br>- * be called to refill the temporary buffer with data.<br>- */<br>-void DSOUND_RecalcFormat(IDirectSoundBufferImpl *dsb)<br>-{<br>-    BOOL needremix = TRUE, needresample = (dsb-&gt;freq != dsb-&gt;device-&gt;pwfx-&gt;nSamplesPerSec);<br>
-    DWORD bAlign = dsb-&gt;pwfx-&gt;nBlockAlign, pAlign = dsb-&gt;device-&gt;pwfx-&gt;nBlockAlign;<br>-    WAVEFORMATEXTENSIBLE *pwfxe;<br>-    BOOL ieee = FALSE;<br>-<br>-    TRACE(&quot;(%p)\n&quot;,dsb);<br>-<br>-    pwfxe = (WAVEFORMATEXTENSIBLE *) dsb-&gt;pwfx;<br>
-<br>-    if ((pwfxe-&gt;Format.wFormatTag == WAVE_FORMAT_IEEE_FLOAT) || ((pwfxe-&gt;Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE)<br>-        &amp;&amp; (IsEqualGUID(&amp;pwfxe-&gt;SubFormat, &amp;KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))))<br>
-        ieee = TRUE;<br>+    DWORD insample = secpos / dsb-&gt;pwfx-&gt;nBlockAlign;<br>+    DWORD outsample = insample * dsb-&gt;outfreq / dsb-&gt;freq;<br>+    DWORD bufpos = outsample * dsb-&gt;device-&gt;pwfx-&gt;nBlockAlign;<br>
 <br>-    /* calculate the 10ms write lead */<br>-    dsb-&gt;writelead = (dsb-&gt;freq / 100) * dsb-&gt;pwfx-&gt;nBlockAlign;<br>+    bufpos %= dsb-&gt;device-&gt;buflen;<br> <br>-    if ((dsb-&gt;pwfx-&gt;wBitsPerSample == dsb-&gt;device-&gt;pwfx-&gt;wBitsPerSample) &amp;&amp;<br>
-        (dsb-&gt;pwfx-&gt;nChannels == dsb-&gt;device-&gt;pwfx-&gt;nChannels) &amp;&amp; !needresample &amp;&amp; !ieee)<br>-        needremix = FALSE;<br>-    HeapFree(GetProcessHeap(), 0, dsb-&gt;tmp_buffer);<br>-    dsb-&gt;tmp_buffer = NULL;<br>
-    dsb-&gt;max_buffer_len = dsb-&gt;freqAcc = dsb-&gt;freqAccNext = 0;<br>-    dsb-&gt;freqneeded = needresample;<br>-<br>-    if (ieee)<br>-        dsb-&gt;convert = convertbpp[4][dsb-&gt;device-&gt;pwfx-&gt;wBitsPerSample/8 - 1];<br>
-    else<br>-        dsb-&gt;convert = convertbpp[dsb-&gt;pwfx-&gt;wBitsPerSample/8 - 1][dsb-&gt;device-&gt;pwfx-&gt;wBitsPerSample/8 - 1];<br>-<br>-    dsb-&gt;resampleinmixer = FALSE;<br>-<br>-    if (needremix)<br>-    {<br>
-        if (needresample)<br>-            DSOUND_RecalcFreqAcc(dsb);<br>-        else<br>-            dsb-&gt;tmp_buffer_len = dsb-&gt;buflen / bAlign * pAlign;<br>-        dsb-&gt;max_buffer_len = dsb-&gt;tmp_buffer_len;<br>
-        if ((dsb-&gt;max_buffer_len &lt;= dsb-&gt;device-&gt;buflen || dsb-&gt;max_buffer_len &lt; ds_snd_shadow_maxsize * 1024 * 1024) &amp;&amp; ds_snd_shadow_maxsize &gt;= 0)<br>-            dsb-&gt;tmp_buffer = HeapAlloc(GetProcessHeap(), 0, dsb-&gt;max_buffer_len);<br>
-        if (dsb-&gt;tmp_buffer)<br>-            FillMemory(dsb-&gt;tmp_buffer, dsb-&gt;tmp_buffer_len, dsb-&gt;device-&gt;pwfx-&gt;wBitsPerSample == 8 ? 128 : 0);<br>-        else<br>-            dsb-&gt;resampleinmixer = TRUE;<br>
-    }<br>-    else dsb-&gt;max_buffer_len = dsb-&gt;tmp_buffer_len = dsb-&gt;buflen;<br>-    dsb-&gt;buf_mixpos = DSOUND_secpos_to_bufpos(dsb, dsb-&gt;sec_mixpos, 0, NULL);<br>+    return bufpos;<br> }<br> <br> /**<br>-- <br>
1.7.2.3<br><br><br>