diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio_core/opus/decoder.cpp | 6 | ||||
| -rw-r--r-- | src/audio_core/opus/decoder.h | 6 | ||||
| -rw-r--r-- | src/audio_core/opus/decoder_manager.cpp | 18 | ||||
| -rw-r--r-- | src/audio_core/opus/decoder_manager.h | 16 | ||||
| -rw-r--r-- | src/audio_core/opus/hardware_opus.cpp | 13 | ||||
| -rw-r--r-- | src/audio_core/opus/hardware_opus.h | 6 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_controller.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_in.cpp | 30 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_in_manager.cpp | 12 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_out.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_out_manager.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_renderer.cpp | 26 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audio_renderer_manager.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/service/audio/hardware_opus_decoder.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/audio/hardware_opus_decoder.h | 4 | ||||
| -rw-r--r-- | src/core/hle/service/audio/hardware_opus_decoder_manager.cpp | 273 | ||||
| -rw-r--r-- | src/core/hle/service/audio/hardware_opus_decoder_manager.h | 45 |
17 files changed, 230 insertions, 297 deletions
diff --git a/src/audio_core/opus/decoder.cpp b/src/audio_core/opus/decoder.cpp index b7fed5304..0c110cbeb 100644 --- a/src/audio_core/opus/decoder.cpp +++ b/src/audio_core/opus/decoder.cpp | |||
| @@ -28,8 +28,8 @@ OpusDecoder::~OpusDecoder() { | |||
| 28 | } | 28 | } |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | Result OpusDecoder::Initialize(OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory, | 31 | Result OpusDecoder::Initialize(const OpusParametersEx& params, |
| 32 | u64 transfer_memory_size) { | 32 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { |
| 33 | auto frame_size{params.use_large_frame_size ? 5760 : 1920}; | 33 | auto frame_size{params.use_large_frame_size ? 5760 : 1920}; |
| 34 | shared_buffer_size = transfer_memory_size; | 34 | shared_buffer_size = transfer_memory_size; |
| 35 | shared_buffer = std::make_unique<u8[]>(shared_buffer_size); | 35 | shared_buffer = std::make_unique<u8[]>(shared_buffer_size); |
| @@ -59,7 +59,7 @@ Result OpusDecoder::Initialize(OpusParametersEx& params, Kernel::KTransferMemory | |||
| 59 | R_SUCCEED(); | 59 | R_SUCCEED(); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | Result OpusDecoder::Initialize(OpusMultiStreamParametersEx& params, | 62 | Result OpusDecoder::Initialize(const OpusMultiStreamParametersEx& params, |
| 63 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { | 63 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size) { |
| 64 | auto frame_size{params.use_large_frame_size ? 5760 : 1920}; | 64 | auto frame_size{params.use_large_frame_size ? 5760 : 1920}; |
| 65 | shared_buffer_size = transfer_memory_size; | 65 | shared_buffer_size = transfer_memory_size; |
diff --git a/src/audio_core/opus/decoder.h b/src/audio_core/opus/decoder.h index fd728958a..1b8c257d4 100644 --- a/src/audio_core/opus/decoder.h +++ b/src/audio_core/opus/decoder.h | |||
| @@ -22,10 +22,10 @@ public: | |||
| 22 | explicit OpusDecoder(Core::System& system, HardwareOpus& hardware_opus_); | 22 | explicit OpusDecoder(Core::System& system, HardwareOpus& hardware_opus_); |
| 23 | ~OpusDecoder(); | 23 | ~OpusDecoder(); |
| 24 | 24 | ||
| 25 | Result Initialize(OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory, | 25 | Result Initialize(const OpusParametersEx& params, Kernel::KTransferMemory* transfer_memory, |
| 26 | u64 transfer_memory_size); | ||
| 27 | Result Initialize(OpusMultiStreamParametersEx& params, Kernel::KTransferMemory* transfer_memory, | ||
| 28 | u64 transfer_memory_size); | 26 | u64 transfer_memory_size); |
| 27 | Result Initialize(const OpusMultiStreamParametersEx& params, | ||
| 28 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); | ||
| 29 | Result DecodeInterleaved(u32* out_data_size, u64* out_time_taken, u32* out_sample_count, | 29 | Result DecodeInterleaved(u32* out_data_size, u64* out_time_taken, u32* out_sample_count, |
| 30 | std::span<const u8> input_data, std::span<u8> output_data, bool reset); | 30 | std::span<const u8> input_data, std::span<u8> output_data, bool reset); |
| 31 | Result SetContext([[maybe_unused]] std::span<const u8> context); | 31 | Result SetContext([[maybe_unused]] std::span<const u8> context); |
diff --git a/src/audio_core/opus/decoder_manager.cpp b/src/audio_core/opus/decoder_manager.cpp index 1464880a1..89eec1298 100644 --- a/src/audio_core/opus/decoder_manager.cpp +++ b/src/audio_core/opus/decoder_manager.cpp | |||
| @@ -38,7 +38,7 @@ OpusDecoderManager::OpusDecoderManager(Core::System& system_) | |||
| 38 | } | 38 | } |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | Result OpusDecoderManager::GetWorkBufferSize(OpusParameters& params, u64& out_size) { | 41 | Result OpusDecoderManager::GetWorkBufferSize(const OpusParameters& params, u32& out_size) { |
| 42 | OpusParametersEx ex{ | 42 | OpusParametersEx ex{ |
| 43 | .sample_rate = params.sample_rate, | 43 | .sample_rate = params.sample_rate, |
| 44 | .channel_count = params.channel_count, | 44 | .channel_count = params.channel_count, |
| @@ -47,11 +47,11 @@ Result OpusDecoderManager::GetWorkBufferSize(OpusParameters& params, u64& out_si | |||
| 47 | R_RETURN(GetWorkBufferSizeExEx(ex, out_size)); | 47 | R_RETURN(GetWorkBufferSizeExEx(ex, out_size)); |
| 48 | } | 48 | } |
| 49 | 49 | ||
| 50 | Result OpusDecoderManager::GetWorkBufferSizeEx(OpusParametersEx& params, u64& out_size) { | 50 | Result OpusDecoderManager::GetWorkBufferSizeEx(const OpusParametersEx& params, u32& out_size) { |
| 51 | R_RETURN(GetWorkBufferSizeExEx(params, out_size)); | 51 | R_RETURN(GetWorkBufferSizeExEx(params, out_size)); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | Result OpusDecoderManager::GetWorkBufferSizeExEx(OpusParametersEx& params, u64& out_size) { | 54 | Result OpusDecoderManager::GetWorkBufferSizeExEx(const OpusParametersEx& params, u32& out_size) { |
| 55 | R_UNLESS(IsValidChannelCount(params.channel_count), ResultInvalidOpusChannelCount); | 55 | R_UNLESS(IsValidChannelCount(params.channel_count), ResultInvalidOpusChannelCount); |
| 56 | R_UNLESS(IsValidSampleRate(params.sample_rate), ResultInvalidOpusSampleRate); | 56 | R_UNLESS(IsValidSampleRate(params.sample_rate), ResultInvalidOpusSampleRate); |
| 57 | 57 | ||
| @@ -63,8 +63,8 @@ Result OpusDecoderManager::GetWorkBufferSizeExEx(OpusParametersEx& params, u64& | |||
| 63 | R_SUCCEED(); | 63 | R_SUCCEED(); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStream(OpusMultiStreamParameters& params, | 66 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStream(const OpusMultiStreamParameters& params, |
| 67 | u64& out_size) { | 67 | u32& out_size) { |
| 68 | OpusMultiStreamParametersEx ex{ | 68 | OpusMultiStreamParametersEx ex{ |
| 69 | .sample_rate = params.sample_rate, | 69 | .sample_rate = params.sample_rate, |
| 70 | .channel_count = params.channel_count, | 70 | .channel_count = params.channel_count, |
| @@ -76,13 +76,13 @@ Result OpusDecoderManager::GetWorkBufferSizeForMultiStream(OpusMultiStreamParame | |||
| 76 | R_RETURN(GetWorkBufferSizeForMultiStreamExEx(ex, out_size)); | 76 | R_RETURN(GetWorkBufferSizeForMultiStreamExEx(ex, out_size)); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStreamEx(OpusMultiStreamParametersEx& params, | 79 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStreamEx( |
| 80 | u64& out_size) { | 80 | const OpusMultiStreamParametersEx& params, u32& out_size) { |
| 81 | R_RETURN(GetWorkBufferSizeForMultiStreamExEx(params, out_size)); | 81 | R_RETURN(GetWorkBufferSizeForMultiStreamExEx(params, out_size)); |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx(OpusMultiStreamParametersEx& params, | 84 | Result OpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx( |
| 85 | u64& out_size) { | 85 | const OpusMultiStreamParametersEx& params, u32& out_size) { |
| 86 | R_UNLESS(IsValidMultiStreamChannelCount(params.channel_count), ResultInvalidOpusChannelCount); | 86 | R_UNLESS(IsValidMultiStreamChannelCount(params.channel_count), ResultInvalidOpusChannelCount); |
| 87 | R_UNLESS(IsValidSampleRate(params.sample_rate), ResultInvalidOpusSampleRate); | 87 | R_UNLESS(IsValidSampleRate(params.sample_rate), ResultInvalidOpusSampleRate); |
| 88 | R_UNLESS(IsValidStreamCount(params.channel_count, params.total_stream_count, | 88 | R_UNLESS(IsValidStreamCount(params.channel_count, params.total_stream_count, |
diff --git a/src/audio_core/opus/decoder_manager.h b/src/audio_core/opus/decoder_manager.h index 70ebc4bab..8f6876d5c 100644 --- a/src/audio_core/opus/decoder_manager.h +++ b/src/audio_core/opus/decoder_manager.h | |||
| @@ -22,17 +22,19 @@ public: | |||
| 22 | return hardware_opus; | 22 | return hardware_opus; |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | Result GetWorkBufferSize(OpusParameters& params, u64& out_size); | 25 | Result GetWorkBufferSize(const OpusParameters& params, u32& out_size); |
| 26 | Result GetWorkBufferSizeEx(OpusParametersEx& params, u64& out_size); | 26 | Result GetWorkBufferSizeEx(const OpusParametersEx& params, u32& out_size); |
| 27 | Result GetWorkBufferSizeExEx(OpusParametersEx& params, u64& out_size); | 27 | Result GetWorkBufferSizeExEx(const OpusParametersEx& params, u32& out_size); |
| 28 | Result GetWorkBufferSizeForMultiStream(OpusMultiStreamParameters& params, u64& out_size); | 28 | Result GetWorkBufferSizeForMultiStream(const OpusMultiStreamParameters& params, u32& out_size); |
| 29 | Result GetWorkBufferSizeForMultiStreamEx(OpusMultiStreamParametersEx& params, u64& out_size); | 29 | Result GetWorkBufferSizeForMultiStreamEx(const OpusMultiStreamParametersEx& params, |
| 30 | Result GetWorkBufferSizeForMultiStreamExEx(OpusMultiStreamParametersEx& params, u64& out_size); | 30 | u32& out_size); |
| 31 | Result GetWorkBufferSizeForMultiStreamExEx(const OpusMultiStreamParametersEx& params, | ||
| 32 | u32& out_size); | ||
| 31 | 33 | ||
| 32 | private: | 34 | private: |
| 33 | Core::System& system; | 35 | Core::System& system; |
| 34 | HardwareOpus hardware_opus; | 36 | HardwareOpus hardware_opus; |
| 35 | std::array<u64, MaxChannels> required_workbuffer_sizes{}; | 37 | std::array<u32, MaxChannels> required_workbuffer_sizes{}; |
| 36 | }; | 38 | }; |
| 37 | 39 | ||
| 38 | } // namespace AudioCore::OpusDecoder | 40 | } // namespace AudioCore::OpusDecoder |
diff --git a/src/audio_core/opus/hardware_opus.cpp b/src/audio_core/opus/hardware_opus.cpp index 5ff71ab2d..30805f4a3 100644 --- a/src/audio_core/opus/hardware_opus.cpp +++ b/src/audio_core/opus/hardware_opus.cpp | |||
| @@ -42,7 +42,7 @@ HardwareOpus::HardwareOpus(Core::System& system_) | |||
| 42 | opus_decoder.SetSharedMemory(shared_memory); | 42 | opus_decoder.SetSharedMemory(shared_memory); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | u64 HardwareOpus::GetWorkBufferSize(u32 channel) { | 45 | u32 HardwareOpus::GetWorkBufferSize(u32 channel) { |
| 46 | if (!opus_decoder.IsRunning()) { | 46 | if (!opus_decoder.IsRunning()) { |
| 47 | return 0; | 47 | return 0; |
| 48 | } | 48 | } |
| @@ -55,10 +55,10 @@ u64 HardwareOpus::GetWorkBufferSize(u32 channel) { | |||
| 55 | ADSP::OpusDecoder::Message::GetWorkBufferSizeOK, msg); | 55 | ADSP::OpusDecoder::Message::GetWorkBufferSizeOK, msg); |
| 56 | return 0; | 56 | return 0; |
| 57 | } | 57 | } |
| 58 | return shared_memory.dsp_return_data[0]; | 58 | return static_cast<u32>(shared_memory.dsp_return_data[0]); |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | u64 HardwareOpus::GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 stereo_stream_count) { | 61 | u32 HardwareOpus::GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 stereo_stream_count) { |
| 62 | std::scoped_lock l{mutex}; | 62 | std::scoped_lock l{mutex}; |
| 63 | shared_memory.host_send_data[0] = total_stream_count; | 63 | shared_memory.host_send_data[0] = total_stream_count; |
| 64 | shared_memory.host_send_data[1] = stereo_stream_count; | 64 | shared_memory.host_send_data[1] = stereo_stream_count; |
| @@ -70,7 +70,7 @@ u64 HardwareOpus::GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 st | |||
| 70 | ADSP::OpusDecoder::Message::GetWorkBufferSizeForMultiStreamOK, msg); | 70 | ADSP::OpusDecoder::Message::GetWorkBufferSizeForMultiStreamOK, msg); |
| 71 | return 0; | 71 | return 0; |
| 72 | } | 72 | } |
| 73 | return shared_memory.dsp_return_data[0]; | 73 | return static_cast<u32>(shared_memory.dsp_return_data[0]); |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | Result HardwareOpus::InitializeDecodeObject(u32 sample_rate, u32 channel_count, void* buffer, | 76 | Result HardwareOpus::InitializeDecodeObject(u32 sample_rate, u32 channel_count, void* buffer, |
| @@ -94,8 +94,9 @@ Result HardwareOpus::InitializeDecodeObject(u32 sample_rate, u32 channel_count, | |||
| 94 | 94 | ||
| 95 | Result HardwareOpus::InitializeMultiStreamDecodeObject(u32 sample_rate, u32 channel_count, | 95 | Result HardwareOpus::InitializeMultiStreamDecodeObject(u32 sample_rate, u32 channel_count, |
| 96 | u32 total_stream_count, | 96 | u32 total_stream_count, |
| 97 | u32 stereo_stream_count, void* mappings, | 97 | u32 stereo_stream_count, |
| 98 | void* buffer, u64 buffer_size) { | 98 | const void* mappings, void* buffer, |
| 99 | u64 buffer_size) { | ||
| 99 | std::scoped_lock l{mutex}; | 100 | std::scoped_lock l{mutex}; |
| 100 | shared_memory.host_send_data[0] = (u64)buffer; | 101 | shared_memory.host_send_data[0] = (u64)buffer; |
| 101 | shared_memory.host_send_data[1] = buffer_size; | 102 | shared_memory.host_send_data[1] = buffer_size; |
diff --git a/src/audio_core/opus/hardware_opus.h b/src/audio_core/opus/hardware_opus.h index b10184baa..caa746840 100644 --- a/src/audio_core/opus/hardware_opus.h +++ b/src/audio_core/opus/hardware_opus.h | |||
| @@ -16,14 +16,14 @@ class HardwareOpus { | |||
| 16 | public: | 16 | public: |
| 17 | HardwareOpus(Core::System& system); | 17 | HardwareOpus(Core::System& system); |
| 18 | 18 | ||
| 19 | u64 GetWorkBufferSize(u32 channel); | 19 | u32 GetWorkBufferSize(u32 channel); |
| 20 | u64 GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 stereo_stream_count); | 20 | u32 GetWorkBufferSizeForMultiStream(u32 total_stream_count, u32 stereo_stream_count); |
| 21 | 21 | ||
| 22 | Result InitializeDecodeObject(u32 sample_rate, u32 channel_count, void* buffer, | 22 | Result InitializeDecodeObject(u32 sample_rate, u32 channel_count, void* buffer, |
| 23 | u64 buffer_size); | 23 | u64 buffer_size); |
| 24 | Result InitializeMultiStreamDecodeObject(u32 sample_rate, u32 channel_count, | 24 | Result InitializeMultiStreamDecodeObject(u32 sample_rate, u32 channel_count, |
| 25 | u32 totaL_stream_count, u32 stereo_stream_count, | 25 | u32 totaL_stream_count, u32 stereo_stream_count, |
| 26 | void* mappings, void* buffer, u64 buffer_size); | 26 | const void* mappings, void* buffer, u64 buffer_size); |
| 27 | Result ShutdownDecodeObject(void* buffer, u64 buffer_size); | 27 | Result ShutdownDecodeObject(void* buffer, u64 buffer_size); |
| 28 | Result ShutdownMultiStreamDecodeObject(void* buffer, u64 buffer_size); | 28 | Result ShutdownMultiStreamDecodeObject(void* buffer, u64 buffer_size); |
| 29 | Result DecodeInterleaved(u32& out_sample_count, void* output_data, u64 output_data_size, | 29 | Result DecodeInterleaved(u32& out_sample_count, void* output_data, u64 output_data_size, |
diff --git a/src/core/hle/service/audio/audio_controller.cpp b/src/core/hle/service/audio/audio_controller.cpp index a6da66d0f..d51c89118 100644 --- a/src/core/hle/service/audio/audio_controller.cpp +++ b/src/core/hle/service/audio/audio_controller.cpp | |||
| @@ -16,23 +16,23 @@ IAudioController::IAudioController(Core::System& system_) | |||
| 16 | static const FunctionInfo functions[] = { | 16 | static const FunctionInfo functions[] = { |
| 17 | {0, nullptr, "GetTargetVolume"}, | 17 | {0, nullptr, "GetTargetVolume"}, |
| 18 | {1, nullptr, "SetTargetVolume"}, | 18 | {1, nullptr, "SetTargetVolume"}, |
| 19 | {2, C<&IAudioController::GetTargetVolumeMin>, "GetTargetVolumeMin"}, | 19 | {2, D<&IAudioController::GetTargetVolumeMin>, "GetTargetVolumeMin"}, |
| 20 | {3, C<&IAudioController::GetTargetVolumeMax>, "GetTargetVolumeMax"}, | 20 | {3, D<&IAudioController::GetTargetVolumeMax>, "GetTargetVolumeMax"}, |
| 21 | {4, nullptr, "IsTargetMute"}, | 21 | {4, nullptr, "IsTargetMute"}, |
| 22 | {5, nullptr, "SetTargetMute"}, | 22 | {5, nullptr, "SetTargetMute"}, |
| 23 | {6, nullptr, "IsTargetConnected"}, | 23 | {6, nullptr, "IsTargetConnected"}, |
| 24 | {7, nullptr, "SetDefaultTarget"}, | 24 | {7, nullptr, "SetDefaultTarget"}, |
| 25 | {8, nullptr, "GetDefaultTarget"}, | 25 | {8, nullptr, "GetDefaultTarget"}, |
| 26 | {9, C<&IAudioController::GetAudioOutputMode>, "GetAudioOutputMode"}, | 26 | {9, D<&IAudioController::GetAudioOutputMode>, "GetAudioOutputMode"}, |
| 27 | {10, C<&IAudioController::SetAudioOutputMode>, "SetAudioOutputMode"}, | 27 | {10, D<&IAudioController::SetAudioOutputMode>, "SetAudioOutputMode"}, |
| 28 | {11, nullptr, "SetForceMutePolicy"}, | 28 | {11, nullptr, "SetForceMutePolicy"}, |
| 29 | {12, C<&IAudioController::GetForceMutePolicy>, "GetForceMutePolicy"}, | 29 | {12, D<&IAudioController::GetForceMutePolicy>, "GetForceMutePolicy"}, |
| 30 | {13, C<&IAudioController::GetOutputModeSetting>, "GetOutputModeSetting"}, | 30 | {13, D<&IAudioController::GetOutputModeSetting>, "GetOutputModeSetting"}, |
| 31 | {14, C<&IAudioController::SetOutputModeSetting>, "SetOutputModeSetting"}, | 31 | {14, D<&IAudioController::SetOutputModeSetting>, "SetOutputModeSetting"}, |
| 32 | {15, nullptr, "SetOutputTarget"}, | 32 | {15, nullptr, "SetOutputTarget"}, |
| 33 | {16, nullptr, "SetInputTargetForceEnabled"}, | 33 | {16, nullptr, "SetInputTargetForceEnabled"}, |
| 34 | {17, C<&IAudioController::SetHeadphoneOutputLevelMode>, "SetHeadphoneOutputLevelMode"}, | 34 | {17, D<&IAudioController::SetHeadphoneOutputLevelMode>, "SetHeadphoneOutputLevelMode"}, |
| 35 | {18, C<&IAudioController::GetHeadphoneOutputLevelMode>, "GetHeadphoneOutputLevelMode"}, | 35 | {18, D<&IAudioController::GetHeadphoneOutputLevelMode>, "GetHeadphoneOutputLevelMode"}, |
| 36 | {19, nullptr, "AcquireAudioVolumeUpdateEventForPlayReport"}, | 36 | {19, nullptr, "AcquireAudioVolumeUpdateEventForPlayReport"}, |
| 37 | {20, nullptr, "AcquireAudioOutputDeviceUpdateEventForPlayReport"}, | 37 | {20, nullptr, "AcquireAudioOutputDeviceUpdateEventForPlayReport"}, |
| 38 | {21, nullptr, "GetAudioOutputTargetForPlayReport"}, | 38 | {21, nullptr, "GetAudioOutputTargetForPlayReport"}, |
| @@ -44,11 +44,11 @@ IAudioController::IAudioController(Core::System& system_) | |||
| 44 | {27, nullptr, "SetVolumeMappingTableForDev"}, | 44 | {27, nullptr, "SetVolumeMappingTableForDev"}, |
| 45 | {28, nullptr, "GetAudioOutputChannelCountForPlayReport"}, | 45 | {28, nullptr, "GetAudioOutputChannelCountForPlayReport"}, |
| 46 | {29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"}, | 46 | {29, nullptr, "BindAudioOutputChannelCountUpdateEventForPlayReport"}, |
| 47 | {30, C<&IAudioController::SetSpeakerAutoMuteEnabled>, "SetSpeakerAutoMuteEnabled"}, | 47 | {30, D<&IAudioController::SetSpeakerAutoMuteEnabled>, "SetSpeakerAutoMuteEnabled"}, |
| 48 | {31, C<&IAudioController::IsSpeakerAutoMuteEnabled>, "IsSpeakerAutoMuteEnabled"}, | 48 | {31, D<&IAudioController::IsSpeakerAutoMuteEnabled>, "IsSpeakerAutoMuteEnabled"}, |
| 49 | {32, nullptr, "GetActiveOutputTarget"}, | 49 | {32, nullptr, "GetActiveOutputTarget"}, |
| 50 | {33, nullptr, "GetTargetDeviceInfo"}, | 50 | {33, nullptr, "GetTargetDeviceInfo"}, |
| 51 | {34, C<&IAudioController::AcquireTargetNotification>, "AcquireTargetNotification"}, | 51 | {34, D<&IAudioController::AcquireTargetNotification>, "AcquireTargetNotification"}, |
| 52 | {35, nullptr, "SetHearingProtectionSafeguardTimerRemainingTimeForDebug"}, | 52 | {35, nullptr, "SetHearingProtectionSafeguardTimerRemainingTimeForDebug"}, |
| 53 | {36, nullptr, "GetHearingProtectionSafeguardTimerRemainingTimeForDebug"}, | 53 | {36, nullptr, "GetHearingProtectionSafeguardTimerRemainingTimeForDebug"}, |
| 54 | {37, nullptr, "SetHearingProtectionSafeguardEnabled"}, | 54 | {37, nullptr, "SetHearingProtectionSafeguardEnabled"}, |
diff --git a/src/core/hle/service/audio/audio_in.cpp b/src/core/hle/service/audio/audio_in.cpp index 31d136077..9240cc336 100644 --- a/src/core/hle/service/audio/audio_in.cpp +++ b/src/core/hle/service/audio/audio_in.cpp | |||
| @@ -16,21 +16,21 @@ IAudioIn::IAudioIn(Core::System& system_, Manager& manager, size_t session_id, | |||
| 16 | impl{std::make_shared<In>(system_, manager, event, session_id)} { | 16 | impl{std::make_shared<In>(system_, manager, event, session_id)} { |
| 17 | // clang-format off | 17 | // clang-format off |
| 18 | static const FunctionInfo functions[] = { | 18 | static const FunctionInfo functions[] = { |
| 19 | {0, C<&IAudioIn::GetAudioInState>, "GetAudioInState"}, | 19 | {0, D<&IAudioIn::GetAudioInState>, "GetAudioInState"}, |
| 20 | {1, C<&IAudioIn::Start>, "Start"}, | 20 | {1, D<&IAudioIn::Start>, "Start"}, |
| 21 | {2, C<&IAudioIn::Stop>, "Stop"}, | 21 | {2, D<&IAudioIn::Stop>, "Stop"}, |
| 22 | {3, C<&IAudioIn::AppendAudioInBuffer>, "AppendAudioInBuffer"}, | 22 | {3, D<&IAudioIn::AppendAudioInBuffer>, "AppendAudioInBuffer"}, |
| 23 | {4, C<&IAudioIn::RegisterBufferEvent>, "RegisterBufferEvent"}, | 23 | {4, D<&IAudioIn::RegisterBufferEvent>, "RegisterBufferEvent"}, |
| 24 | {5, C<&IAudioIn::GetReleasedAudioInBuffers>, "GetReleasedAudioInBuffers"}, | 24 | {5, D<&IAudioIn::GetReleasedAudioInBuffers>, "GetReleasedAudioInBuffers"}, |
| 25 | {6, C<&IAudioIn::ContainsAudioInBuffer>, "ContainsAudioInBuffer"}, | 25 | {6, D<&IAudioIn::ContainsAudioInBuffer>, "ContainsAudioInBuffer"}, |
| 26 | {7, C<&IAudioIn::AppendAudioInBuffer>, "AppendUacInBuffer"}, | 26 | {7, D<&IAudioIn::AppendAudioInBuffer>, "AppendUacInBuffer"}, |
| 27 | {8, C<&IAudioIn::AppendAudioInBufferAuto>, "AppendAudioInBufferAuto"}, | 27 | {8, D<&IAudioIn::AppendAudioInBufferAuto>, "AppendAudioInBufferAuto"}, |
| 28 | {9, C<&IAudioIn::GetReleasedAudioInBuffersAuto>, "GetReleasedAudioInBuffersAuto"}, | 28 | {9, D<&IAudioIn::GetReleasedAudioInBuffersAuto>, "GetReleasedAudioInBuffersAuto"}, |
| 29 | {10, C<&IAudioIn::AppendAudioInBufferAuto>, "AppendUacInBufferAuto"}, | 29 | {10, D<&IAudioIn::AppendAudioInBufferAuto>, "AppendUacInBufferAuto"}, |
| 30 | {11, C<&IAudioIn::GetAudioInBufferCount>, "GetAudioInBufferCount"}, | 30 | {11, D<&IAudioIn::GetAudioInBufferCount>, "GetAudioInBufferCount"}, |
| 31 | {12, C<&IAudioIn::SetDeviceGain>, "SetDeviceGain"}, | 31 | {12, D<&IAudioIn::SetDeviceGain>, "SetDeviceGain"}, |
| 32 | {13, C<&IAudioIn::GetDeviceGain>, "GetDeviceGain"}, | 32 | {13, D<&IAudioIn::GetDeviceGain>, "GetDeviceGain"}, |
| 33 | {14, C<&IAudioIn::FlushAudioInBuffers>, "FlushAudioInBuffers"}, | 33 | {14, D<&IAudioIn::FlushAudioInBuffers>, "FlushAudioInBuffers"}, |
| 34 | }; | 34 | }; |
| 35 | // clang-format on | 35 | // clang-format on |
| 36 | 36 | ||
diff --git a/src/core/hle/service/audio/audio_in_manager.cpp b/src/core/hle/service/audio/audio_in_manager.cpp index 0379a2f68..9b67af367 100644 --- a/src/core/hle/service/audio/audio_in_manager.cpp +++ b/src/core/hle/service/audio/audio_in_manager.cpp | |||
| @@ -14,12 +14,12 @@ IAudioInManager::IAudioInManager(Core::System& system_) | |||
| 14 | impl{std::make_unique<AudioCore::AudioIn::Manager>(system_)} { | 14 | impl{std::make_unique<AudioCore::AudioIn::Manager>(system_)} { |
| 15 | // clang-format off | 15 | // clang-format off |
| 16 | static const FunctionInfo functions[] = { | 16 | static const FunctionInfo functions[] = { |
| 17 | {0, C<&IAudioInManager::ListAudioIns>, "ListAudioIns"}, | 17 | {0, D<&IAudioInManager::ListAudioIns>, "ListAudioIns"}, |
| 18 | {1, C<&IAudioInManager::OpenAudioIn>, "OpenAudioIn"}, | 18 | {1, D<&IAudioInManager::OpenAudioIn>, "OpenAudioIn"}, |
| 19 | {2, C<&IAudioInManager::ListAudioIns>, "ListAudioInsAuto"}, | 19 | {2, D<&IAudioInManager::ListAudioIns>, "ListAudioInsAuto"}, |
| 20 | {3, C<&IAudioInManager::OpenAudioIn>, "OpenAudioInAuto"}, | 20 | {3, D<&IAudioInManager::OpenAudioIn>, "OpenAudioInAuto"}, |
| 21 | {4, C<&IAudioInManager::ListAudioInsAutoFiltered>, "ListAudioInsAutoFiltered"}, | 21 | {4, D<&IAudioInManager::ListAudioInsAutoFiltered>, "ListAudioInsAutoFiltered"}, |
| 22 | {5, C<&IAudioInManager::OpenAudioInProtocolSpecified>, "OpenAudioInProtocolSpecified"}, | 22 | {5, D<&IAudioInManager::OpenAudioInProtocolSpecified>, "OpenAudioInProtocolSpecified"}, |
| 23 | }; | 23 | }; |
| 24 | // clang-format on | 24 | // clang-format on |
| 25 | 25 | ||
diff --git a/src/core/hle/service/audio/audio_out.cpp b/src/core/hle/service/audio/audio_out.cpp index cd2dc1f6f..53009d5d7 100644 --- a/src/core/hle/service/audio/audio_out.cpp +++ b/src/core/hle/service/audio/audio_out.cpp | |||
| @@ -21,20 +21,20 @@ IAudioOut::IAudioOut(Core::System& system_, Manager& manager, size_t session_id, | |||
| 21 | 21 | ||
| 22 | // clang-format off | 22 | // clang-format off |
| 23 | static const FunctionInfo functions[] = { | 23 | static const FunctionInfo functions[] = { |
| 24 | {0, C<&IAudioOut::GetAudioOutState>, "GetAudioOutState"}, | 24 | {0, D<&IAudioOut::GetAudioOutState>, "GetAudioOutState"}, |
| 25 | {1, C<&IAudioOut::Start>, "Start"}, | 25 | {1, D<&IAudioOut::Start>, "Start"}, |
| 26 | {2, C<&IAudioOut::Stop>, "Stop"}, | 26 | {2, D<&IAudioOut::Stop>, "Stop"}, |
| 27 | {3, C<&IAudioOut::AppendAudioOutBuffer>, "AppendAudioOutBuffer"}, | 27 | {3, D<&IAudioOut::AppendAudioOutBuffer>, "AppendAudioOutBuffer"}, |
| 28 | {4, C<&IAudioOut::RegisterBufferEvent>, "RegisterBufferEvent"}, | 28 | {4, D<&IAudioOut::RegisterBufferEvent>, "RegisterBufferEvent"}, |
| 29 | {5, C<&IAudioOut::GetReleasedAudioOutBuffers>, "GetReleasedAudioOutBuffers"}, | 29 | {5, D<&IAudioOut::GetReleasedAudioOutBuffers>, "GetReleasedAudioOutBuffers"}, |
| 30 | {6, C<&IAudioOut::ContainsAudioOutBuffer>, "ContainsAudioOutBuffer"}, | 30 | {6, D<&IAudioOut::ContainsAudioOutBuffer>, "ContainsAudioOutBuffer"}, |
| 31 | {7, C<&IAudioOut::AppendAudioOutBufferAuto>, "AppendAudioOutBufferAuto"}, | 31 | {7, D<&IAudioOut::AppendAudioOutBufferAuto>, "AppendAudioOutBufferAuto"}, |
| 32 | {8, C<&IAudioOut::GetReleasedAudioOutBuffersAuto>, "GetReleasedAudioOutBuffersAuto"}, | 32 | {8, D<&IAudioOut::GetReleasedAudioOutBuffersAuto>, "GetReleasedAudioOutBuffersAuto"}, |
| 33 | {9, C<&IAudioOut::GetAudioOutBufferCount>, "GetAudioOutBufferCount"}, | 33 | {9, D<&IAudioOut::GetAudioOutBufferCount>, "GetAudioOutBufferCount"}, |
| 34 | {10, C<&IAudioOut::GetAudioOutPlayedSampleCount>, "GetAudioOutPlayedSampleCount"}, | 34 | {10, D<&IAudioOut::GetAudioOutPlayedSampleCount>, "GetAudioOutPlayedSampleCount"}, |
| 35 | {11, C<&IAudioOut::FlushAudioOutBuffers>, "FlushAudioOutBuffers"}, | 35 | {11, D<&IAudioOut::FlushAudioOutBuffers>, "FlushAudioOutBuffers"}, |
| 36 | {12, C<&IAudioOut::SetAudioOutVolume>, "SetAudioOutVolume"}, | 36 | {12, D<&IAudioOut::SetAudioOutVolume>, "SetAudioOutVolume"}, |
| 37 | {13, C<&IAudioOut::GetAudioOutVolume>, "GetAudioOutVolume"}, | 37 | {13, D<&IAudioOut::GetAudioOutVolume>, "GetAudioOutVolume"}, |
| 38 | }; | 38 | }; |
| 39 | // clang-format on | 39 | // clang-format on |
| 40 | RegisterHandlers(functions); | 40 | RegisterHandlers(functions); |
diff --git a/src/core/hle/service/audio/audio_out_manager.cpp b/src/core/hle/service/audio/audio_out_manager.cpp index 89cd6df94..780e1dcda 100644 --- a/src/core/hle/service/audio/audio_out_manager.cpp +++ b/src/core/hle/service/audio/audio_out_manager.cpp | |||
| @@ -14,10 +14,10 @@ IAudioOutManager::IAudioOutManager(Core::System& system_) | |||
| 14 | : ServiceFramework{system_, "audout:u"}, impl{std::make_unique<Manager>(system_)} { | 14 | : ServiceFramework{system_, "audout:u"}, impl{std::make_unique<Manager>(system_)} { |
| 15 | // clang-format off | 15 | // clang-format off |
| 16 | static const FunctionInfo functions[] = { | 16 | static const FunctionInfo functions[] = { |
| 17 | {0, C<&IAudioOutManager::ListAudioOuts>, "ListAudioOuts"}, | 17 | {0, D<&IAudioOutManager::ListAudioOuts>, "ListAudioOuts"}, |
| 18 | {1, C<&IAudioOutManager::OpenAudioOut>, "OpenAudioOut"}, | 18 | {1, D<&IAudioOutManager::OpenAudioOut>, "OpenAudioOut"}, |
| 19 | {2, C<&IAudioOutManager::ListAudioOutsAuto>, "ListAudioOutsAuto"}, | 19 | {2, D<&IAudioOutManager::ListAudioOutsAuto>, "ListAudioOutsAuto"}, |
| 20 | {3, C<&IAudioOutManager::OpenAudioOutAuto>, "OpenAudioOutAuto"}, | 20 | {3, D<&IAudioOutManager::OpenAudioOutAuto>, "OpenAudioOutAuto"}, |
| 21 | }; | 21 | }; |
| 22 | // clang-format on | 22 | // clang-format on |
| 23 | 23 | ||
diff --git a/src/core/hle/service/audio/audio_renderer.cpp b/src/core/hle/service/audio/audio_renderer.cpp index fc20054b4..b78660cea 100644 --- a/src/core/hle/service/audio/audio_renderer.cpp +++ b/src/core/hle/service/audio/audio_renderer.cpp | |||
| @@ -18,20 +18,20 @@ IAudioRenderer::IAudioRenderer(Core::System& system_, Manager& manager_, | |||
| 18 | process_handle{process_handle_} { | 18 | process_handle{process_handle_} { |
| 19 | // clang-format off | 19 | // clang-format off |
| 20 | static const FunctionInfo functions[] = { | 20 | static const FunctionInfo functions[] = { |
| 21 | {0, C<&IAudioRenderer::GetSampleRate>, "GetSampleRate"}, | 21 | {0, D<&IAudioRenderer::GetSampleRate>, "GetSampleRate"}, |
| 22 | {1, C<&IAudioRenderer::GetSampleCount>, "GetSampleCount"}, | 22 | {1, D<&IAudioRenderer::GetSampleCount>, "GetSampleCount"}, |
| 23 | {2, C<&IAudioRenderer::GetMixBufferCount>, "GetMixBufferCount"}, | 23 | {2, D<&IAudioRenderer::GetMixBufferCount>, "GetMixBufferCount"}, |
| 24 | {3, C<&IAudioRenderer::GetState>, "GetState"}, | 24 | {3, D<&IAudioRenderer::GetState>, "GetState"}, |
| 25 | {4, C<&IAudioRenderer::RequestUpdate>, "RequestUpdate"}, | 25 | {4, D<&IAudioRenderer::RequestUpdate>, "RequestUpdate"}, |
| 26 | {5, C<&IAudioRenderer::Start>, "Start"}, | 26 | {5, D<&IAudioRenderer::Start>, "Start"}, |
| 27 | {6, C<&IAudioRenderer::Stop>, "Stop"}, | 27 | {6, D<&IAudioRenderer::Stop>, "Stop"}, |
| 28 | {7, C<&IAudioRenderer::QuerySystemEvent>, "QuerySystemEvent"}, | 28 | {7, D<&IAudioRenderer::QuerySystemEvent>, "QuerySystemEvent"}, |
| 29 | {8, C<&IAudioRenderer::SetRenderingTimeLimit>, "SetRenderingTimeLimit"}, | 29 | {8, D<&IAudioRenderer::SetRenderingTimeLimit>, "SetRenderingTimeLimit"}, |
| 30 | {9, C<&IAudioRenderer::GetRenderingTimeLimit>, "GetRenderingTimeLimit"}, | 30 | {9, D<&IAudioRenderer::GetRenderingTimeLimit>, "GetRenderingTimeLimit"}, |
| 31 | {10, C<&IAudioRenderer::RequestUpdateAuto>, "RequestUpdateAuto"}, | 31 | {10, D<&IAudioRenderer::RequestUpdateAuto>, "RequestUpdateAuto"}, |
| 32 | {11, nullptr, "ExecuteAudioRendererRendering"}, | 32 | {11, nullptr, "ExecuteAudioRendererRendering"}, |
| 33 | {12, C<&IAudioRenderer::SetVoiceDropParameter>, "SetVoiceDropParameter"}, | 33 | {12, D<&IAudioRenderer::SetVoiceDropParameter>, "SetVoiceDropParameter"}, |
| 34 | {13, C<&IAudioRenderer::GetVoiceDropParameter>, "GetVoiceDropParameter"}, | 34 | {13, D<&IAudioRenderer::GetVoiceDropParameter>, "GetVoiceDropParameter"}, |
| 35 | }; | 35 | }; |
| 36 | // clang-format on | 36 | // clang-format on |
| 37 | RegisterHandlers(functions); | 37 | RegisterHandlers(functions); |
diff --git a/src/core/hle/service/audio/audio_renderer_manager.cpp b/src/core/hle/service/audio/audio_renderer_manager.cpp index 3129169a4..6a1345c07 100644 --- a/src/core/hle/service/audio/audio_renderer_manager.cpp +++ b/src/core/hle/service/audio/audio_renderer_manager.cpp | |||
| @@ -18,11 +18,11 @@ IAudioRendererManager::IAudioRendererManager(Core::System& system_) | |||
| 18 | : ServiceFramework{system_, "audren:u"}, impl{std::make_unique<Manager>(system_)} { | 18 | : ServiceFramework{system_, "audren:u"}, impl{std::make_unique<Manager>(system_)} { |
| 19 | // clang-format off | 19 | // clang-format off |
| 20 | static const FunctionInfo functions[] = { | 20 | static const FunctionInfo functions[] = { |
| 21 | {0, C<&IAudioRendererManager::OpenAudioRenderer>, "OpenAudioRenderer"}, | 21 | {0, D<&IAudioRendererManager::OpenAudioRenderer>, "OpenAudioRenderer"}, |
| 22 | {1, C<&IAudioRendererManager::GetWorkBufferSize>, "GetWorkBufferSize"}, | 22 | {1, D<&IAudioRendererManager::GetWorkBufferSize>, "GetWorkBufferSize"}, |
| 23 | {2, C<&IAudioRendererManager::GetAudioDeviceService>, "GetAudioDeviceService"}, | 23 | {2, D<&IAudioRendererManager::GetAudioDeviceService>, "GetAudioDeviceService"}, |
| 24 | {3, nullptr, "OpenAudioRendererForManualExecution"}, | 24 | {3, nullptr, "OpenAudioRendererForManualExecution"}, |
| 25 | {4, C<&IAudioRendererManager::GetAudioDeviceServiceWithRevisionInfo>, "GetAudioDeviceServiceWithRevisionInfo"}, | 25 | {4, D<&IAudioRendererManager::GetAudioDeviceServiceWithRevisionInfo>, "GetAudioDeviceServiceWithRevisionInfo"}, |
| 26 | }; | 26 | }; |
| 27 | // clang-format on | 27 | // clang-format on |
| 28 | 28 | ||
diff --git a/src/core/hle/service/audio/hardware_opus_decoder.cpp b/src/core/hle/service/audio/hardware_opus_decoder.cpp index 876bfe334..e398511a6 100644 --- a/src/core/hle/service/audio/hardware_opus_decoder.cpp +++ b/src/core/hle/service/audio/hardware_opus_decoder.cpp | |||
| @@ -31,13 +31,13 @@ IHardwareOpusDecoder::IHardwareOpusDecoder(Core::System& system_, HardwareOpus& | |||
| 31 | 31 | ||
| 32 | IHardwareOpusDecoder::~IHardwareOpusDecoder() = default; | 32 | IHardwareOpusDecoder::~IHardwareOpusDecoder() = default; |
| 33 | 33 | ||
| 34 | Result IHardwareOpusDecoder::Initialize(OpusParametersEx& params, | 34 | Result IHardwareOpusDecoder::Initialize(const OpusParametersEx& params, |
| 35 | Kernel::KTransferMemory* transfer_memory, | 35 | Kernel::KTransferMemory* transfer_memory, |
| 36 | u64 transfer_memory_size) { | 36 | u64 transfer_memory_size) { |
| 37 | return impl->Initialize(params, transfer_memory, transfer_memory_size); | 37 | return impl->Initialize(params, transfer_memory, transfer_memory_size); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | Result IHardwareOpusDecoder::Initialize(OpusMultiStreamParametersEx& params, | 40 | Result IHardwareOpusDecoder::Initialize(const OpusMultiStreamParametersEx& params, |
| 41 | Kernel::KTransferMemory* transfer_memory, | 41 | Kernel::KTransferMemory* transfer_memory, |
| 42 | u64 transfer_memory_size) { | 42 | u64 transfer_memory_size) { |
| 43 | return impl->Initialize(params, transfer_memory, transfer_memory_size); | 43 | return impl->Initialize(params, transfer_memory, transfer_memory_size); |
diff --git a/src/core/hle/service/audio/hardware_opus_decoder.h b/src/core/hle/service/audio/hardware_opus_decoder.h index fe6636ce6..121858a6f 100644 --- a/src/core/hle/service/audio/hardware_opus_decoder.h +++ b/src/core/hle/service/audio/hardware_opus_decoder.h | |||
| @@ -14,9 +14,9 @@ public: | |||
| 14 | AudioCore::OpusDecoder::HardwareOpus& hardware_opus); | 14 | AudioCore::OpusDecoder::HardwareOpus& hardware_opus); |
| 15 | ~IHardwareOpusDecoder() override; | 15 | ~IHardwareOpusDecoder() override; |
| 16 | 16 | ||
| 17 | Result Initialize(AudioCore::OpusDecoder::OpusParametersEx& params, | 17 | Result Initialize(const AudioCore::OpusDecoder::OpusParametersEx& params, |
| 18 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); | 18 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); |
| 19 | Result Initialize(AudioCore::OpusDecoder::OpusMultiStreamParametersEx& params, | 19 | Result Initialize(const AudioCore::OpusDecoder::OpusMultiStreamParametersEx& params, |
| 20 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); | 20 | Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size); |
| 21 | 21 | ||
| 22 | private: | 22 | private: |
diff --git a/src/core/hle/service/audio/hardware_opus_decoder_manager.cpp b/src/core/hle/service/audio/hardware_opus_decoder_manager.cpp index 6d7205cd2..9de72e30f 100644 --- a/src/core/hle/service/audio/hardware_opus_decoder_manager.cpp +++ b/src/core/hle/service/audio/hardware_opus_decoder_manager.cpp | |||
| @@ -3,241 +3,154 @@ | |||
| 3 | 3 | ||
| 4 | #include "core/hle/service/audio/hardware_opus_decoder.h" | 4 | #include "core/hle/service/audio/hardware_opus_decoder.h" |
| 5 | #include "core/hle/service/audio/hardware_opus_decoder_manager.h" | 5 | #include "core/hle/service/audio/hardware_opus_decoder_manager.h" |
| 6 | #include "core/hle/service/ipc_helpers.h" | 6 | #include "core/hle/service/cmif_serialization.h" |
| 7 | 7 | ||
| 8 | namespace Service::Audio { | 8 | namespace Service::Audio { |
| 9 | 9 | ||
| 10 | using namespace AudioCore::OpusDecoder; | 10 | using namespace AudioCore::OpusDecoder; |
| 11 | 11 | ||
| 12 | void IHardwareOpusDecoderManager::OpenHardwareOpusDecoder(HLERequestContext& ctx) { | 12 | IHardwareOpusDecoderManager::IHardwareOpusDecoderManager(Core::System& system_) |
| 13 | IPC::RequestParser rp{ctx}; | 13 | : ServiceFramework{system_, "hwopus"}, system{system_}, impl{system} { |
| 14 | // clang-format off | ||
| 15 | static const FunctionInfo functions[] = { | ||
| 16 | {0, D<&IHardwareOpusDecoderManager::OpenHardwareOpusDecoder>, "OpenHardwareOpusDecoder"}, | ||
| 17 | {1, D<&IHardwareOpusDecoderManager::GetWorkBufferSize>, "GetWorkBufferSize"}, | ||
| 18 | {2, D<&IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStream>, "OpenOpusDecoderForMultiStream"}, | ||
| 19 | {3, D<&IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStream>, "GetWorkBufferSizeForMultiStream"}, | ||
| 20 | {4, D<&IHardwareOpusDecoderManager::OpenHardwareOpusDecoderEx>, "OpenHardwareOpusDecoderEx"}, | ||
| 21 | {5, D<&IHardwareOpusDecoderManager::GetWorkBufferSizeEx>, "GetWorkBufferSizeEx"}, | ||
| 22 | {6, D<&IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStreamEx>, "OpenHardwareOpusDecoderForMultiStreamEx"}, | ||
| 23 | {7, D<&IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamEx>, "GetWorkBufferSizeForMultiStreamEx"}, | ||
| 24 | {8, D<&IHardwareOpusDecoderManager::GetWorkBufferSizeExEx>, "GetWorkBufferSizeExEx"}, | ||
| 25 | {9, D<&IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx>, "GetWorkBufferSizeForMultiStreamExEx"}, | ||
| 26 | }; | ||
| 27 | // clang-format on | ||
| 28 | RegisterHandlers(functions); | ||
| 29 | } | ||
| 14 | 30 | ||
| 15 | auto params = rp.PopRaw<OpusParameters>(); | 31 | IHardwareOpusDecoderManager::~IHardwareOpusDecoderManager() = default; |
| 16 | auto transfer_memory_size{rp.Pop<u32>()}; | ||
| 17 | auto transfer_memory_handle{ctx.GetCopyHandle(0)}; | ||
| 18 | auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)}; | ||
| 19 | 32 | ||
| 20 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} transfer_memory_size 0x{:X}", | 33 | Result IHardwareOpusDecoderManager::OpenHardwareOpusDecoder( |
| 21 | params.sample_rate, params.channel_count, transfer_memory_size); | 34 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, OpusParameters params, u32 tmem_size, |
| 35 | InCopyHandle<Kernel::KTransferMemory> tmem_handle) { | ||
| 36 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} transfer_memory_size {:#x}", | ||
| 37 | params.sample_rate, params.channel_count, tmem_size); | ||
| 22 | 38 | ||
| 23 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; | 39 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; |
| 24 | |||
| 25 | OpusParametersEx ex{ | 40 | OpusParametersEx ex{ |
| 26 | .sample_rate = params.sample_rate, | 41 | .sample_rate = params.sample_rate, |
| 27 | .channel_count = params.channel_count, | 42 | .channel_count = params.channel_count, |
| 28 | .use_large_frame_size = false, | 43 | .use_large_frame_size = false, |
| 29 | }; | 44 | }; |
| 30 | auto result = decoder->Initialize(ex, transfer_memory.GetPointerUnsafe(), transfer_memory_size); | 45 | R_TRY(decoder->Initialize(ex, tmem_handle.Get(), tmem_size)); |
| 31 | 46 | ||
| 32 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 47 | *out_decoder = decoder; |
| 33 | rb.Push(result); | 48 | R_SUCCEED(); |
| 34 | rb.PushIpcInterface(decoder); | ||
| 35 | } | 49 | } |
| 36 | 50 | ||
| 37 | void IHardwareOpusDecoderManager::GetWorkBufferSize(HLERequestContext& ctx) { | 51 | Result IHardwareOpusDecoderManager::GetWorkBufferSize(Out<u32> out_size, OpusParameters params) { |
| 38 | IPC::RequestParser rp{ctx}; | 52 | R_TRY(impl.GetWorkBufferSize(params, *out_size)); |
| 39 | auto params = rp.PopRaw<OpusParameters>(); | 53 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} -- returned size {:#x}", |
| 40 | 54 | params.sample_rate, params.channel_count, *out_size); | |
| 41 | u64 size{}; | 55 | R_SUCCEED(); |
| 42 | auto result = impl.GetWorkBufferSize(params, size); | ||
| 43 | |||
| 44 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} -- returned size 0x{:X}", | ||
| 45 | params.sample_rate, params.channel_count, size); | ||
| 46 | |||
| 47 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 48 | rb.Push(result); | ||
| 49 | rb.Push(size); | ||
| 50 | } | 56 | } |
| 51 | 57 | ||
| 52 | void IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStream(HLERequestContext& ctx) { | 58 | Result IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStream( |
| 53 | IPC::RequestParser rp{ctx}; | 59 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, |
| 54 | 60 | InLargeData<OpusMultiStreamParameters, BufferAttr_HipcPointer> params, u32 tmem_size, | |
| 55 | auto input{ctx.ReadBuffer()}; | 61 | InCopyHandle<Kernel::KTransferMemory> tmem_handle) { |
| 56 | OpusMultiStreamParameters params; | ||
| 57 | std::memcpy(¶ms, input.data(), sizeof(OpusMultiStreamParameters)); | ||
| 58 | |||
| 59 | auto transfer_memory_size{rp.Pop<u32>()}; | ||
| 60 | auto transfer_memory_handle{ctx.GetCopyHandle(0)}; | ||
| 61 | auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)}; | ||
| 62 | |||
| 63 | LOG_DEBUG(Service_Audio, | 62 | LOG_DEBUG(Service_Audio, |
| 64 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " | 63 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " |
| 65 | "transfer_memory_size 0x{:X}", | 64 | "transfer_memory_size {:#x}", |
| 66 | params.sample_rate, params.channel_count, params.total_stream_count, | 65 | params->sample_rate, params->channel_count, params->total_stream_count, |
| 67 | params.stereo_stream_count, transfer_memory_size); | 66 | params->stereo_stream_count, tmem_size); |
| 68 | 67 | ||
| 69 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; | 68 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; |
| 70 | 69 | ||
| 71 | OpusMultiStreamParametersEx ex{ | 70 | OpusMultiStreamParametersEx ex{ |
| 72 | .sample_rate = params.sample_rate, | 71 | .sample_rate = params->sample_rate, |
| 73 | .channel_count = params.channel_count, | 72 | .channel_count = params->channel_count, |
| 74 | .total_stream_count = params.total_stream_count, | 73 | .total_stream_count = params->total_stream_count, |
| 75 | .stereo_stream_count = params.stereo_stream_count, | 74 | .stereo_stream_count = params->stereo_stream_count, |
| 76 | .use_large_frame_size = false, | 75 | .use_large_frame_size = false, |
| 77 | .mappings{}, | 76 | .mappings{}, |
| 78 | }; | 77 | }; |
| 79 | std::memcpy(ex.mappings.data(), params.mappings.data(), sizeof(params.mappings)); | 78 | std::memcpy(ex.mappings.data(), params->mappings.data(), sizeof(params->mappings)); |
| 80 | auto result = decoder->Initialize(ex, transfer_memory.GetPointerUnsafe(), transfer_memory_size); | 79 | R_TRY(decoder->Initialize(ex, tmem_handle.Get(), tmem_size)); |
| 81 | 80 | ||
| 82 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 81 | *out_decoder = decoder; |
| 83 | rb.Push(result); | 82 | R_SUCCEED(); |
| 84 | rb.PushIpcInterface(decoder); | ||
| 85 | } | 83 | } |
| 86 | 84 | ||
| 87 | void IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStream(HLERequestContext& ctx) { | 85 | Result IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStream( |
| 88 | IPC::RequestParser rp{ctx}; | 86 | Out<u32> out_size, InLargeData<OpusMultiStreamParameters, BufferAttr_HipcPointer> params) { |
| 89 | 87 | R_TRY(impl.GetWorkBufferSizeForMultiStream(*params, *out_size)); | |
| 90 | auto input{ctx.ReadBuffer()}; | 88 | LOG_DEBUG(Service_Audio, "size {:#x}", *out_size); |
| 91 | OpusMultiStreamParameters params; | 89 | R_SUCCEED(); |
| 92 | std::memcpy(¶ms, input.data(), sizeof(OpusMultiStreamParameters)); | ||
| 93 | |||
| 94 | u64 size{}; | ||
| 95 | auto result = impl.GetWorkBufferSizeForMultiStream(params, size); | ||
| 96 | |||
| 97 | LOG_DEBUG(Service_Audio, "size 0x{:X}", size); | ||
| 98 | |||
| 99 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 100 | rb.Push(result); | ||
| 101 | rb.Push(size); | ||
| 102 | } | 90 | } |
| 103 | 91 | ||
| 104 | void IHardwareOpusDecoderManager::OpenHardwareOpusDecoderEx(HLERequestContext& ctx) { | 92 | Result IHardwareOpusDecoderManager::OpenHardwareOpusDecoderEx( |
| 105 | IPC::RequestParser rp{ctx}; | 93 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, OpusParametersEx params, u32 tmem_size, |
| 106 | 94 | InCopyHandle<Kernel::KTransferMemory> tmem_handle) { | |
| 107 | auto params = rp.PopRaw<OpusParametersEx>(); | 95 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} transfer_memory_size {:#x}", |
| 108 | auto transfer_memory_size{rp.Pop<u32>()}; | 96 | params.sample_rate, params.channel_count, tmem_size); |
| 109 | auto transfer_memory_handle{ctx.GetCopyHandle(0)}; | ||
| 110 | auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)}; | ||
| 111 | |||
| 112 | LOG_DEBUG(Service_Audio, "sample_rate {} channel_count {} transfer_memory_size 0x{:X}", | ||
| 113 | params.sample_rate, params.channel_count, transfer_memory_size); | ||
| 114 | 97 | ||
| 115 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; | 98 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; |
| 99 | R_TRY(decoder->Initialize(params, tmem_handle.Get(), tmem_size)); | ||
| 116 | 100 | ||
| 117 | auto result = | 101 | *out_decoder = decoder; |
| 118 | decoder->Initialize(params, transfer_memory.GetPointerUnsafe(), transfer_memory_size); | 102 | R_SUCCEED(); |
| 119 | |||
| 120 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||
| 121 | rb.Push(result); | ||
| 122 | rb.PushIpcInterface(decoder); | ||
| 123 | } | 103 | } |
| 124 | 104 | ||
| 125 | void IHardwareOpusDecoderManager::GetWorkBufferSizeEx(HLERequestContext& ctx) { | 105 | Result IHardwareOpusDecoderManager::GetWorkBufferSizeEx(Out<u32> out_size, |
| 126 | IPC::RequestParser rp{ctx}; | 106 | OpusParametersEx params) { |
| 127 | auto params = rp.PopRaw<OpusParametersEx>(); | 107 | R_TRY(impl.GetWorkBufferSizeEx(params, *out_size)); |
| 128 | 108 | LOG_DEBUG(Service_Audio, "size {:#x}", *out_size); | |
| 129 | u64 size{}; | 109 | R_SUCCEED(); |
| 130 | auto result = impl.GetWorkBufferSizeEx(params, size); | ||
| 131 | |||
| 132 | LOG_DEBUG(Service_Audio, "size 0x{:X}", size); | ||
| 133 | |||
| 134 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 135 | rb.Push(result); | ||
| 136 | rb.Push(size); | ||
| 137 | } | 110 | } |
| 138 | 111 | ||
| 139 | void IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStreamEx(HLERequestContext& ctx) { | 112 | Result IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStreamEx( |
| 140 | IPC::RequestParser rp{ctx}; | 113 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, |
| 141 | 114 | InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params, u32 tmem_size, | |
| 142 | auto input{ctx.ReadBuffer()}; | 115 | InCopyHandle<Kernel::KTransferMemory> tmem_handle) { |
| 143 | OpusMultiStreamParametersEx params; | ||
| 144 | std::memcpy(¶ms, input.data(), sizeof(OpusMultiStreamParametersEx)); | ||
| 145 | |||
| 146 | auto transfer_memory_size{rp.Pop<u32>()}; | ||
| 147 | auto transfer_memory_handle{ctx.GetCopyHandle(0)}; | ||
| 148 | auto transfer_memory{ctx.GetObjectFromHandle<Kernel::KTransferMemory>(transfer_memory_handle)}; | ||
| 149 | |||
| 150 | LOG_DEBUG(Service_Audio, | 116 | LOG_DEBUG(Service_Audio, |
| 151 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " | 117 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " |
| 152 | "use_large_frame_size {}" | 118 | "use_large_frame_size {}" |
| 153 | "transfer_memory_size 0x{:X}", | 119 | "transfer_memory_size {:#x}", |
| 154 | params.sample_rate, params.channel_count, params.total_stream_count, | 120 | params->sample_rate, params->channel_count, params->total_stream_count, |
| 155 | params.stereo_stream_count, params.use_large_frame_size, transfer_memory_size); | 121 | params->stereo_stream_count, params->use_large_frame_size, tmem_size); |
| 156 | 122 | ||
| 157 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; | 123 | auto decoder{std::make_shared<IHardwareOpusDecoder>(system, impl.GetHardwareOpus())}; |
| 158 | 124 | ||
| 159 | auto result = | 125 | R_TRY(decoder->Initialize(*params, tmem_handle.Get(), tmem_size)); |
| 160 | decoder->Initialize(params, transfer_memory.GetPointerUnsafe(), transfer_memory_size); | ||
| 161 | 126 | ||
| 162 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 127 | *out_decoder = decoder; |
| 163 | rb.Push(result); | 128 | R_SUCCEED(); |
| 164 | rb.PushIpcInterface(decoder); | ||
| 165 | } | 129 | } |
| 166 | 130 | ||
| 167 | void IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamEx(HLERequestContext& ctx) { | 131 | Result IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamEx( |
| 168 | IPC::RequestParser rp{ctx}; | 132 | Out<u32> out_size, InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params) { |
| 169 | 133 | R_TRY(impl.GetWorkBufferSizeForMultiStreamEx(*params, *out_size)); | |
| 170 | auto input{ctx.ReadBuffer()}; | ||
| 171 | OpusMultiStreamParametersEx params; | ||
| 172 | std::memcpy(¶ms, input.data(), sizeof(OpusMultiStreamParametersEx)); | ||
| 173 | |||
| 174 | u64 size{}; | ||
| 175 | auto result = impl.GetWorkBufferSizeForMultiStreamEx(params, size); | ||
| 176 | |||
| 177 | LOG_DEBUG(Service_Audio, | 134 | LOG_DEBUG(Service_Audio, |
| 178 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " | 135 | "sample_rate {} channel_count {} total_stream_count {} stereo_stream_count {} " |
| 179 | "use_large_frame_size {} -- returned size 0x{:X}", | 136 | "use_large_frame_size {} -- returned size {:#x}", |
| 180 | params.sample_rate, params.channel_count, params.total_stream_count, | 137 | params->sample_rate, params->channel_count, params->total_stream_count, |
| 181 | params.stereo_stream_count, params.use_large_frame_size, size); | 138 | params->stereo_stream_count, params->use_large_frame_size, *out_size); |
| 182 | 139 | R_SUCCEED(); | |
| 183 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 184 | rb.Push(result); | ||
| 185 | rb.Push(size); | ||
| 186 | } | ||
| 187 | |||
| 188 | void IHardwareOpusDecoderManager::GetWorkBufferSizeExEx(HLERequestContext& ctx) { | ||
| 189 | IPC::RequestParser rp{ctx}; | ||
| 190 | auto params = rp.PopRaw<OpusParametersEx>(); | ||
| 191 | |||
| 192 | u64 size{}; | ||
| 193 | auto result = impl.GetWorkBufferSizeExEx(params, size); | ||
| 194 | |||
| 195 | LOG_DEBUG(Service_Audio, "size 0x{:X}", size); | ||
| 196 | |||
| 197 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 198 | rb.Push(result); | ||
| 199 | rb.Push(size); | ||
| 200 | } | 140 | } |
| 201 | 141 | ||
| 202 | void IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx(HLERequestContext& ctx) { | 142 | Result IHardwareOpusDecoderManager::GetWorkBufferSizeExEx(Out<u32> out_size, |
| 203 | IPC::RequestParser rp{ctx}; | 143 | OpusParametersEx params) { |
| 204 | 144 | R_TRY(impl.GetWorkBufferSizeExEx(params, *out_size)); | |
| 205 | auto input{ctx.ReadBuffer()}; | 145 | LOG_DEBUG(Service_Audio, "size {:#x}", *out_size); |
| 206 | OpusMultiStreamParametersEx params; | 146 | R_SUCCEED(); |
| 207 | std::memcpy(¶ms, input.data(), sizeof(OpusMultiStreamParametersEx)); | ||
| 208 | |||
| 209 | u64 size{}; | ||
| 210 | auto result = impl.GetWorkBufferSizeForMultiStreamExEx(params, size); | ||
| 211 | |||
| 212 | LOG_DEBUG(Service_Audio, "size 0x{:X}", size); | ||
| 213 | |||
| 214 | IPC::ResponseBuilder rb{ctx, 4}; | ||
| 215 | rb.Push(result); | ||
| 216 | rb.Push(size); | ||
| 217 | } | 147 | } |
| 218 | 148 | ||
| 219 | IHardwareOpusDecoderManager::IHardwareOpusDecoderManager(Core::System& system_) | 149 | Result IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx( |
| 220 | : ServiceFramework{system_, "hwopus"}, system{system_}, impl{system} { | 150 | Out<u32> out_size, InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params) { |
| 221 | static const FunctionInfo functions[] = { | 151 | R_TRY(impl.GetWorkBufferSizeForMultiStreamExEx(*params, *out_size)); |
| 222 | {0, &IHardwareOpusDecoderManager::OpenHardwareOpusDecoder, "OpenHardwareOpusDecoder"}, | 152 | LOG_DEBUG(Service_Audio, "size {:#x}", *out_size); |
| 223 | {1, &IHardwareOpusDecoderManager::GetWorkBufferSize, "GetWorkBufferSize"}, | 153 | R_SUCCEED(); |
| 224 | {2, &IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStream, | ||
| 225 | "OpenOpusDecoderForMultiStream"}, | ||
| 226 | {3, &IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStream, | ||
| 227 | "GetWorkBufferSizeForMultiStream"}, | ||
| 228 | {4, &IHardwareOpusDecoderManager::OpenHardwareOpusDecoderEx, "OpenHardwareOpusDecoderEx"}, | ||
| 229 | {5, &IHardwareOpusDecoderManager::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"}, | ||
| 230 | {6, &IHardwareOpusDecoderManager::OpenHardwareOpusDecoderForMultiStreamEx, | ||
| 231 | "OpenHardwareOpusDecoderForMultiStreamEx"}, | ||
| 232 | {7, &IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamEx, | ||
| 233 | "GetWorkBufferSizeForMultiStreamEx"}, | ||
| 234 | {8, &IHardwareOpusDecoderManager::GetWorkBufferSizeExEx, "GetWorkBufferSizeExEx"}, | ||
| 235 | {9, &IHardwareOpusDecoderManager::GetWorkBufferSizeForMultiStreamExEx, | ||
| 236 | "GetWorkBufferSizeForMultiStreamExEx"}, | ||
| 237 | }; | ||
| 238 | RegisterHandlers(functions); | ||
| 239 | } | 154 | } |
| 240 | 155 | ||
| 241 | IHardwareOpusDecoderManager::~IHardwareOpusDecoderManager() = default; | ||
| 242 | |||
| 243 | } // namespace Service::Audio | 156 | } // namespace Service::Audio |
diff --git a/src/core/hle/service/audio/hardware_opus_decoder_manager.h b/src/core/hle/service/audio/hardware_opus_decoder_manager.h index 29b1f16f5..4f869c517 100644 --- a/src/core/hle/service/audio/hardware_opus_decoder_manager.h +++ b/src/core/hle/service/audio/hardware_opus_decoder_manager.h | |||
| @@ -4,30 +4,47 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include "audio_core/opus/decoder_manager.h" | 6 | #include "audio_core/opus/decoder_manager.h" |
| 7 | #include "core/hle/service/cmif_types.h" | ||
| 7 | #include "core/hle/service/service.h" | 8 | #include "core/hle/service/service.h" |
| 8 | 9 | ||
| 9 | namespace Core { | ||
| 10 | class System; | ||
| 11 | } | ||
| 12 | |||
| 13 | namespace Service::Audio { | 10 | namespace Service::Audio { |
| 14 | 11 | ||
| 12 | class IHardwareOpusDecoder; | ||
| 13 | |||
| 14 | using AudioCore::OpusDecoder::OpusMultiStreamParameters; | ||
| 15 | using AudioCore::OpusDecoder::OpusMultiStreamParametersEx; | ||
| 16 | using AudioCore::OpusDecoder::OpusParameters; | ||
| 17 | using AudioCore::OpusDecoder::OpusParametersEx; | ||
| 18 | |||
| 15 | class IHardwareOpusDecoderManager final : public ServiceFramework<IHardwareOpusDecoderManager> { | 19 | class IHardwareOpusDecoderManager final : public ServiceFramework<IHardwareOpusDecoderManager> { |
| 16 | public: | 20 | public: |
| 17 | explicit IHardwareOpusDecoderManager(Core::System& system_); | 21 | explicit IHardwareOpusDecoderManager(Core::System& system_); |
| 18 | ~IHardwareOpusDecoderManager() override; | 22 | ~IHardwareOpusDecoderManager() override; |
| 19 | 23 | ||
| 20 | private: | 24 | private: |
| 21 | void OpenHardwareOpusDecoder(HLERequestContext& ctx); | 25 | Result OpenHardwareOpusDecoder(Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, |
| 22 | void GetWorkBufferSize(HLERequestContext& ctx); | 26 | OpusParameters params, u32 tmem_size, |
| 23 | void OpenHardwareOpusDecoderForMultiStream(HLERequestContext& ctx); | 27 | InCopyHandle<Kernel::KTransferMemory> tmem_handle); |
| 24 | void GetWorkBufferSizeForMultiStream(HLERequestContext& ctx); | 28 | Result GetWorkBufferSize(Out<u32> out_size, OpusParameters params); |
| 25 | void OpenHardwareOpusDecoderEx(HLERequestContext& ctx); | 29 | Result OpenHardwareOpusDecoderForMultiStream( |
| 26 | void GetWorkBufferSizeEx(HLERequestContext& ctx); | 30 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, |
| 27 | void OpenHardwareOpusDecoderForMultiStreamEx(HLERequestContext& ctx); | 31 | InLargeData<OpusMultiStreamParameters, BufferAttr_HipcPointer> params, u32 tmem_size, |
| 28 | void GetWorkBufferSizeForMultiStreamEx(HLERequestContext& ctx); | 32 | InCopyHandle<Kernel::KTransferMemory> tmem_handle); |
| 29 | void GetWorkBufferSizeExEx(HLERequestContext& ctx); | 33 | Result GetWorkBufferSizeForMultiStream( |
| 30 | void GetWorkBufferSizeForMultiStreamExEx(HLERequestContext& ctx); | 34 | Out<u32> out_size, InLargeData<OpusMultiStreamParameters, BufferAttr_HipcPointer> params); |
| 35 | Result OpenHardwareOpusDecoderEx(Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, | ||
| 36 | OpusParametersEx params, u32 tmem_size, | ||
| 37 | InCopyHandle<Kernel::KTransferMemory> tmem_handle); | ||
| 38 | Result GetWorkBufferSizeEx(Out<u32> out_size, OpusParametersEx params); | ||
| 39 | Result OpenHardwareOpusDecoderForMultiStreamEx( | ||
| 40 | Out<SharedPointer<IHardwareOpusDecoder>> out_decoder, | ||
| 41 | InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params, u32 tmem_size, | ||
| 42 | InCopyHandle<Kernel::KTransferMemory> tmem_handle); | ||
| 43 | Result GetWorkBufferSizeForMultiStreamEx( | ||
| 44 | Out<u32> out_size, InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params); | ||
| 45 | Result GetWorkBufferSizeExEx(Out<u32> out_size, OpusParametersEx params); | ||
| 46 | Result GetWorkBufferSizeForMultiStreamExEx( | ||
| 47 | Out<u32> out_size, InLargeData<OpusMultiStreamParametersEx, BufferAttr_HipcPointer> params); | ||
| 31 | 48 | ||
| 32 | Core::System& system; | 49 | Core::System& system; |
| 33 | AudioCore::OpusDecoder::OpusDecoderManager impl; | 50 | AudioCore::OpusDecoder::OpusDecoderManager impl; |