summaryrefslogtreecommitdiff
path: root/src/audio_core/cubeb_sink.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core/cubeb_sink.cpp')
-rw-r--r--src/audio_core/cubeb_sink.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp
index 83c06c0ed..043447eaa 100644
--- a/src/audio_core/cubeb_sink.cpp
+++ b/src/audio_core/cubeb_sink.cpp
@@ -21,15 +21,16 @@ namespace AudioCore {
21 21
22class CubebSinkStream final : public SinkStream { 22class CubebSinkStream final : public SinkStream {
23public: 23public:
24 CubebSinkStream(cubeb* ctx, u32 sample_rate, u32 num_channels_, cubeb_devid output_device, 24 CubebSinkStream(cubeb* ctx_, u32 sample_rate, u32 num_channels_, cubeb_devid output_device,
25 const std::string& name) 25 const std::string& name)
26 : ctx{ctx}, num_channels{std::min(num_channels_, 6u)}, time_stretch{sample_rate, 26 : ctx{ctx_}, num_channels{std::min(num_channels_, 6u)}, time_stretch{sample_rate,
27 num_channels} { 27 num_channels} {
28 28
29 cubeb_stream_params params{}; 29 cubeb_stream_params params{};
30 params.rate = sample_rate; 30 params.rate = sample_rate;
31 params.channels = num_channels; 31 params.channels = num_channels;
32 params.format = CUBEB_SAMPLE_S16NE; 32 params.format = CUBEB_SAMPLE_S16NE;
33 params.prefs = CUBEB_STREAM_PREF_PERSIST;
33 switch (num_channels) { 34 switch (num_channels) {
34 case 1: 35 case 1:
35 params.layout = CUBEB_LAYOUT_MONO; 36 params.layout = CUBEB_LAYOUT_MONO;
@@ -93,8 +94,10 @@ public:
93 constexpr s32 clev{707}; // center mixing level coefficient 94 constexpr s32 clev{707}; // center mixing level coefficient
94 constexpr s32 slev{707}; // surround mixing level coefficient 95 constexpr s32 slev{707}; // surround mixing level coefficient
95 96
96 buf.push_back(left + (clev * center / 1000) + (slev * surround_left / 1000)); 97 buf.push_back(static_cast<s16>(left + (clev * center / 1000) +
97 buf.push_back(right + (clev * center / 1000) + (slev * surround_right / 1000)); 98 (slev * surround_left / 1000)));
99 buf.push_back(static_cast<s16>(right + (clev * center / 1000) +
100 (slev * surround_right / 1000)));
98 } 101 }
99 queue.Push(buf); 102 queue.Push(buf);
100 return; 103 return;
@@ -190,10 +193,11 @@ SinkStream& CubebSink::AcquireSinkStream(u32 sample_rate, u32 num_channels,
190 return *sink_streams.back(); 193 return *sink_streams.back();
191} 194}
192 195
193long CubebSinkStream::DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, 196long CubebSinkStream::DataCallback([[maybe_unused]] cubeb_stream* stream, void* user_data,
194 void* output_buffer, long num_frames) { 197 [[maybe_unused]] const void* input_buffer, void* output_buffer,
195 CubebSinkStream* impl = static_cast<CubebSinkStream*>(user_data); 198 long num_frames) {
196 u8* buffer = reinterpret_cast<u8*>(output_buffer); 199 auto* impl = static_cast<CubebSinkStream*>(user_data);
200 auto* buffer = static_cast<u8*>(output_buffer);
197 201
198 if (!impl) { 202 if (!impl) {
199 return {}; 203 return {};
@@ -234,7 +238,9 @@ long CubebSinkStream::DataCallback(cubeb_stream* stream, void* user_data, const
234 return num_frames; 238 return num_frames;
235} 239}
236 240
237void CubebSinkStream::StateCallback(cubeb_stream* stream, void* user_data, cubeb_state state) {} 241void CubebSinkStream::StateCallback([[maybe_unused]] cubeb_stream* stream,
242 [[maybe_unused]] void* user_data,
243 [[maybe_unused]] cubeb_state state) {}
238 244
239std::vector<std::string> ListCubebSinkDevices() { 245std::vector<std::string> ListCubebSinkDevices() {
240 std::vector<std::string> device_list; 246 std::vector<std::string> device_list;