diff options
Diffstat (limited to 'src/audio_core/cubeb_sink.cpp')
| -rw-r--r-- | src/audio_core/cubeb_sink.cpp | 26 |
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 | ||
| 22 | class CubebSinkStream final : public SinkStream { | 22 | class CubebSinkStream final : public SinkStream { |
| 23 | public: | 23 | public: |
| 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 | ||
| 193 | long CubebSinkStream::DataCallback(cubeb_stream* stream, void* user_data, const void* input_buffer, | 196 | long 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 | ||
| 237 | void CubebSinkStream::StateCallback(cubeb_stream* stream, void* user_data, cubeb_state state) {} | 241 | void CubebSinkStream::StateCallback([[maybe_unused]] cubeb_stream* stream, |
| 242 | [[maybe_unused]] void* user_data, | ||
| 243 | [[maybe_unused]] cubeb_state state) {} | ||
| 238 | 244 | ||
| 239 | std::vector<std::string> ListCubebSinkDevices() { | 245 | std::vector<std::string> ListCubebSinkDevices() { |
| 240 | std::vector<std::string> device_list; | 246 | std::vector<std::string> device_list; |