diff options
Diffstat (limited to 'src/audio_core/sdl2_sink.cpp')
| -rw-r--r-- | src/audio_core/sdl2_sink.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/audio_core/sdl2_sink.cpp b/src/audio_core/sdl2_sink.cpp index 1d7912715..65aac877a 100644 --- a/src/audio_core/sdl2_sink.cpp +++ b/src/audio_core/sdl2_sink.cpp | |||
| @@ -10,9 +10,9 @@ | |||
| 10 | #include "audio_core/audio_core.h" | 10 | #include "audio_core/audio_core.h" |
| 11 | #include "audio_core/sdl2_sink.h" | 11 | #include "audio_core/sdl2_sink.h" |
| 12 | 12 | ||
| 13 | #include <numeric> | ||
| 13 | #include "common/assert.h" | 14 | #include "common/assert.h" |
| 14 | #include "common/logging/log.h" | 15 | #include "common/logging/log.h" |
| 15 | #include <numeric> | ||
| 16 | 16 | ||
| 17 | namespace AudioCore { | 17 | namespace AudioCore { |
| 18 | 18 | ||
| @@ -45,7 +45,8 @@ SDL2Sink::SDL2Sink() : impl(std::make_unique<Impl>()) { | |||
| 45 | SDL_AudioSpec obtained_audiospec; | 45 | SDL_AudioSpec obtained_audiospec; |
| 46 | SDL_zero(obtained_audiospec); | 46 | SDL_zero(obtained_audiospec); |
| 47 | 47 | ||
| 48 | impl->audio_device_id = SDL_OpenAudioDevice(nullptr, false, &desired_audiospec, &obtained_audiospec, 0); | 48 | impl->audio_device_id = |
| 49 | SDL_OpenAudioDevice(nullptr, false, &desired_audiospec, &obtained_audiospec, 0); | ||
| 49 | if (impl->audio_device_id <= 0) { | 50 | if (impl->audio_device_id <= 0) { |
| 50 | LOG_CRITICAL(Audio_Sink, "SDL_OpenAudioDevice failed"); | 51 | LOG_CRITICAL(Audio_Sink, "SDL_OpenAudioDevice failed"); |
| 51 | return; | 52 | return; |
| @@ -86,11 +87,12 @@ size_t SDL2Sink::SamplesInQueue() const { | |||
| 86 | 87 | ||
| 87 | SDL_LockAudioDevice(impl->audio_device_id); | 88 | SDL_LockAudioDevice(impl->audio_device_id); |
| 88 | 89 | ||
| 89 | size_t total_size = std::accumulate(impl->queue.begin(), impl->queue.end(), static_cast<size_t>(0), | 90 | size_t total_size = std::accumulate(impl->queue.begin(), impl->queue.end(), |
| 90 | [](size_t sum, const auto& buffer) { | 91 | static_cast<size_t>(0), [](size_t sum, const auto& buffer) { |
| 91 | // Division by two because each stereo sample is made of two s16. | 92 | // Division by two because each stereo sample is made of |
| 92 | return sum + buffer.size() / 2; | 93 | // two s16. |
| 93 | }); | 94 | return sum + buffer.size() / 2; |
| 95 | }); | ||
| 94 | 96 | ||
| 95 | SDL_UnlockAudioDevice(impl->audio_device_id); | 97 | SDL_UnlockAudioDevice(impl->audio_device_id); |
| 96 | 98 | ||
| @@ -100,7 +102,8 @@ size_t SDL2Sink::SamplesInQueue() const { | |||
| 100 | void SDL2Sink::Impl::Callback(void* impl_, u8* buffer, int buffer_size_in_bytes) { | 102 | void SDL2Sink::Impl::Callback(void* impl_, u8* buffer, int buffer_size_in_bytes) { |
| 101 | Impl* impl = reinterpret_cast<Impl*>(impl_); | 103 | Impl* impl = reinterpret_cast<Impl*>(impl_); |
| 102 | 104 | ||
| 103 | size_t remaining_size = static_cast<size_t>(buffer_size_in_bytes) / sizeof(s16); // Keep track of size in 16-bit increments. | 105 | size_t remaining_size = static_cast<size_t>(buffer_size_in_bytes) / |
| 106 | sizeof(s16); // Keep track of size in 16-bit increments. | ||
| 104 | 107 | ||
| 105 | while (remaining_size > 0 && !impl->queue.empty()) { | 108 | while (remaining_size > 0 && !impl->queue.empty()) { |
| 106 | if (impl->queue.front().size() <= remaining_size) { | 109 | if (impl->queue.front().size() <= remaining_size) { |
| @@ -111,7 +114,8 @@ void SDL2Sink::Impl::Callback(void* impl_, u8* buffer, int buffer_size_in_bytes) | |||
| 111 | } else { | 114 | } else { |
| 112 | memcpy(buffer, impl->queue.front().data(), remaining_size * sizeof(s16)); | 115 | memcpy(buffer, impl->queue.front().data(), remaining_size * sizeof(s16)); |
| 113 | buffer += remaining_size * sizeof(s16); | 116 | buffer += remaining_size * sizeof(s16); |
| 114 | impl->queue.front().erase(impl->queue.front().begin(), impl->queue.front().begin() + remaining_size); | 117 | impl->queue.front().erase(impl->queue.front().begin(), |
| 118 | impl->queue.front().begin() + remaining_size); | ||
| 115 | remaining_size = 0; | 119 | remaining_size = 0; |
| 116 | } | 120 | } |
| 117 | } | 121 | } |