@ -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,29 @@ private:
system_event - > Signal ( ) ;
}
void GetAudioRendererSampleRate ( Kernel : : HLERequestContext & ctx ) {
IPC : : ResponseBuilder rb { ctx , 3 } ;
rb . Push ( RESULT_SUCCESS ) ;
rb . Push < u32 > (
renderer - > GetSampleRate ( ) ) ; // Switch uses the worker_params value, but we always
// have a fixed sample rate so return that instead
LOG_WARNING ( Service_Audio , " (STUBBED) 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 +212,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 +220,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 ) ) {