Author: janderwald
Date: Sun Jan 31 20:09:30 2010
New Revision: 45360

URL: http://svn.reactos.org/svn/reactos?rev=45360&view=rev
Log:
[MMEBUDDY]
- Hackfix corruption of audio buffer list which made the playback thread spin 
forever on an already played buffer.
- Tested with Winamp / VLC / mplay32 with Vbox 3.1.2

Modified:
    trunk/reactos/lib/drivers/sound/mmebuddy/wave/header.c
    trunk/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c

Modified: trunk/reactos/lib/drivers/sound/mmebuddy/wave/header.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/sound/mmebuddy/wave/header.c?rev=45360&r1=45359&r2=45360&view=diff
==============================================================================
--- trunk/reactos/lib/drivers/sound/mmebuddy/wave/header.c [iso-8859-1] 
(original)
+++ trunk/reactos/lib/drivers/sound/mmebuddy/wave/header.c [iso-8859-1] Sun Jan 
31 20:09:30 2010
@@ -248,10 +248,18 @@
     {
         /* There are already queued headers - make this one the tail */
         SND_TRACE(L"Enqueued next wave header\n");
-        SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader;
-        SoundDeviceInstance->TailWaveHeader = WaveHeader;
-
-        DoWaveStreaming(SoundDeviceInstance);
+
+        /* FIXME - Make sure that the buffer has not already been added to the 
list */
+        if ( SoundDeviceInstance->TailWaveHeader != WaveHeader )
+        {
+            SND_ASSERT(SoundDeviceInstance->TailWaveHeader != WaveHeader);
+
+            SoundDeviceInstance->TailWaveHeader->lpNext = WaveHeader;
+            SoundDeviceInstance->TailWaveHeader = WaveHeader;
+            DUMP_WAVEHDR_QUEUE(SoundDeviceInstance);
+
+            DoWaveStreaming(SoundDeviceInstance);
+        }
     }
 
     DUMP_WAVEHDR_QUEUE(SoundDeviceInstance);

Modified: trunk/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c?rev=45360&r1=45359&r2=45360&view=diff
==============================================================================
--- trunk/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c [iso-8859-1] 
(original)
+++ trunk/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c [iso-8859-1] Sun 
Jan 31 20:09:30 2010
@@ -77,6 +77,7 @@
         {
             {
                 /* Move on to the next header */
+                SND_ASSERT(Header != Header->lpNext);
                 Header = Header->lpNext;
             }
         }
@@ -209,9 +210,9 @@
         }
                else
                {
-            SND_TRACE(L"%d/%d bytes of wavehdr completed\n", 
HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
             /* Partially completed */
             HdrExtension->BytesCompleted += dwNumberOfBytesTransferred;
+            SND_TRACE(L"%d/%d bytes of wavehdr completed\n", 
HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
             break;
                }
 


Reply via email to