summaryrefslogtreecommitdiff
path: root/src/audio_core/cubeb_sink.cpp
diff options
context:
space:
mode:
authorGravatar raven022018-09-19 19:53:11 +0800
committerGravatar GitHub2018-09-19 19:53:11 +0800
commitc8f9bbbf859c0e38cf691b64c67761382fcebfc2 (patch)
tree99529c2277a6b740a6e278985c5147fa649c5497 /src/audio_core/cubeb_sink.cpp
parentAdd 1D sampler for TLDS - TexelFetch (Mario Rabbids) (diff)
parentMerge pull request #1348 from ogniK5377/GetImageSize (diff)
downloadyuzu-c8f9bbbf859c0e38cf691b64c67761382fcebfc2.tar.gz
yuzu-c8f9bbbf859c0e38cf691b64c67761382fcebfc2.tar.xz
yuzu-c8f9bbbf859c0e38cf691b64c67761382fcebfc2.zip
Merge branch 'master' into tlds
Diffstat (limited to 'src/audio_core/cubeb_sink.cpp')
-rw-r--r--src/audio_core/cubeb_sink.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp
index 79155a7a0..392039688 100644
--- a/src/audio_core/cubeb_sink.cpp
+++ b/src/audio_core/cubeb_sink.cpp
@@ -63,8 +63,8 @@ public:
63 // Downsample 6 channels to 2 63 // Downsample 6 channels to 2
64 std::vector<s16> buf; 64 std::vector<s16> buf;
65 buf.reserve(samples.size() * num_channels / source_num_channels); 65 buf.reserve(samples.size() * num_channels / source_num_channels);
66 for (size_t i = 0; i < samples.size(); i += source_num_channels) { 66 for (std::size_t i = 0; i < samples.size(); i += source_num_channels) {
67 for (size_t ch = 0; ch < num_channels; ch++) { 67 for (std::size_t ch = 0; ch < num_channels; ch++) {
68 buf.push_back(samples[i + ch]); 68 buf.push_back(samples[i + ch]);
69 } 69 }
70 } 70 }
@@ -75,7 +75,7 @@ public:
75 queue.Push(samples); 75 queue.Push(samples);
76 } 76 }
77 77
78 size_t SamplesInQueue(u32 num_channels) const override { 78 std::size_t SamplesInQueue(u32 num_channels) const override {
79 if (!ctx) 79 if (!ctx)
80 return 0; 80 return 0;
81 81
@@ -119,10 +119,10 @@ CubebSink::CubebSink(std::string target_device_name) {
119 LOG_WARNING(Audio_Sink, "Audio output device enumeration not supported"); 119 LOG_WARNING(Audio_Sink, "Audio output device enumeration not supported");
120 } else { 120 } else {
121 const auto collection_end{collection.device + collection.count}; 121 const auto collection_end{collection.device + collection.count};
122 const auto device{std::find_if(collection.device, collection_end, 122 const auto device{
123 [&](const cubeb_device_info& device) { 123 std::find_if(collection.device, collection_end, [&](const cubeb_device_info& info) {
124 return target_device_name == device.friendly_name; 124 return target_device_name == info.friendly_name;
125 })}; 125 })};
126 if (device != collection_end) { 126 if (device != collection_end) {
127 output_device = device->devid; 127 output_device = device->devid;
128 } 128 }
@@ -159,15 +159,16 @@ long CubebSinkStream::DataCallback(cubeb_stream* stream, void* user_data, const
159 return {}; 159 return {};
160 } 160 }
161 161
162 const size_t num_channels = impl->GetNumChannels(); 162 const std::size_t num_channels = impl->GetNumChannels();
163 const size_t samples_to_write = num_channels * num_frames; 163 const std::size_t samples_to_write = num_channels * num_frames;
164 size_t samples_written; 164 std::size_t samples_written;
165 165
166 if (Settings::values.enable_audio_stretching) { 166 if (Settings::values.enable_audio_stretching) {
167 const std::vector<s16> in{impl->queue.Pop()}; 167 const std::vector<s16> in{impl->queue.Pop()};
168 const size_t num_in{in.size() / num_channels}; 168 const std::size_t num_in{in.size() / num_channels};
169 s16* const out{reinterpret_cast<s16*>(buffer)}; 169 s16* const out{reinterpret_cast<s16*>(buffer)};
170 const size_t out_frames = impl->time_stretch.Process(in.data(), num_in, out, num_frames); 170 const std::size_t out_frames =
171 impl->time_stretch.Process(in.data(), num_in, out, num_frames);
171 samples_written = out_frames * num_channels; 172 samples_written = out_frames * num_channels;
172 173
173 if (impl->should_flush) { 174 if (impl->should_flush) {
@@ -184,7 +185,7 @@ long CubebSinkStream::DataCallback(cubeb_stream* stream, void* user_data, const
184 } 185 }
185 186
186 // Fill the rest of the frames with last_frame 187 // Fill the rest of the frames with last_frame
187 for (size_t i = samples_written; i < samples_to_write; i += num_channels) { 188 for (std::size_t i = samples_written; i < samples_to_write; i += num_channels) {
188 std::memcpy(buffer + i * sizeof(s16), &impl->last_frame[0], num_channels * sizeof(s16)); 189 std::memcpy(buffer + i * sizeof(s16), &impl->last_frame[0], num_channels * sizeof(s16));
189 } 190 }
190 191
@@ -197,7 +198,7 @@ std::vector<std::string> ListCubebSinkDevices() {
197 std::vector<std::string> device_list; 198 std::vector<std::string> device_list;
198 cubeb* ctx; 199 cubeb* ctx;
199 200
200 if (cubeb_init(&ctx, "Citra Device Enumerator", nullptr) != CUBEB_OK) { 201 if (cubeb_init(&ctx, "yuzu Device Enumerator", nullptr) != CUBEB_OK) {
201 LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); 202 LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
202 return {}; 203 return {};
203 } 204 }
@@ -206,7 +207,7 @@ std::vector<std::string> ListCubebSinkDevices() {
206 if (cubeb_enumerate_devices(ctx, CUBEB_DEVICE_TYPE_OUTPUT, &collection) != CUBEB_OK) { 207 if (cubeb_enumerate_devices(ctx, CUBEB_DEVICE_TYPE_OUTPUT, &collection) != CUBEB_OK) {
207 LOG_WARNING(Audio_Sink, "Audio output device enumeration not supported"); 208 LOG_WARNING(Audio_Sink, "Audio output device enumeration not supported");
208 } else { 209 } else {
209 for (size_t i = 0; i < collection.count; i++) { 210 for (std::size_t i = 0; i < collection.count; i++) {
210 const cubeb_device_info& device = collection.device[i]; 211 const cubeb_device_info& device = collection.device[i];
211 if (device.friendly_name) { 212 if (device.friendly_name) {
212 device_list.emplace_back(device.friendly_name); 213 device_list.emplace_back(device.friendly_name);