src/multimedia/audio/qaudiooutput_win32_p.cpp
branchRCL_3
changeset 14 c0432d11811c
parent 8 3f74d0d4af4c
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp	Wed Apr 21 12:15:23 2010 +0300
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp	Wed Apr 21 20:15:53 2010 +0300
@@ -56,8 +56,6 @@
 
 QT_BEGIN_NAMESPACE
 
-static CRITICAL_SECTION waveOutCriticalSection;
-
 static const int minimumIntervalTime = 50;
 
 QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
@@ -107,16 +105,16 @@
         case WOM_CLOSE:
             return;
         case WOM_DONE:
-            EnterCriticalSection(&waveOutCriticalSection);
+            EnterCriticalSection(&qAudio->waveOutCriticalSection);
             if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) {
-                LeaveCriticalSection(&waveOutCriticalSection);
+                LeaveCriticalSection(&qAudio->waveOutCriticalSection);
                 return;
 	    }
             qAudio->waveFreeBlockCount++;
             if(qAudio->waveFreeBlockCount >= qAudio->buffer_size/qAudio->period_size)
                 qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size;
             qAudio->feedback();
-            LeaveCriticalSection(&waveOutCriticalSection);
+            LeaveCriticalSection(&qAudio->waveOutCriticalSection);
             break;
         default:
             return;
@@ -152,7 +150,8 @@
     int count = buffer_size/period_size;
 
     for(int i = 0; i < count; i++) {
-        waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR));
+        if (blocks->dwFlags & WHDR_PREPARED)
+            waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR));
         blocks+=sizeof(WAVEHDR);
     }
     HeapFree(GetProcessHeap(), 0, blockArray);