From 1a4d6df3f4c1e899d2c64ebaad3d80214bd1cdfc Mon Sep 17 00:00:00 2001 From: malc Date: Sun, 11 Oct 2009 06:52:45 +0400 Subject: winwave: pause/restore playing upon seeing VOICE_DISABLE/ENABLE Signed-off-by: malc --- audio/winwaveaudio.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'audio') diff --git a/audio/winwaveaudio.c b/audio/winwaveaudio.c index 1486da1b95..f43ae95cf4 100644 --- a/audio/winwaveaudio.c +++ b/audio/winwaveaudio.c @@ -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); } -- cgit v1.2.3