winwave: follow the rules when closing the output device
a. call waveOutReset to drain the queue b. unprepare headers before freeing underlying memory Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
parent
a91b857c38
commit
2a117d401d
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user