diff options
| author | 2018-08-12 13:33:08 -0400 | |
|---|---|---|
| committer | 2018-08-12 13:33:08 -0400 | |
| commit | 68c44ca0ee17ed9f5319150e28c5dfa6115fb7b2 (patch) | |
| tree | 8030e3696ed3ceebfb606ac119e5d9ff66ea8f58 | |
| parent | Merge pull request #1034 from lioncash/hid (diff) | |
| parent | Pushed the requested sample rate instead of our fixed sample rate (diff) | |
| download | yuzu-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.cpp | 12 | ||||
| -rw-r--r-- | src/audio_core/audio_renderer.h | 5 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audren_u.cpp | 31 |
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 | ||
| 29 | u32 AudioRenderer::GetSampleRate() const { | ||
| 30 | return worker_params.sample_rate; | ||
| 31 | } | ||
| 32 | |||
| 33 | u32 AudioRenderer::GetSampleCount() const { | ||
| 34 | return worker_params.sample_count; | ||
| 35 | } | ||
| 36 | |||
| 37 | u32 AudioRenderer::GetMixBufferCount() const { | ||
| 38 | return worker_params.mix_buffer_count; | ||
| 39 | } | ||
| 40 | |||
| 29 | std::vector<u8> AudioRenderer::UpdateAudioRenderer(const std::vector<u8>& input_params) { | 41 | std::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 { | |||
| 26 | struct AudioRendererParameter { | 26 | struct 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 | ||
| 164 | private: | 167 | private: |
| 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)) { |