summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2018-08-12 13:33:08 -0400
committerGravatar GitHub2018-08-12 13:33:08 -0400
commit68c44ca0ee17ed9f5319150e28c5dfa6115fb7b2 (patch)
tree8030e3696ed3ceebfb606ac119e5d9ff66ea8f58
parentMerge pull request #1034 from lioncash/hid (diff)
parentPushed the requested sample rate instead of our fixed sample rate (diff)
downloadyuzu-68c44ca0ee17ed9f5319150e28c5dfa6115fb7b2.tar.gz
yuzu-68c44ca0ee17ed9f5319150e28c5dfa6115fb7b2.tar.xz
yuzu-68c44ca0ee17ed9f5319150e28c5dfa6115fb7b2.zip
Merge pull request #1028 from ogniK5377/aoa
Added GetAudioRendererSampleRate, GetAudioRendererSampleCount & GetAudioRendererMixBufferCount
-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.cpp31
3 files changed, 42 insertions, 6 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp
index 282f345c5..6ebed3fb0 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 worker_params.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..0b6034bb3 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,27 @@ 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>(renderer->GetSampleRate());
52 LOG_DEBUG(Service_Audio, "called");
53 }
54
55 void GetAudioRendererSampleCount(Kernel::HLERequestContext& ctx) {
56 IPC::ResponseBuilder rb{ctx, 3};
57 rb.Push(RESULT_SUCCESS);
58 rb.Push<u32>(renderer->GetSampleCount());
59 LOG_DEBUG(Service_Audio, "called");
60 }
61
62 void GetAudioRendererMixBufferCount(Kernel::HLERequestContext& ctx) {
63 IPC::ResponseBuilder rb{ctx, 3};
64 rb.Push(RESULT_SUCCESS);
65 rb.Push<u32>(renderer->GetMixBufferCount());
66 LOG_DEBUG(Service_Audio, "called");
67 }
68
48 void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) { 69 void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) {
49 ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer())); 70 ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer()));
50 IPC::ResponseBuilder rb{ctx, 2}; 71 IPC::ResponseBuilder rb{ctx, 2};
@@ -189,7 +210,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
189 IPC::RequestParser rp{ctx}; 210 IPC::RequestParser rp{ctx};
190 auto params = rp.PopRaw<AudioCore::AudioRendererParameter>(); 211 auto params = rp.PopRaw<AudioCore::AudioRendererParameter>();
191 212
192 u64 buffer_sz = Common::AlignUp(4 * params.unknown_8, 0x40); 213 u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40);
193 buffer_sz += params.unknown_c * 1024; 214 buffer_sz += params.unknown_c * 1024;
194 buffer_sz += 0x940 * (params.unknown_c + 1); 215 buffer_sz += 0x940 * (params.unknown_c + 1);
195 buffer_sz += 0x3F0 * params.voice_count; 216 buffer_sz += 0x3F0 * params.voice_count;
@@ -197,7 +218,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
197 buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); 218 buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10);
198 buffer_sz += 219 buffer_sz +=
199 Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) * 220 Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) *
200 (params.unknown_8 + 6), 221 (params.mix_buffer_count + 6),
201 0x40); 222 0x40);
202 223
203 if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { 224 if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) {