summaryrefslogtreecommitdiff
path: root/src/audio_core/audio_out.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core/audio_out.cpp')
-rw-r--r--src/audio_core/audio_out.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/audio_core/audio_out.cpp b/src/audio_core/audio_out.cpp
new file mode 100644
index 000000000..6d418a05b
--- /dev/null
+++ b/src/audio_core/audio_out.cpp
@@ -0,0 +1,50 @@
1// Copyright 2018 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "audio_core/audio_out.h"
6#include "common/assert.h"
7#include "common/logging/log.h"
8
9namespace AudioCore {
10
11/// Returns the stream format from the specified number of channels
12static Stream::Format ChannelsToStreamFormat(int num_channels) {
13 switch (num_channels) {
14 case 1:
15 return Stream::Format::Mono16;
16 case 2:
17 return Stream::Format::Stereo16;
18 case 6:
19 return Stream::Format::Multi51Channel16;
20 }
21
22 LOG_CRITICAL(Audio, "Unimplemented num_channels={}", num_channels);
23 UNREACHABLE();
24 return {};
25}
26
27StreamPtr AudioOut::OpenStream(int sample_rate, int num_channels,
28 Stream::ReleaseCallback&& release_callback) {
29 streams.push_back(std::make_shared<Stream>(sample_rate, ChannelsToStreamFormat(num_channels),
30 std::move(release_callback)));
31 return streams.back();
32}
33
34std::vector<u64> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) {
35 return stream->GetTagsAndReleaseBuffers(max_count);
36}
37
38void AudioOut::StartStream(StreamPtr stream) {
39 stream->Play();
40}
41
42void AudioOut::StopStream(StreamPtr stream) {
43 stream->Stop();
44}
45
46bool AudioOut::QueueBuffer(StreamPtr stream, Buffer::Tag tag, std::vector<u8>&& data) {
47 return stream->QueueBuffer(std::make_shared<Buffer>(tag, std::move(data)));
48}
49
50} // namespace AudioCore