=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: winmm: GetCurrentPadding is superfluous while recording.

Alexandre Julliard julliard at winehq.org
Wed Jan 11 13:40:00 CST 2012


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

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Mon Jan  9 18:40:51 2012 +0100

winmm: GetCurrentPadding is superfluous while recording.

---

 dlls/winmm/waveform.c |   38 +++++++++++++-------------------------
 1 files changed, 13 insertions(+), 25 deletions(-)

diff --git a/dlls/winmm/waveform.c b/dlls/winmm/waveform.c
index fe07e9e..383c75f 100644
--- a/dlls/winmm/waveform.c
+++ b/dlls/winmm/waveform.c
@@ -1453,19 +1453,11 @@ static void WID_PullACMData(WINMM_Device *device)
     MMRESULT mr;
 
     if(device->acm_hdr.cbDstLength == 0){
-        hr = IAudioClient_GetCurrentPadding(device->client, &packet);
-        if(FAILED(hr)){
-            ERR("GetCurrentPadding failed: %08x\n", hr);
-            return;
-        }
-
-        if(packet == 0)
-            return;
-
         hr = IAudioCaptureClient_GetBuffer(device->capture, &data, &packet,
                 &flags, NULL, NULL);
-        if(FAILED(hr)){
-            ERR("GetBuffer failed: %08x\n", hr);
+        if(hr != S_OK){
+            if(FAILED(hr))
+                ERR("GetBuffer failed: %08x\n", hr);
             return;
         }
 
@@ -1566,26 +1558,20 @@ static void WID_PullData(WINMM_Device *device)
 
     while(device->first){
         BYTE *data;
-        UINT32 pad, packet_len, packet;
+        UINT32 packet_len, packet;
         DWORD flags;
 
-        hr = IAudioClient_GetCurrentPadding(device->client, &pad);
-        if(FAILED(hr)){
-            ERR("GetCurrentPadding failed: %08x\n", hr);
-            goto exit;
-        }
-
-        if(pad == 0)
-            goto exit;
-
-        hr = IAudioCaptureClient_GetBuffer(device->capture, &data, &packet,
+        hr = IAudioCaptureClient_GetBuffer(device->capture, &data, &packet_len,
                 &flags, NULL, NULL);
-        if(FAILED(hr)){
-            ERR("GetBuffer failed: %08x\n", hr);
+        if(hr != S_OK){
+            if(FAILED(hr))
+                ERR("GetBuffer failed: %08x\n", hr);
+            else /* AUDCLNT_S_BUFFER_EMPTY success code */
+                IAudioCaptureClient_ReleaseBuffer(device->capture, 0);
             goto exit;
         }
 
-        packet_len = packet;
+        packet = packet_len;
         queue = device->first;
         while(queue && packet > 0){
             UINT32 to_copy_bytes;
@@ -1612,6 +1598,8 @@ static void WID_PullData(WINMM_Device *device)
         if(FAILED(hr))
             ERR("ReleaseBuffer failed: %08x\n", hr);
 
+        if(packet > 0)
+            WARN("losing %u frames\n", packet);
         device->played_frames += packet_len;
     }
 




More information about the wine-cvs mailing list