Andrew Eikum : xaudio2: Account for abandoned buffer bytes.

Alexandre Julliard julliard at winehq.org
Sun Mar 18 09:02:32 CDT 2018


Module: wine
Branch: oldstable
Commit: 0d57e76476393a0b13e3ad1142a0cf931776411d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0d57e76476393a0b13e3ad1142a0cf931776411d

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Mon Dec 11 10:41:35 2017 -0600

xaudio2: Account for abandoned buffer bytes.

This should fix bug 44148, a regression caused by e2c73fc394ba.

Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit f57246e5e55a6ea65a35458a7256c8547ccc5462)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/xaudio2_7/xaudio_dll.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index c2d2ee2..f641046 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -2277,13 +2277,14 @@ static void update_source_state(XA2SourceImpl *src)
         src->first_al_buf %= XAUDIO2_MAX_QUEUED_BUFFERS;
         src->al_bufs_used -= processed;
 
-        if(processed > src->abandoned_albufs){
-            for(i = src->abandoned_albufs; i < processed; ++i){
-                ALint bufsize;
+        for(i = 0; i < processed; ++i){
+            ALint bufsize;
 
-                alGetBufferi(al_buffers[i], AL_SIZE, &bufsize);
+            alGetBufferi(al_buffers[i], AL_SIZE, &bufsize);
 
-                src->in_al_bytes -= bufsize;
+            src->in_al_bytes -= bufsize;
+
+            if(src->abandoned_albufs == 0){
                 src->played_frames += bufsize / src->submit_blocksize;
 
                 if(al_buffers[i] == src->buffers[src->first_buf].latest_al_buf){
@@ -2309,11 +2310,10 @@ static void update_source_state(XA2SourceImpl *src)
                                     src->buffers[src->first_buf].xa2buffer.pContext);
                     }
                 }
+            }else{
+                src->abandoned_albufs--;
             }
-
-            src->abandoned_albufs = 0;
-        }else
-            src->abandoned_albufs -= processed;
+        }
     }
 
     if(!src->running)




More information about the wine-cvs mailing list