]> git.proxmox.com Git - qemu.git/commitdiff
winwave: pause/restore playing upon seeing VOICE_DISABLE/ENABLE
authormalc <av1474@comtv.ru>
Sun, 11 Oct 2009 02:52:45 +0000 (06:52 +0400)
committermalc <av1474@comtv.ru>
Sun, 11 Oct 2009 02:52:45 +0000 (06:52 +0400)
Signed-off-by: malc <av1474@comtv.ru>
audio/winwaveaudio.c

index 1486da1b958b83434ef75dec0bce65735f21dabe..f43ae95cf4ec70abfcaf16ab7f537416baa2e26e 100644 (file)
@@ -29,6 +29,7 @@ typedef struct {
     int avail;
     int pending;
     int curhdr;
+    int paused;
     CRITICAL_SECTION crit_sect;
 } WaveVoiceOut;
 
@@ -282,6 +283,7 @@ static void winwave_fini_out (HWVoiceOut *hw)
 
 static int winwave_ctl_out (HWVoiceOut *hw, int cmd, ...)
 {
+    MMRESULT mr;
     WaveVoiceOut *wave = (WaveVoiceOut *) hw;
 
     switch (cmd) {
@@ -313,10 +315,26 @@ static int winwave_ctl_out (HWVoiceOut *hw, int cmd, ...)
             else {
                 hw->poll_mode = 0;
             }
+            if (wave->paused) {
+                mr = waveOutRestart (wave->hwo);
+                if (mr != MMSYSERR_NOERROR) {
+                    winwave_logerr (mr, "waveOutRestart");
+                }
+                wave->paused = 0;
+            }
         }
         return 0;
 
     case VOICE_DISABLE:
+        if (!wave->paused) {
+            mr = waveOutPause (wave->hwo);
+            if (mr != MMSYSERR_NOERROR) {
+                winwave_logerr (mr, "waveOutPause");
+            }
+            else {
+                wave->paused = 1;
+            }
+        }
         if (wave->event) {
             qemu_del_wait_object (wave->event, winwave_poll_out, wave);
         }