summaryrefslogtreecommitdiffstats
path: root/src/audio_core/in/audio_in.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/audio_core/in/audio_in.cpp100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/audio_core/in/audio_in.cpp b/src/audio_core/in/audio_in.cpp
new file mode 100644
index 000000000..c946895d6
--- /dev/null
+++ b/src/audio_core/in/audio_in.cpp
@@ -0,0 +1,100 @@
+// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "audio_core/audio_in_manager.h"
+#include "audio_core/in/audio_in.h"
+#include "core/hle/kernel/k_event.h"
+
+namespace AudioCore::AudioIn {
+
+In::In(Core::System& system_, Manager& manager_, Kernel::KEvent* event_, size_t session_id_)
+ : manager{manager_}, parent_mutex{manager.mutex}, event{event_}, system{system_, event,
+ session_id_} {}
+
+void In::Free() {
+ std::scoped_lock l{parent_mutex};
+ manager.ReleaseSessionId(system.GetSessionId());
+}
+
+System& In::GetSystem() {
+ return system;
+}
+
+AudioIn::State In::GetState() {
+ std::scoped_lock l{parent_mutex};
+ return system.GetState();
+}
+
+Result In::StartSystem() {
+ std::scoped_lock l{parent_mutex};
+ return system.Start();
+}
+
+void In::StartSession() {
+ std::scoped_lock l{parent_mutex};
+ system.StartSession();
+}
+
+Result In::StopSystem() {
+ std::scoped_lock l{parent_mutex};
+ return system.Stop();
+}
+
+Result In::AppendBuffer(const AudioInBuffer& buffer, u64 tag) {
+ std::scoped_lock l{parent_mutex};
+
+ if (system.AppendBuffer(buffer, tag)) {
+ return ResultSuccess;
+ }
+ return Service::Audio::ERR_BUFFER_COUNT_EXCEEDED;
+}
+
+void In::ReleaseAndRegisterBuffers() {
+ std::scoped_lock l{parent_mutex};
+ if (system.GetState() == State::Started) {
+ system.ReleaseBuffers();
+ system.RegisterBuffers();
+ }
+}
+
+bool In::FlushAudioInBuffers() {
+ std::scoped_lock l{parent_mutex};
+ return system.FlushAudioInBuffers();
+}
+
+u32 In::GetReleasedBuffers(std::span<u64> tags) {
+ std::scoped_lock l{parent_mutex};
+ return system.GetReleasedBuffers(tags);
+}
+
+Kernel::KReadableEvent& In::GetBufferEvent() {
+ std::scoped_lock l{parent_mutex};
+ return event->GetReadableEvent();
+}
+
+f32 In::GetVolume() {
+ std::scoped_lock l{parent_mutex};
+ return system.GetVolume();
+}
+
+void In::SetVolume(f32 volume) {
+ std::scoped_lock l{parent_mutex};
+ system.SetVolume(volume);
+}
+
+bool In::ContainsAudioBuffer(u64 tag) {
+ std::scoped_lock l{parent_mutex};
+ return system.ContainsAudioBuffer(tag);
+}
+
+u32 In::GetBufferCount() {
+ std::scoped_lock l{parent_mutex};
+ return system.GetBufferCount();
+}
+
+u64 In::GetPlayedSampleCount() {
+ std::scoped_lock l{parent_mutex};
+ return system.GetPlayedSampleCount();
+}
+
+} // namespace AudioCore::AudioIn