Module: wine Branch: master Commit: 0e84a59d8946a362ad0d017c0d23d7cf62a0fc63 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e84a59d8946a362ad0d017c0d...
Author: Andrew Eikum aeikum@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){