Detach shared capture safely while its audio buffer is resizing
This commit is contained in:
1 parent
3c73c7d645
commit
efe9e8311c
3 files changed
+8
-5
No files matched your search
@@ -157,7 +157,7 @@ void AudioCapture::close() {
|
||||
|
||||
/* Callback отсоединён в GUI; session и контекст должны жить до завершения ma_device_uninit. */
|
||||
void AudioCapture::closeAsync() {
|
||||
if (closing()) return;
|
||||
if (!m_closeDone.load(std::memory_order_acquire)) return;
|
||||
if (m_closeThread.joinable()) m_closeThread.join();
|
||||
auto session = detach();
|
||||
if (!session) return;
|
||||
@@ -184,6 +184,9 @@ void AudioCapture::closeAsync() {
|
||||
}
|
||||
|
||||
void AudioCapture::recover() { if (m_session) m_session->recover(); }
|
||||
bool AudioCapture::closing() const {
|
||||
return !m_closeDone.load(std::memory_order_acquire) || (m_session && m_session->device.closing());
|
||||
}
|
||||
bool AudioCapture::running() const {
|
||||
return m_session && m_prepared && m_session->device.initialized() && ma_device_is_started(m_session->device.device());
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user