Andrew Eikum : mmdevapi: Clock rate should be in bytes for shared mode.
Alexandre Julliard
julliard at winehq.org
Mon May 19 15:10:00 CDT 2014
Module: wine
Branch: master
Commit: 0e84a59d8946a362ad0d017c0d23d7cf62a0fc63
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0e84a59d8946a362ad0d017c0d23d7cf62a0fc63
Author: Andrew Eikum <aeikum at 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){
More information about the wine-cvs
mailing list