- wxSoundInfoHeader *info;
-
- if (flag == wxSOUND_OUTPUT) {
- if (!m_internal->m_output_enabled)
- return;
-
- m_output_frag_out = (m_output_frag_out + 1) % WXSOUND_MAX_QUEUE;
- info = m_headers_play[m_output_frag_out];
- ClearHeader(info);
- m_queue_filled = FALSE;
- if (!m_waiting_for)
- OnSoundEvent(wxSOUND_OUTPUT);
- } else {
- if (!m_internal->m_input_enabled)
- return;
-
- m_headers_rec[m_input_frag_in]->m_recording = FALSE;
- m_input_frag_in = (m_input_frag_in + 1) % WXSOUND_MAX_QUEUE;
- if (!m_waiting_for)
- OnSoundEvent(wxSOUND_INPUT);
- m_queue_filled = FALSE;
- }
+ wxSoundInfoHeader *info;
+
+ if (flag == wxSOUND_OUTPUT) {
+ if (!m_internal->m_output_enabled)
+ return;
+
+ // Queue pointer: reader
+ m_output_frag_out = (m_output_frag_out + 1) % WXSOUND_MAX_QUEUE;
+ info = m_headers_play[m_output_frag_out];
+ // Clear header to tell the system the buffer is free now
+ ClearHeader(info);
+ m_queue_filled = FALSE;
+ if (!m_waiting_for)
+ // Try to requeue a new buffer.
+ OnSoundEvent(wxSOUND_OUTPUT);
+ } else {
+ if (!m_internal->m_input_enabled)
+ return;
+
+ // Recording completed
+ m_headers_rec[m_input_frag_in]->m_recording = FALSE;
+ // Queue pointer: writer
+ m_input_frag_in = (m_input_frag_in + 1) % WXSOUND_MAX_QUEUE;
+ if (!m_waiting_for)
+ OnSoundEvent(wxSOUND_INPUT);
+ m_queue_filled = FALSE;
+ }