summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/audio_renderer.cpp12
-rw-r--r--src/audio_core/audio_renderer.h5
-rw-r--r--src/core/hle/service/audio/audren_u.cpp33
3 files changed, 44 insertions, 6 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp
index 282f345c5..1ab6e88c2 100644
--- a/src/audio_core/audio_renderer.cpp
+++ b/src/audio_core/audio_renderer.cpp
@@ -26,6 +26,18 @@ AudioRenderer::AudioRenderer(AudioRendererParameter params,
26 QueueMixedBuffer(2); 26 QueueMixedBuffer(2);
27} 27}
28 28
29u32 AudioRenderer::GetSampleRate() const {
30 return STREAM_SAMPLE_RATE;
31}
32
33u32 AudioRenderer::GetSampleCount() const {
34 return worker_params.sample_count;
35}
36
37u32 AudioRenderer::GetMixBufferCount() const {
38 return worker_params.mix_buffer_count;
39}
40
29std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_params) { 41std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_params) {
30 // Copy UpdateDataHeader struct 42 // Copy UpdateDataHeader struct
31 UpdateDataHeader config{}; 43 UpdateDataHeader config{};
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h
index 6950a4681..13c5d0adc 100644
--- a/src/audio_core/audio_renderer.h
+++ b/src/audio_core/audio_renderer.h
@@ -26,7 +26,7 @@ enum class PlayState : u8 {
26struct AudioRendererParameter { 26struct AudioRendererParameter {
27 u32_le sample_rate; 27 u32_le sample_rate;
28 u32_le sample_count; 28 u32_le sample_count;
29 u32_le unknown_8; 29 u32_le mix_buffer_count;
30 u32_le unknown_c; 30 u32_le unknown_c;
31 u32_le voice_count; 31 u32_le voice_count;
32 u32_le sink_count; 32 u32_le sink_count;
@@ -160,6 +160,9 @@ public:
160 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); 160 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params);
161 void QueueMixedBuffer(Buffer::Tag tag); 161 void QueueMixedBuffer(Buffer::Tag tag);
162 void ReleaseAndQueueBuffers(); 162 void ReleaseAndQueueBuffers();
163 u32 GetSampleRate() const;
164 u32 GetSampleCount() const;
165 u32 GetMixBufferCount() const;
163 166
164private: 167private:
165 class VoiceState { 168 class VoiceState {
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)) {