diff --git a/src/add-ons/kernel/drivers/audio/echo/echo.cpp b/src/add-ons/kernel/drivers/audio/echo/echo.cpp index f3cb82e140..c4cf40e4a5 100644 --- a/src/add-ons/kernel/drivers/audio/echo/echo.cpp +++ b/src/add-ons/kernel/drivers/audio/echo/echo.cpp @@ -137,7 +137,7 @@ echo_stream_set_audioparms(echo_stream *stream, uint8 channels, close_params.wPipeIndex = stream->pipe; status = stream->card->pEG->CloseAudio(&close_params); - if(status!=ECHOSTATUS_OK) { + if(status!=ECHOSTATUS_OK && status!=ECHOSTATUS_CHANNEL_NOT_OPEN) { PRINT(("echo_stream_set_audioparms : CloseAudio failed\n")); PRINT(("  status: %s \n", pStatusStrs[status])); return B_ERROR; @@ -154,6 +154,13 @@ echo_stream_set_audioparms(echo_stream *stream, uint8 channels, PRINT(("  status: %s \n", pStatusStrs[status])); return B_ERROR; } + + status = stream->card->pEG->VerifyAudioOpen(stream->pipe); + if(status!=ECHOSTATUS_OK) { + PRINT(("echo_stream_set_audioparms : VerifyAudioOpen failed\n")); + PRINT(("  status: %s \n", pStatusStrs[status])); + return B_ERROR; + } if ((stream->channels == channels) && (stream->b16 == b16) && @@ -314,7 +321,7 @@ echo_stream_new(echo_dev *card, uint8 use, uint32 bufframes, uint8 bufcount) stream->trigblk = 0; stream->blkmod = 0; - stream->pipe = 0; + stream->pipe = card->pEG->MakePipeIndex(0, (use == ECHO_USE_RECORD)); stream->frames_count = 0; stream->real_time = 0;