Andrew Eikum : mmdevapi: Clock rate should be in bytes for shared mode.
Module: wine Branch: master Commit: 0e84a59d8946a362ad0d017c0d23d7cf62a0fc63 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e84a59d8946a362ad0d017c0d... Author: Andrew Eikum <aeikum(a)codeweavers.com> Date: Mon May 19 08:59:26 2014 -0500 mmdevapi: Clock rate should be in bytes for shared mode. --- dlls/mmdevapi/tests/render.c | 2 +- dlls/winealsa.drv/mmdevdrv.c | 10 ++++++++-- dlls/winecoreaudio.drv/mmdevdrv.c | 8 +++++++- dlls/wineoss.drv/mmdevdrv.c | 8 +++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/dlls/mmdevapi/tests/render.c b/dlls/mmdevapi/tests/render.c index 3cadcee..91ed029 100644 --- a/dlls/mmdevapi/tests/render.c +++ b/dlls/mmdevapi/tests/render.c @@ -955,7 +955,7 @@ static void test_clock(int share) trace("Clock Frequency %u\n", (UINT)freq); /* MSDN says it's arbitrary units, but shared mode is unlikely to change */ - if (share) todo_wine + if (share) ok(freq == pwfx->nSamplesPerSec * pwfx->nBlockAlign, "Clock Frequency %u\n", (UINT)freq); else diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index 30531a8..5e40d6e 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -2822,7 +2822,10 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq) TRACE("(%p)->(%p)\n", This, freq); - *freq = This->fmt->nSamplesPerSec; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign; + else + *freq = This->fmt->nSamplesPerSec; return S_OK; } @@ -2879,7 +2882,10 @@ static HRESULT WINAPI AudioClock_GetPosition(IAudioClock *iface, UINT64 *pos, TRACE("frames written: %u, held: %u, avail: %ld, delay: %ld state %d, pos: %u\n", (UINT32)(written_frames%1000000000), held_frames, avail_frames, delay_frames, alsa_state, (UINT32)(position%1000000000)); - *pos = position; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *pos = position * This->fmt->nBlockAlign; + else + *pos = position; if(qpctime){ LARGE_INTEGER stamp, freq; diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index c181713..6603075 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -2420,7 +2420,10 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq) TRACE("(%p)->(%p)\n", This, freq); - *freq = This->fmt->nSamplesPerSec; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign; + else + *freq = This->fmt->nSamplesPerSec; return S_OK; } @@ -2435,6 +2438,9 @@ static HRESULT AudioClock_GetPosition_nolock(ACImpl *This, else *pos = This->inbuf_frames + This->written_frames; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *pos *= This->fmt->nBlockAlign; + if(qpctime){ LARGE_INTEGER stamp, freq; QueryPerformanceCounter(&stamp); diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index e11e6dc..dd45fba 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -2145,7 +2145,10 @@ static HRESULT WINAPI AudioClock_GetFrequency(IAudioClock *iface, UINT64 *freq) TRACE("(%p)->(%p)\n", This, freq); - *freq = This->fmt->nSamplesPerSec; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *freq = This->fmt->nSamplesPerSec * This->fmt->nBlockAlign; + else + *freq = This->fmt->nSamplesPerSec; return S_OK; } @@ -2195,6 +2198,9 @@ static HRESULT WINAPI AudioClock_GetPosition(IAudioClock *iface, UINT64 *pos, This->last_pos_frames = *pos; + if(This->share == AUDCLNT_SHAREMODE_SHARED) + *pos *= This->fmt->nBlockAlign; + LeaveCriticalSection(&This->lock); if(qpctime){
participants (1)
-
Alexandre Julliard