audio: Capture devices should respect logical device pausing.

This commit is contained in:
Ryan C. Gordon
2023-06-24 14:53:44 -04:00
parent 7e700531c5
commit 3e10c0005d

View File

@@ -774,6 +774,10 @@ SDL_bool SDL_CaptureAudioThreadIterate(SDL_AudioDevice *device)
retval = SDL_FALSE; retval = SDL_FALSE;
} else if (rc > 0) { // queue the new data to each bound stream. } else if (rc > 0) { // queue the new data to each bound stream.
for (SDL_LogicalAudioDevice *logdev = device->logical_devices; logdev != NULL; logdev = logdev->next) { for (SDL_LogicalAudioDevice *logdev = device->logical_devices; logdev != NULL; logdev = logdev->next) {
if (SDL_AtomicGet(&logdev->paused)) {
continue; // paused? Skip this logical device.
}
for (SDL_AudioStream *stream = logdev->bound_streams; stream != NULL; stream = stream->next_binding) { for (SDL_AudioStream *stream = logdev->bound_streams; stream != NULL; stream = stream->next_binding) {
/* this will hold a lock on `stream` while putting. We don't explicitly lock the streams /* this will hold a lock on `stream` while putting. We don't explicitly lock the streams
for iterating here because the binding linked list can only change while the device lock is held. for iterating here because the binding linked list can only change while the device lock is held.