|
|
|
@ -20,9 +20,9 @@ public:
|
|
|
|
|
explicit IAudioRenderer(AudioCore::AudioRendererParameter audren_params)
|
|
|
|
|
: ServiceFramework("IAudioRenderer") {
|
|
|
|
|
static const FunctionInfo functions[] = {
|
|
|
|
|
{0, nullptr, "GetAudioRendererSampleRate"},
|
|
|
|
|
{1, nullptr, "GetAudioRendererSampleCount"},
|
|
|
|
|
{2, nullptr, "GetAudioRendererMixBufferCount"},
|
|
|
|
|
{0, &IAudioRenderer::GetAudioRendererSampleRate, "GetAudioRendererSampleRate"},
|
|
|
|
|
{1, &IAudioRenderer::GetAudioRendererSampleCount, "GetAudioRendererSampleCount"},
|
|
|
|
|
{2, &IAudioRenderer::GetAudioRendererMixBufferCount, "GetAudioRendererMixBufferCount"},
|
|
|
|
|
{3, nullptr, "GetAudioRendererState"},
|
|
|
|
|
{4, &IAudioRenderer::RequestUpdateAudioRenderer, "RequestUpdateAudioRenderer"},
|
|
|
|
|
{5, &IAudioRenderer::StartAudioRenderer, "StartAudioRenderer"},
|
|
|
|
@ -45,6 +45,27 @@ private:
|
|
|
|
|
system_event->Signal();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GetAudioRendererSampleRate(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3};
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push<u32>(renderer->GetSampleRate());
|
|
|
|
|
LOG_DEBUG(Service_Audio, "called");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GetAudioRendererSampleCount(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3};
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push<u32>(renderer->GetSampleCount());
|
|
|
|
|
LOG_DEBUG(Service_Audio, "called");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GetAudioRendererMixBufferCount(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 3};
|
|
|
|
|
rb.Push(RESULT_SUCCESS);
|
|
|
|
|
rb.Push<u32>(renderer->GetMixBufferCount());
|
|
|
|
|
LOG_DEBUG(Service_Audio, "called");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RequestUpdateAudioRenderer(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
ctx.WriteBuffer(renderer->UpdateAudioRenderer(ctx.ReadBuffer()));
|
|
|
|
|
IPC::ResponseBuilder rb{ctx, 2};
|
|
|
|
@ -189,7 +210,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
IPC::RequestParser rp{ctx};
|
|
|
|
|
auto params = rp.PopRaw<AudioCore::AudioRendererParameter>();
|
|
|
|
|
|
|
|
|
|
u64 buffer_sz = Common::AlignUp(4 * params.unknown_8, 0x40);
|
|
|
|
|
u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40);
|
|
|
|
|
buffer_sz += params.unknown_c * 1024;
|
|
|
|
|
buffer_sz += 0x940 * (params.unknown_c + 1);
|
|
|
|
|
buffer_sz += 0x3F0 * params.voice_count;
|
|
|
|
@ -197,7 +218,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
|
|
|
|
|
buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10);
|
|
|
|
|
buffer_sz +=
|
|
|
|
|
Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) *
|
|
|
|
|
(params.unknown_8 + 6),
|
|
|
|
|
(params.mix_buffer_count + 6),
|
|
|
|
|
0x40);
|
|
|
|
|
|
|
|
|
|
if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) {
|
|
|
|
|