diff options
Diffstat (limited to 'audio/winwaveaudio.c')
-rw-r--r-- | audio/winwaveaudio.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/audio/winwaveaudio.c b/audio/winwaveaudio.c index f43ae95cf4..d467c9d04f 100644 --- a/audio/winwaveaudio.c +++ b/audio/winwaveaudio.c @@ -68,6 +68,10 @@ static void winwave_log_mmresult (MMRESULT mr) "hasn't been prepared"; break; + case WAVERR_STILLPLAYING: + str = "There are still buffers in the queue"; + break; + default: AUD_log (AUDIO_CAP, "Reason: Unknown (MMRESULT %#x)\n", mr); return; @@ -262,8 +266,23 @@ static void winwave_poll_out (void *opaque) static void winwave_fini_out (HWVoiceOut *hw) { + int i; + MMRESULT mr; WaveVoiceOut *wave = (WaveVoiceOut *) hw; + mr = waveOutReset (wave->hwo); + if (mr != MMSYSERR_NOERROR) { + winwave_logerr (mr, "waveOutReset\n"); + } + + for (i = 0; i < conf.dac_headers; ++i) { + mr = waveOutUnprepareHeader (wave->hwo, &wave->hdrs[i], + sizeof (wave->hdrs[i])); + if (mr != MMSYSERR_NOERROR) { + winwave_logerr (mr, "waveOutUnprepareHeader(%d)\n", i); + } + } + winwave_anal_close_out (wave); if (wave->event) { |