[PATCH 2/2] mmdevapi: Clock rate should be in bytes for shared mode
Andrew Eikum
aeikum at codeweavers.com
Mon May 19 08:59:26 CDT 2014
---
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){
--
1.9.2
More information about the wine-patches
mailing list