X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb4e516dd9774b4d14abedd8229dc4c9bcff8439..d9f39e09e82e99c422619f4e3df536d0a9e87987:/utils/wxMMedia/snduss.cpp diff --git a/utils/wxMMedia/snduss.cpp b/utils/wxMMedia/snduss.cpp index 9a03817bed..a0947d1504 100644 --- a/utils/wxMMedia/snduss.cpp +++ b/utils/wxMMedia/snduss.cpp @@ -49,7 +49,8 @@ wxUssSound::~wxUssSound() m_sleep_cond.Signal(); m_sleep_mtx.Unlock(); } - Join(); + while (IsAlive()) + Yield(); } if (m_fd != -1) @@ -106,8 +107,6 @@ bool wxUssSound::DoInput(wxSndBuffer *buf) wxSoundCodec *codec = buf->GetCurrentCodec(); m_sndbuf->ResetBuffer(); - codec->SetInStream(m_sndbuf); - codec->InitIO(m_ussformat); bufsize = codec->Available(); if (bufsize > m_max_bufsize) @@ -152,11 +151,21 @@ bool wxUssSound::InitBuffer(wxSndBuffer *buf) } codec = buf->GetCurrentCodec(); - codec->SetOutStream(m_sndbuf); - codec->InitIO(m_ussformat); - // TODO: We need more tests here. - codec->InitMode((m_mode == wxSND_OUTPUT) ? wxSoundCodec::DECODING : wxSoundCodec::ENCODING); - + switch (m_mode) { + case wxSND_INPUT: + codec->SetInStream(m_sndbuf); + codec->InitIO(m_ussformat); + codec->InitMode(wxSoundCodec::ENCODING); + break; + case wxSND_OUTPUT: + codec->SetOutStream(m_sndbuf); + codec->InitIO(m_ussformat); + codec->InitMode(wxSoundCodec::DECODING); + break; + case wxSND_DUPLEX: + case wxSND_OTHER_IO: + break; + } return TRUE; } @@ -196,6 +205,7 @@ void *wxUssSound::Entry() } buf->HardUnlock(); continue; + sound_clean_buffer: buf->GetCurrentCodec()->ExitMode(); delete node;