Andrew Eikum : winmm: Also track input device position.

Alexandre Julliard julliard at winehq.org
Wed Oct 12 14:31:17 CDT 2011


Module: wine
Branch: master
Commit: 0d567ff9f8479fcb7afce7c74afb1b33aabc766d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0d567ff9f8479fcb7afce7c74afb1b33aabc766d

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Tue Oct 11 15:32:10 2011 -0500

winmm: Also track input device position.

---

 dlls/winmm/tests/capture.c |    7 +++++++
 dlls/winmm/waveform.c      |    4 ++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/dlls/winmm/tests/capture.c b/dlls/winmm/tests/capture.c
index 2860b00..b43bb71 100644
--- a/dlls/winmm/tests/capture.c
+++ b/dlls/winmm/tests/capture.c
@@ -133,6 +133,7 @@ static void wave_in_test_deviceIn(int device, LPWAVEFORMATEX pwfx, DWORD format,
     WAVEHDR frag;
     MMRESULT rc;
     DWORD res;
+    MMTIME mmt;
     WORD nChannels = pwfx->nChannels;
     WORD wBitsPerSample = pwfx->wBitsPerSample;
     DWORD nSamplesPerSec = pwfx->nSamplesPerSec;
@@ -224,6 +225,12 @@ static void wave_in_test_deviceIn(int device, LPWAVEFORMATEX pwfx, DWORD format,
            "frag.dwBytesRecorded=%d, should=%d\n",
            frag.dwBytesRecorded,pwfx->nAvgBytesPerSec);
 
+        mmt.wType = TIME_SAMPLES;
+        rc=waveInGetPosition(win, &mmt, sizeof(mmt));
+        ok(rc==MMSYSERR_NOERROR,"waveInGetPosition(%s): rc=%s\n",
+           dev_name(device),wave_in_error(rc));
+        ok(mmt.u.cb == frag.dwBytesRecorded, "Got wrong position: %u\n", mmt.u.cb);
+
         /* stop playing on error */
         if (res!=WAIT_OBJECT_0) {
             rc=waveInStop(win);
diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
index 658fd24..372501c 100644
--- a/dlls/winmm/waveform.c
+++ b/dlls/winmm/waveform.c
@@ -1495,6 +1495,8 @@ static void WID_PullACMData(WINMM_Device *device)
         hr = IAudioCaptureClient_ReleaseBuffer(device->capture, packet);
         if(FAILED(hr))
             ERR("ReleaseBuffer failed: %08x\n", hr);
+
+        device->played_frames += packet;
     }
 
     queue = device->first;
@@ -1602,6 +1604,8 @@ static void WID_PullData(WINMM_Device *device)
         hr = IAudioCaptureClient_ReleaseBuffer(device->capture, packet_len);
         if(FAILED(hr))
             ERR("ReleaseBuffer failed: %08x\n", hr);
+
+        device->played_frames += packet_len;
     }
 
 exit:




More information about the wine-cvs mailing list