diff options
Diffstat (limited to 'src/audio_core')
| -rw-r--r-- | src/audio_core/adsp/adsp.cpp | 2 | ||||
| -rw-r--r-- | src/audio_core/device/device_session.cpp | 14 | ||||
| -rw-r--r-- | src/audio_core/device/device_session.h | 12 | ||||
| -rw-r--r-- | src/audio_core/in/audio_in_system.cpp | 2 | ||||
| -rw-r--r-- | src/audio_core/in/audio_in_system.h | 13 | ||||
| -rw-r--r-- | src/audio_core/out/audio_out_system.cpp | 4 | ||||
| -rw-r--r-- | src/audio_core/out/audio_out_system.h | 13 | ||||
| -rw-r--r-- | src/audio_core/renderer/command/command_generator.cpp | 12 | ||||
| -rw-r--r-- | src/audio_core/renderer/mix/mix_info.cpp | 2 | ||||
| -rw-r--r-- | src/audio_core/renderer/splitter/splitter_context.cpp | 2 | ||||
| -rw-r--r-- | src/audio_core/renderer/splitter/splitter_context.h | 2 |
11 files changed, 46 insertions, 32 deletions
diff --git a/src/audio_core/adsp/adsp.cpp b/src/audio_core/adsp/adsp.cpp index 6c53c98fd..48f0a63d4 100644 --- a/src/audio_core/adsp/adsp.cpp +++ b/src/audio_core/adsp/adsp.cpp @@ -11,7 +11,7 @@ ADSP::ADSP(Core::System& system, Sink::Sink& sink) { opus_decoder = std::make_unique<OpusDecoder::OpusDecoder>(system); opus_decoder->Send(Direction::DSP, OpusDecoder::Message::Start); if (opus_decoder->Receive(Direction::Host) != OpusDecoder::Message::StartOK) { - LOG_ERROR(Service_Audio, "OpusDeocder failed to initialize."); + LOG_ERROR(Service_Audio, "OpusDecoder failed to initialize."); return; } } diff --git a/src/audio_core/device/device_session.cpp b/src/audio_core/device/device_session.cpp index ee42ae529..3c214ec00 100644 --- a/src/audio_core/device/device_session.cpp +++ b/src/audio_core/device/device_session.cpp @@ -10,6 +10,8 @@ #include "core/core_timing.h" #include "core/memory.h" +#include "core/hle/kernel/k_process.h" + namespace AudioCore { using namespace std::literals; @@ -25,7 +27,7 @@ DeviceSession::~DeviceSession() { } Result DeviceSession::Initialize(std::string_view name_, SampleFormat sample_format_, - u16 channel_count_, size_t session_id_, u32 handle_, + u16 channel_count_, size_t session_id_, Kernel::KProcess* handle_, u64 applet_resource_user_id_, Sink::StreamType type_) { if (stream) { Finalize(); @@ -36,6 +38,7 @@ Result DeviceSession::Initialize(std::string_view name_, SampleFormat sample_for channel_count = channel_count_; session_id = session_id_; handle = handle_; + handle->Open(); applet_resource_user_id = applet_resource_user_id_; if (type == Sink::StreamType::In) { @@ -54,6 +57,11 @@ void DeviceSession::Finalize() { sink->CloseStream(stream); stream = nullptr; } + + if (handle) { + handle->Close(); + handle = nullptr; + } } void DeviceSession::Start() { @@ -91,7 +99,7 @@ void DeviceSession::AppendBuffers(std::span<const AudioBuffer> buffers) { stream->AppendBuffer(new_buffer, tmp_samples); } else { Core::Memory::CpuGuestMemory<s16, Core::Memory::GuestMemoryFlags::UnsafeRead> samples( - system.ApplicationMemory(), buffer.samples, buffer.size / sizeof(s16)); + handle->GetMemory(), buffer.samples, buffer.size / sizeof(s16)); stream->AppendBuffer(new_buffer, samples); } } @@ -100,7 +108,7 @@ void DeviceSession::AppendBuffers(std::span<const AudioBuffer> buffers) { void DeviceSession::ReleaseBuffer(const AudioBuffer& buffer) const { if (type == Sink::StreamType::In) { auto samples{stream->ReleaseBuffer(buffer.size / sizeof(s16))}; - system.ApplicationMemory().WriteBlockUnsafe(buffer.samples, samples.data(), buffer.size); + handle->GetMemory().WriteBlockUnsafe(buffer.samples, samples.data(), buffer.size); } } diff --git a/src/audio_core/device/device_session.h b/src/audio_core/device/device_session.h index 7d52f362d..f3fae2617 100644 --- a/src/audio_core/device/device_session.h +++ b/src/audio_core/device/device_session.h @@ -20,6 +20,10 @@ struct EventType; } // namespace Timing } // namespace Core +namespace Kernel { +class KProcess; +} // namespace Kernel + namespace AudioCore { namespace Sink { @@ -44,13 +48,13 @@ public: * @param sample_format - Sample format for this device's output. * @param channel_count - Number of channels for this device (2 or 6). * @param session_id - This session's id. - * @param handle - Handle for this device session (unused). + * @param handle - Process handle for this device session. * @param applet_resource_user_id - Applet resource user id for this device session (unused). * @param type - Type of this stream (Render, In, Out). * @return Result code for this call. */ Result Initialize(std::string_view name, SampleFormat sample_format, u16 channel_count, - size_t session_id, u32 handle, u64 applet_resource_user_id, + size_t session_id, Kernel::KProcess* handle, u64 applet_resource_user_id, Sink::StreamType type); /** @@ -137,8 +141,8 @@ private: u16 channel_count{}; /// Session id of this device session size_t session_id{}; - /// Handle of this device session - u32 handle{}; + /// Process handle of device memory owner + Kernel::KProcess* handle{}; /// Applet resource user id of this device session u64 applet_resource_user_id{}; /// Total number of samples played by this device session diff --git a/src/audio_core/in/audio_in_system.cpp b/src/audio_core/in/audio_in_system.cpp index 579129121..b2dd3ef9f 100644 --- a/src/audio_core/in/audio_in_system.cpp +++ b/src/audio_core/in/audio_in_system.cpp @@ -57,7 +57,7 @@ Result System::IsConfigValid(const std::string_view device_name, } Result System::Initialize(std::string device_name, const AudioInParameter& in_params, - const u32 handle_, const u64 applet_resource_user_id_) { + Kernel::KProcess* handle_, const u64 applet_resource_user_id_) { auto result{IsConfigValid(device_name, in_params)}; if (result.IsError()) { return result; diff --git a/src/audio_core/in/audio_in_system.h b/src/audio_core/in/audio_in_system.h index 1c5154638..ee048190c 100644 --- a/src/audio_core/in/audio_in_system.h +++ b/src/audio_core/in/audio_in_system.h @@ -19,7 +19,8 @@ class System; namespace Kernel { class KEvent; -} +class KProcess; +} // namespace Kernel namespace AudioCore::AudioIn { @@ -93,12 +94,12 @@ public: * * @param device_name - The name of the requested input device. * @param in_params - Input parameters, see AudioInParameter. - * @param handle - Unused. + * @param handle - Process handle. * @param applet_resource_user_id - Unused. * @return Result code. */ - Result Initialize(std::string device_name, const AudioInParameter& in_params, u32 handle, - u64 applet_resource_user_id); + Result Initialize(std::string device_name, const AudioInParameter& in_params, + Kernel::KProcess* handle, u64 applet_resource_user_id); /** * Start this system. @@ -244,8 +245,8 @@ public: private: /// Core system Core::System& system; - /// (Unused) - u32 handle{}; + /// Process handle + Kernel::KProcess* handle{}; /// (Unused) u64 applet_resource_user_id{}; /// Buffer event, signalled when a buffer is ready diff --git a/src/audio_core/out/audio_out_system.cpp b/src/audio_core/out/audio_out_system.cpp index 0adf64bd3..7b3ff4e88 100644 --- a/src/audio_core/out/audio_out_system.cpp +++ b/src/audio_core/out/audio_out_system.cpp @@ -48,8 +48,8 @@ Result System::IsConfigValid(std::string_view device_name, return Service::Audio::ResultInvalidChannelCount; } -Result System::Initialize(std::string device_name, const AudioOutParameter& in_params, u32 handle_, - u64 applet_resource_user_id_) { +Result System::Initialize(std::string device_name, const AudioOutParameter& in_params, + Kernel::KProcess* handle_, u64 applet_resource_user_id_) { auto result = IsConfigValid(device_name, in_params); if (result.IsError()) { return result; diff --git a/src/audio_core/out/audio_out_system.h b/src/audio_core/out/audio_out_system.h index b95cb91be..82aada185 100644 --- a/src/audio_core/out/audio_out_system.h +++ b/src/audio_core/out/audio_out_system.h @@ -19,7 +19,8 @@ class System; namespace Kernel { class KEvent; -} +class KProcess; +} // namespace Kernel namespace AudioCore::AudioOut { @@ -84,12 +85,12 @@ public: * * @param device_name - The name of the requested output device. * @param in_params - Input parameters, see AudioOutParameter. - * @param handle - Unused. + * @param handle - Process handle. * @param applet_resource_user_id - Unused. * @return Result code. */ - Result Initialize(std::string device_name, const AudioOutParameter& in_params, u32 handle, - u64 applet_resource_user_id); + Result Initialize(std::string device_name, const AudioOutParameter& in_params, + Kernel::KProcess* handle, u64 applet_resource_user_id); /** * Start this system. @@ -228,8 +229,8 @@ public: private: /// Core system Core::System& system; - /// (Unused) - u32 handle{}; + /// Process handle + Kernel::KProcess* handle{}; /// (Unused) u64 applet_resource_user_id{}; /// Buffer event, signalled when a buffer is ready diff --git a/src/audio_core/renderer/command/command_generator.cpp b/src/audio_core/renderer/command/command_generator.cpp index ccb186209..f97db5899 100644 --- a/src/audio_core/renderer/command/command_generator.cpp +++ b/src/audio_core/renderer/command/command_generator.cpp @@ -41,7 +41,7 @@ void CommandGenerator::GenerateDataSourceCommand(VoiceInfo& voice_info, const VoiceState& voice_state, const s8 channel) { if (voice_info.mix_id == UnusedMixId) { if (voice_info.splitter_id != UnusedSplitterId) { - auto destination{splitter_context.GetDesintationData(voice_info.splitter_id, 0)}; + auto destination{splitter_context.GetDestinationData(voice_info.splitter_id, 0)}; u32 dest_id{0}; while (destination != nullptr) { if (destination->IsConfigured()) { @@ -55,7 +55,7 @@ void CommandGenerator::GenerateDataSourceCommand(VoiceInfo& voice_info, } } dest_id++; - destination = splitter_context.GetDesintationData(voice_info.splitter_id, dest_id); + destination = splitter_context.GetDestinationData(voice_info.splitter_id, dest_id); } } } else { @@ -234,7 +234,7 @@ void CommandGenerator::GenerateVoiceCommand(VoiceInfo& voice_info) { if (voice_info.mix_id == UnusedMixId) { if (voice_info.splitter_id != UnusedSplitterId) { auto i{channel}; - auto destination{splitter_context.GetDesintationData(voice_info.splitter_id, i)}; + auto destination{splitter_context.GetDestinationData(voice_info.splitter_id, i)}; while (destination != nullptr) { if (destination->IsConfigured()) { const auto mix_id{destination->GetMixId()}; @@ -249,7 +249,7 @@ void CommandGenerator::GenerateVoiceCommand(VoiceInfo& voice_info) { } } i += voice_info.channel_count; - destination = splitter_context.GetDesintationData(voice_info.splitter_id, i); + destination = splitter_context.GetDestinationData(voice_info.splitter_id, i); } } } else { @@ -591,7 +591,7 @@ void CommandGenerator::GenerateMixCommands(MixInfo& mix_info) { if (mix_info.dst_splitter_id != UnusedSplitterId) { s16 dest_id{0}; auto destination{ - splitter_context.GetDesintationData(mix_info.dst_splitter_id, dest_id)}; + splitter_context.GetDestinationData(mix_info.dst_splitter_id, dest_id)}; while (destination != nullptr) { if (destination->IsConfigured()) { auto splitter_mix_id{destination->GetMixId()}; @@ -612,7 +612,7 @@ void CommandGenerator::GenerateMixCommands(MixInfo& mix_info) { } dest_id++; destination = - splitter_context.GetDesintationData(mix_info.dst_splitter_id, dest_id); + splitter_context.GetDestinationData(mix_info.dst_splitter_id, dest_id); } } } else { diff --git a/src/audio_core/renderer/mix/mix_info.cpp b/src/audio_core/renderer/mix/mix_info.cpp index 5e44bde18..68bbe0aed 100644 --- a/src/audio_core/renderer/mix/mix_info.cpp +++ b/src/audio_core/renderer/mix/mix_info.cpp @@ -93,7 +93,7 @@ bool MixInfo::UpdateConnection(EdgeMatrix& edge_matrix, const InParameter& in_pa for (u32 i = 0; i < destination_count; i++) { auto destination{ - splitter_context.GetDesintationData(in_params.dest_splitter_id, i)}; + splitter_context.GetDestinationData(in_params.dest_splitter_id, i)}; if (destination) { const auto destination_id{destination->GetMixId()}; diff --git a/src/audio_core/renderer/splitter/splitter_context.cpp b/src/audio_core/renderer/splitter/splitter_context.cpp index 686150ea6..d0f3b60c2 100644 --- a/src/audio_core/renderer/splitter/splitter_context.cpp +++ b/src/audio_core/renderer/splitter/splitter_context.cpp @@ -9,7 +9,7 @@ namespace AudioCore::Renderer { -SplitterDestinationData* SplitterContext::GetDesintationData(const s32 splitter_id, +SplitterDestinationData* SplitterContext::GetDestinationData(const s32 splitter_id, const s32 destination_id) { return splitter_infos[splitter_id].GetData(destination_id); } diff --git a/src/audio_core/renderer/splitter/splitter_context.h b/src/audio_core/renderer/splitter/splitter_context.h index 556e6dcc3..1c0b84671 100644 --- a/src/audio_core/renderer/splitter/splitter_context.h +++ b/src/audio_core/renderer/splitter/splitter_context.h @@ -42,7 +42,7 @@ public: * @param destination_id - Destination index within the splitter. * @return Pointer to the found destination. May be nullptr. */ - SplitterDestinationData* GetDesintationData(s32 splitter_id, s32 destination_id); + SplitterDestinationData* GetDestinationData(s32 splitter_id, s32 destination_id); /** * Get a splitter from the given index. |
