summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorGravatar David Marcec2018-08-12 14:46:12 +1000
committerGravatar David Marcec2018-08-12 14:46:12 +1000
commite5ee0afe6f7b9cc8bf551b70ce61c773706710cc (patch)
tree590299674a18111fbda7cbe810ed81e61186bc5b /src/core
parentMerge pull request #1022 from bunnei/fix-splat (diff)
downloadyuzu-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.cpp33
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)) {