diff options
| author | 2018-08-12 14:46:12 +1000 | |
|---|---|---|
| committer | 2018-08-12 14:46:12 +1000 | |
| commit | e5ee0afe6f7b9cc8bf551b70ce61c773706710cc (patch) | |
| tree | 590299674a18111fbda7cbe810ed81e61186bc5b /src/core | |
| parent | Merge pull request #1022 from bunnei/fix-splat (diff) | |
| download | yuzu-e5ee0afe6f7b9cc8bf551b70ce61c773706710cc.tar.gz yuzu-e5ee0afe6f7b9cc8bf551b70ce61c773706710cc.tar.xz yuzu-e5ee0afe6f7b9cc8bf551b70ce61c773706710cc.zip | |
Added GetAudioRendererSampleRate, GetAudioRendererSampleCount & GetAudioRendererMixBufferCount
GetAudioRendererSampleRate is set as a "STUB" as a game could check if the sample rate it sent and the sample rate it wants don't match. Just a thought of something which could happen so keeping it as stub for the mean time
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/service/audio/audren_u.cpp | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index f99304de5..4bdac8067 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -20,9 +20,9 @@ public: | |||
| 20 | explicit IAudioRenderer(AudioCore::AudioRendererParameter audren_params) | 20 | explicit IAudioRenderer(AudioCore::AudioRendererParameter audren_params) |
| 21 | : ServiceFramework("IAudioRenderer") { | 21 | : ServiceFramework("IAudioRenderer") { |
| 22 | static const FunctionInfo functions[] = { | 22 | static const FunctionInfo functions[] = { |
| 23 | {0, nullptr, "GetAudioRendererSampleRate"}, | 23 | {0, &IAudioRenderer::GetAudioRendererSampleRate, "GetAudioRendererSampleRate"}, |
| 24 | {1, nullptr, "GetAudioRendererSampleCount"}, | 24 | {1, &IAudioRenderer::GetAudioRendererSampleCount, "GetAudioRendererSampleCount"}, |
| 25 | {2, nullptr, "GetAudioRendererMixBufferCount"}, | 25 | {2, &IAudioRenderer::GetAudioRendererMixBufferCount, "GetAudioRendererMixBufferCount"}, |
| 26 | {3, nullptr, "GetAudioRendererState"}, | 26 | {3, nullptr, "GetAudioRendererState"}, |
| 27 | {4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, | 27 | {4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"}, |
| 28 | {5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"}, | 28 | {5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"}, |
| @@ -45,6 +45,29 @@ private: | |||
| 45 | system_event->Signal(); | 45 | system_event->Signal(); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | void GetAudioRendererSampleRate(Kernel::HLERequestContext& ctx) { | ||
| 49 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 50 | rb.Push(RESULT_SUCCESS); | ||
| 51 | rb.Push<u32>( | ||
| 52 | renderer->GetSampleRate()); // Switch uses the worker_params value, but we always | ||
| 53 | // have a fixed sample rate so return that instead | ||
| 54 | LOG_WARNING(Service_Audio, "(STUBBED) called"); | ||
| 55 | } | ||
| 56 | |||
| 57 | void GetAudioRendererSampleCount(Kernel::HLERequestContext& ctx) { | ||
| 58 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 59 | rb.Push(RESULT_SUCCESS); | ||
| 60 | rb.Push<u32>(renderer->GetSampleCount()); | ||
| 61 | LOG_DEBUG(Service_Audio, "called"); | ||
| 62 | } | ||
| 63 | |||
| 64 | void GetAudioRendererMixBufferCount(Kernel::HLERequestContext& ctx) { | ||
| 65 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 66 | rb.Push(RESULT_SUCCESS); | ||
| 67 | rb.Push<u32>(renderer->GetMixBufferCount()); | ||
| 68 | LOG_DEBUG(Service_Audio, "called"); | ||
| 69 | } | ||
| 70 | |||
| 48 | void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { | 71 | void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { |
| 49 | ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer())); | 72 | ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer())); |
| 50 | IPC::ResponseBuilder rb{ctx, 2}; | 73 | IPC::ResponseBuilder rb{ctx, 2}; |
| @@ -189,7 +212,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | |||
| 189 | IPC::RequestParser rp{ctx}; | 212 | IPC::RequestParser rp{ctx}; |
| 190 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); | 213 | auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); |
| 191 | 214 | ||
| 192 | u64 buffer_sz = Common::AlignUp(4 * params.unknown_8, 0x40); | 215 | u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); |
| 193 | buffer_sz += params.unknown_c * 1024; | 216 | buffer_sz += params.unknown_c * 1024; |
| 194 | buffer_sz += 0x940 * (params.unknown_c + 1); | 217 | buffer_sz += 0x940 * (params.unknown_c + 1); |
| 195 | buffer_sz += 0x3F0 * params.voice_count; | 218 | buffer_sz += 0x3F0 * params.voice_count; |
| @@ -197,7 +220,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | |||
| 197 | buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); | 220 | buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); |
| 198 | buffer_sz += | 221 | buffer_sz += |
| 199 | Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) * | 222 | Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) * |
| 200 | (params.unknown_8 + 6), | 223 | (params.mix_buffer_count + 6), |
| 201 | 0x40); | 224 | 0x40); |
| 202 | 225 | ||
| 203 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { | 226 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { |