Line 10: |
Line 10: |
| | 1 || [[#OpenAudioOut]] | | | 1 || [[#OpenAudioOut]] |
| |- | | |- |
− | | 2 || [3.0.0+] [[#ListAudioOutsEx]] | + | | 2 || [3.0.0+] [[#ListAudioOutsAuto]] |
| |- | | |- |
− | | 3 || [3.0.0+] [[#OpenAudioOutEx]] | + | | 3 || [3.0.0+] [[#OpenAudioOutAuto]] |
| |} | | |} |
| | | |
Line 20: |
Line 20: |
| | | |
| == OpenAudioOut == | | == OpenAudioOut == |
− | Takes a type-5 input buffer ('''DeviceNameIn'''), a type-6 output buffer ('''DeviceNameOut'''), two u32s '''SampleRate''' (must be 48000) and '''ChannelCount''' (high u16 can't be 0, official apps pass 0xCAFE0000), one u64 '''ClientPID''', a PID and a copy-handle. | + | Takes a type-5 input buffer ('''DeviceNameIn'''), a type-6 output buffer ('''DeviceNameOut'''), two u32s '''SampleRate''' (must be 48000) and '''ChannelCount''' (only the higher u16 is used), one u64 '''ClientPID''', a PID and a copy-handle. |
| Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and the initial AudioOutState. | | Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and the initial AudioOutState. |
| | | |
Line 43: |
Line 43: |
| |} | | |} |
| | | |
− | == ListAudioOutsEx == | + | == ListAudioOutsAuto == |
| Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead. | | Same as [[#ListAudioOuts]], but takes a type-0x22 output buffer instead. |
| | | |
− | == OpenAudioOutEx == | + | == OpenAudioOutAuto == |
− | Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer instead. | + | Same as [[#OpenAudioOut]], but takes a type-0x21 input buffer and a type-0x22 output buffer instead. |
| | | |
| == IAudioOut == | | == IAudioOut == |
Line 70: |
Line 70: |
| | 6 || [[#ContainsAudioOutBuffer]] | | | 6 || [[#ContainsAudioOutBuffer]] |
| |- | | |- |
− | | 7 || [3.0.0+] [[#AppendAudioOutBufferEx]] | + | | 7 || [3.0.0+] [[#AppendAudioOutBufferAuto]] |
| |- | | |- |
− | | 8 || [3.0.0+] [[#GetReleasedAudioOutBufferEx]] | + | | 8 || [3.0.0+] [[#GetReleasedAudioOutBufferAuto]] |
| |- | | |- |
− | | 9 || [4.0.0+] | + | | 9 || [4.0.0+] GetAudioOutBufferCount |
| |- | | |- |
− | | 10 || [4.0.0+] | + | | 10 || [4.0.0+] GetAudioOutPlayedSampleCount |
| |- | | |- |
− | | 11 || [4.0.0+] | + | | 11 || [4.0.0+] FlushAudioOutBuffers |
| + | |- |
| + | | 12 || [6.0.0+] SetAudioOutVolume |
| + | |- |
| + | | 13 || [6.0.0+] GetAudioOutVolume |
| |} | | |} |
| | | |
Line 88: |
Line 92: |
| | | |
| === StopAudioOut === | | === StopAudioOut === |
− | Stops audio playback. | + | Stops audio playback. This waits for audio playback to finish before returning. |
| | | |
| === AppendAudioOutBuffer === | | === AppendAudioOutBuffer === |
Line 98: |
Line 102: |
| ! Offset || Size || Description | | ! Offset || Size || Description |
| |- | | |- |
− | | 0x00 || 8 || Pointer to next buffer | + | | 0x00 || 8 || Pointer to next buffer (unused) |
| |- | | |- |
| | 0x08 || 8 || Pointer to sample buffer | | | 0x08 || 8 || Pointer to sample buffer |
Line 106: |
Line 110: |
| | 0x18 || 8 || Size of data in the sample buffer | | | 0x18 || 8 || Size of data in the sample buffer |
| |- | | |- |
− | | 0x20 || 8 || Offset of data in the sample buffer | + | | 0x20 || 8 || Offset of data in the sample buffer (unused/ignored?) |
| |} | | |} |
| | | |
Line 119: |
Line 123: |
| Takes an u64 '''tag''' for the desired buffer. Returns 1 if the buffer was appended and not yet released. | | Takes an u64 '''tag''' for the desired buffer. Returns 1 if the buffer was appended and not yet released. |
| | | |
− | === AppendAudioOutBufferEx === | + | === AppendAudioOutBufferAuto === |
| Same as [[#AppendAudioOutBuffer]] but takes a type-0x21 buffer instead. | | Same as [[#AppendAudioOutBuffer]] but takes a type-0x21 buffer instead. |
| | | |
− | === GetReleasedAudioOutBufferEx === | + | === GetReleasedAudioOutBufferAuto === |
| Same as [[#GetReleasedAudioOutBuffer]] but takes a type-0x22 buffer instead. | | Same as [[#GetReleasedAudioOutBuffer]] but takes a type-0x22 buffer instead. |
| | | |
| = audin:u = | | = audin:u = |
− | This is "nn::audio::detail::IAudioInManagerForDebugger". | + | This is "nn::audio::detail::IAudioInManager". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 136: |
Line 140: |
| | 1 || OpenAudioIn | | | 1 || OpenAudioIn |
| |- | | |- |
− | | 2 || [3.0.0+] ListAudioInsEx | + | | 2 || [3.0.0+] ListAudioInsAuto |
| + | |- |
| + | | 3 || [3.0.0+] OpenAudioInAuto |
| |- | | |- |
− | | 3 || [3.0.0+] OpenAudioInEx | + | | 4 || [3.0.0+] ListAudioInsAutoFiltered |
| |- | | |- |
− | | 4 || [3.0.0+] ListAudioInsExAndProbe | + | | 5 || [5.0.0+] |
| |} | | |} |
| | | |
Line 166: |
Line 172: |
| | 7 || [3.0.0+] AppendAudioInBufferWithUserEvent | | | 7 || [3.0.0+] AppendAudioInBufferWithUserEvent |
| |- | | |- |
− | | 8 || [3.0.0+] AppendAudioInBufferEx | + | | 8 || [3.0.0+] AppendAudioInBufferAuto |
| |- | | |- |
− | | 9 || [3.0.0+] GetReleasedAudioInBufferEx | + | | 9 || [3.0.0+] GetReleasedAudioInBufferAuto |
| |- | | |- |
− | | 10 || [3.0.0+] AppendAudioInBufferWithUserEventEx | + | | 10 || [3.0.0+] AppendAudioInBufferWithUserEventAuto |
| |- | | |- |
− | | 11 || [4.0.0+] | + | | 11 || [4.0.0+] GetAudioInBufferCount |
| |- | | |- |
− | | 12 || [4.0.0+] | + | | 12 || [4.0.0+] SetAudioInDeviceGain |
| |- | | |- |
− | | 13 || [4.0.0+] | + | | 13 || [4.0.0+] GetAudioInDeviceGain |
| + | |- |
| + | | 14 || [6.0.0+] FlushAudioInBuffers |
| |} | | |} |
| | | |
| === GetAudioInState === | | === GetAudioInState === |
− | | + | Returns an u32 '''AudioInState''' (0x00=Started, 0x01=Stopped). |
− | Returns an AudioInState, 0x00=Started 0x01=Stopped (u32) | |
| | | |
| = audrec:u = | | = audrec:u = |
Line 214: |
Line 221: |
| | 6 || ContainsFinalOutputRecorderBuffer | | | 6 || ContainsFinalOutputRecorderBuffer |
| |- | | |- |
− | | 7 || | + | | 7 || GetFinalOutputRecorderBufferEndTime |
| |- | | |- |
− | | 8 || [3.0.0+] AppendFinalOutputRecorderBufferEx | + | | 8 || [3.0.0+] AppendFinalOutputRecorderBufferAuto |
| |- | | |- |
− | | 9 || [3.0.0+] GetReleasedFinalOutputRecorderBufferEx | + | | 9 || [3.0.0+] GetReleasedFinalOutputRecorderBufferAuto |
| + | |- |
| + | | 10 || [6.0.0+] FlushFinalOutputRecorderBuffers |
| + | |- |
| + | | 11 || [9.0.0+] |
| + | |} |
| + | |
| + | = auddev = |
| + | This is "nn::audio::detail::IAudioSnoopManager". |
| + | |
| + | This was added with [6.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || EnableDspUsageMeasurement |
| + | |- |
| + | | 1 || DisableDspUsageMeasurement |
| + | |- |
| + | | 6 || GetDspUsage |
| |} | | |} |
| | | |
Line 230: |
Line 257: |
| | 0 || OpenAudioRenderer | | | 0 || OpenAudioRenderer |
| |- | | |- |
− | | 1 || GetAudioRendererWorkBufferSize | + | | 1 || GetWorkBufferSize |
| |- | | |- |
− | | 2 || GetAudioRenderersProcessMasterVolume | + | | 2 || [[#GetAudioDeviceService]] |
| + | |- |
| + | | 3 || [3.0.0+] OpenAudioRendererForManualExecution |
| |- | | |- |
− | | 3 || SetAudioRenderersProcessMasterVolume | + | | 4 || [4.0.0+] GetAudioDeviceServiceWithRevisionInfo |
| |} | | |} |
| + | |
| + | === GetAudioDeviceService === |
| + | Takes an input u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]], returns an output [[#IAudioDevice]]. |
| | | |
| == IAudioRenderer == | | == IAudioRenderer == |
Line 244: |
Line 276: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#GetAudioRendererSampleRate]] | + | | 0 || [[#GetSampleRate]] |
| |- | | |- |
− | | 1 || [[#GetAudioRendererSampleCount]] | + | | 1 || [[#GetSampleCount]] |
| |- | | |- |
− | | 2 || [[#GetAudioRendererMixBufferCount]] | + | | 2 || [[#GetMixBufferCount]] |
| |- | | |- |
− | | 3 || [[#GetAudioRendererState]] | + | | 3 || [[#GetState]] |
| |- | | |- |
− | | 4 || RequestUpdateAudioRenderer | + | | 4 || RequestUpdate |
| |- | | |- |
− | | 5 || StartAudioRenderer | + | | 5 || Start |
| |- | | |- |
− | | 6 || StopAudioRenderer | + | | 6 || Stop |
| |- | | |- |
| | 7 || QuerySystemEvent | | | 7 || QuerySystemEvent |
| |- | | |- |
− | | 8 || [[#SetAudioRendererRenderingTimeLimit]] | + | | 8 || [[#SetRenderingTimeLimit]] |
| + | |- |
| + | | 9 || [[#GetRenderingTimeLimit]] |
| + | |- |
| + | | 10 || [3.0.0+] RequestUpdateAuto |
| |- | | |- |
− | | 9 || [[#GetAudioRendererRenderingTimeLimit]] | + | | 11 || [3.0.0+] ExecuteAudioRendererRendering |
| |} | | |} |
| | | |
− | === GetAudioRendererSampleRate === | + | === GetSampleRate === |
| Returns the Sample Rate. (u32) | | Returns the Sample Rate. (u32) |
| | | |
− | === GetAudioRendererSampleCount === | + | === GetSampleCount === |
| Returns the Sample Count. (u32) | | Returns the Sample Count. (u32) |
| | | |
− | === GetAudioRendererMixBufferCount === | + | === GetMixBufferCount === |
| Returns the number of Mix Buffers. (u32) | | Returns the number of Mix Buffers. (u32) |
| | | |
Line 277: |
Line 313: |
| Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32) | | Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32) |
| | | |
− | === SetAudioRendererRenderingTimeLimit === | + | === SetRenderingTimeLimit === |
| Takes a upper limit of the rendering time in percent. (u32) | | Takes a upper limit of the rendering time in percent. (u32) |
| | | |
− | === GetAudioRendererRenderingTimeLimit === | + | === GetRenderingTimeLimit === |
| Returns the upper limit of the rendering time in percent. (u32) | | Returns the upper limit of the rendering time in percent. (u32) |
| | | |
− | = audout:a, audin:a, audrec:a, audren:a = | + | == IAudioDevice == |
− | This is "nn::audio::detail::IAudioOutManagerForApplet", "nn::audio::detail::IAudioInManagerForApplet", "nn::audio::detail::IFinalOutputRecorderManagerForApplet", "nn::audio::detail::IAudioRendererManagerForApplet". | + | This is "nn::audio::detail::IAudioDevice". |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 290: |
Line 326: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || RequestSuspend | + | | 0 || [[#ListAudioDeviceName]] |
| |- | | |- |
− | | 1 || RequestResume | + | | 1 || [[#SetAudioDeviceOutputVolume]] |
| + | |- |
| + | | 2 || [[#GetAudioDeviceOutputVolume]] |
| + | |- |
| + | | 3 || GetActiveAudioDeviceName |
| + | |- |
| + | | 4 || QueryAudioDeviceSystemEvent |
| + | |- |
| + | | 5 || GetActiveChannelCount |
| + | |- |
| + | | 6 || [3.0.0+] [[#ListAudioDeviceNameAuto]] |
| + | |- |
| + | | 7 || [3.0.0+] [[#SetAudioDeviceOutputVolumeAuto]] |
| + | |- |
| + | | 8 || [3.0.0+] [[#GetAudioDeviceOutputVolumeAuto]] |
| + | |- |
| + | | 10 || [3.0.0+] GetActiveAudioDeviceNameAuto |
| + | |- |
| + | | 11 || [3.0.0+] QueryAudioDeviceInputEvent |
| + | |- |
| + | | 12 || [3.0.0+] QueryAudioDeviceOutputEvent |
| + | |- |
| + | | 13 || [5.0.0+] GetAudioSystemMasterVolumeSetting |
| |} | | |} |
| + | |
| + | === ListAudioDeviceName === |
| + | Takes a type-0x6 output buffer containing an array of '''DeviceName''', returns an output s32 for total number of output entries. |
| + | |
| + | === SetAudioDeviceOutputVolume === |
| + | Takes a type-0x5 input buffer containing the '''DeviceName''' and a float. No output. |
| + | |
| + | === GetAudioDeviceOutputVolume === |
| + | Takes a type-0x5 input buffer containing the '''DeviceName'''. Returns an output float. |
| + | |
| + | === ListAudioDeviceNameAuto === |
| + | Takes a type-0x22 output buffer containing an array of '''DeviceName''', returns an output s32 for total number of output entries. |
| + | |
| + | === SetAudioDeviceOutputVolumeAuto === |
| + | Takes a type-0x21 input buffer containing the '''DeviceName''' and a float. No output. |
| + | |
| + | === GetAudioDeviceOutputVolumeAuto === |
| + | Takes a type-0x21 input buffer containing the '''DeviceName'''. Returns an output float. |
| + | |
| + | = audout:a = |
| + | This is "nn::audio::detail::IAudioOutManagerForApplet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RequestSuspendAudioOuts |
| + | |- |
| + | | 1 || RequestResumeAudioOuts |
| + | |- |
| + | | 2 || GetAudioOutsProcessMasterVolume |
| + | |- |
| + | | 3 || SetAudioOutsProcessMasterVolume |
| + | |- |
| + | | 4 || [4.0.0+] GetAudioOutsProcessRecordVolume |
| + | |- |
| + | | 5 || [4.0.0+] SetAudioOutsProcessRecordVolume |
| + | |} |
| + | |
| + | [4.0.0+] RequestSuspendAudioOuts/RequestResumeAudioOuts no longer returns an output handle. |
| + | |
| + | = audin:a = |
| + | This is "nn::audio::detail::IAudioInManagerForApplet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RequestSuspendAudioIns |
| + | |- |
| + | | 1 || RequestResumeAudioIns |
| + | |- |
| + | | 2 || GetAudioInsProcessMasterVolume |
| + | |- |
| + | | 3 || SetAudioInsProcessMasterVolume |
| + | |} |
| + | |
| + | [4.0.0+] RequestSuspendAudioIns/RequestResumeAudioIns no longer returns an output handle. |
| + | |
| + | = audrec:a = |
| + | This is "nn::audio::detail::IFinalOutputRecorderManagerForApplet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RequestSuspendFinalOutputRecorders |
| + | |- |
| + | | 1 || RequestResumeFinalOutputRecorders |
| + | |} |
| + | |
| + | [4.0.0+] RequestSuspendFinalOutputRecorders/RequestResumeFinalOutputRecorders no longer returns an output handle. |
| + | |
| + | = audren:a = |
| + | This is "nn::audio::detail::IAudioRendererManagerForApplet". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || RequestSuspendAudioRenderers |
| + | |- |
| + | | 1 || RequestResumeAudioRenderers |
| + | |- |
| + | | 2 || GetAudioRenderersProcessMasterVolume |
| + | |- |
| + | | 3 || SetAudioRenderersProcessMasterVolume |
| + | |- |
| + | | 4 || RegisterAppletResourceUserId |
| + | |- |
| + | | 5 || UnregisterAppletResourceUserId |
| + | |- |
| + | | 6 || [4.0.0+] GetAudioRenderersProcessRecordVolume |
| + | |- |
| + | | 7 || [4.0.0+] SetAudioRenderersProcessRecordVolume |
| + | |} |
| + | |
| + | [4.0.0+] RequestSuspendAudioRenderers/RequestResumeAudioRenderers no longer returns an output handle. |
| | | |
| = audout:d, audin:d, audrec:d, audren:d = | | = audout:d, audin:d, audrec:d, audren:d = |
Line 308: |
Line 464: |
| | | |
| == RequestSuspendForDebug == | | == RequestSuspendForDebug == |
− | | + | Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. |
− | Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64) | |
| | | |
| == RequestResumeForDebug == | | == RequestResumeForDebug == |
| + | Takes an u64 [[AM_services#AppletResourceUserId|AppletResourceUserId]]. |
| | | |
− | Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)
| + | = audctl = |
| + | This is "nn::audioctrl::detail::IAudioController". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || GetTargetVolume |
| + | |- |
| + | | 1 || SetTargetVolume |
| + | |- |
| + | | 2 || GetTargetVolumeMin |
| + | |- |
| + | | 3 || GetTargetVolumeMax |
| + | |- |
| + | | 4 || IsTargetMute |
| + | |- |
| + | | 5 || SetTargetMute |
| + | |- |
| + | | 6 || IsTargetConnected |
| + | |- |
| + | | 7 || SetDefaultTarget |
| + | |- |
| + | | 8 || GetDefaultTarget |
| + | |- |
| + | | 9 || GetAudioOutputMode |
| + | |- |
| + | | 10 || SetAudioOutputMode |
| + | |- |
| + | | 11 || SetForceMutePolicy |
| + | |- |
| + | | 12 || GetForceMutePolicy |
| + | |- |
| + | | 13 || GetOutputModeSetting |
| + | |- |
| + | | 14 || SetOutputModeSetting |
| + | |- |
| + | | 15 || SetOutputTarget |
| + | |- |
| + | | 16 || SetInputTargetForceEnabled |
| + | |- |
| + | | 17 || [3.0.0+] SetHeadphoneOutputLevelMode |
| + | |- |
| + | | 18 || [3.0.0+] GetHeadphoneOutputLevelMode |
| + | |- |
| + | | 19 || [3.0.0+] AcquireAudioVolumeUpdateEventForPlayReport |
| + | |- |
| + | | 20 || [3.0.0+] AcquireAudioOutputDeviceUpdateEventForPlayReport |
| + | |- |
| + | | 21 || [3.0.0+] GetAudioOutputTargetForPlayReport |
| + | |- |
| + | | 22 || [3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent |
| + | |- |
| + | | 23 || [4.0.0+] SetSystemOutputMasterVolume |
| + | |- |
| + | | 24 || [4.0.0+] GetSystemOutputMasterVolume |
| + | |- |
| + | | 25 || [4.0.0+] GetAudioVolumeDataForPlayReport |
| + | |- |
| + | | 26 || [4.0.0+] UpdateHeadphoneSettings |
| + | |- |
| + | | 27 || [7.0.0+] SetVolumeMappingTableForDev |
| + | |} |
| | | |
| = codecctl = | | = codecctl = |
Line 389: |
Line 607: |
| == IsCodecDeviceRequested == | | == IsCodecDeviceRequested == |
| Returns a bool. | | Returns a bool. |
| + | |
| + | = hwopus = |
| + | This is "nn::codec::detail::IHardwareOpusDecoderManager". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Initialize]] |
| + | |- |
| + | | 1 || [[#GetWorkBufferSize]] |
| + | |- |
| + | | 2 || [3.0.0+] [[#OpenHardwareOpusDecoderForMultiStream]] |
| + | |- |
| + | | 3 || [3.0.0+] [[#GetWorkBufferSizeForMultiStream]] |
| + | |} |
| + | |
| + | Official sw can use either software libopus, or hwopus via "nn::codec::HardwareOpus*" (separate from the former). |
| + | |
| + | == Initialize == |
| + | Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. |
| + | |
| + | == GetWorkBufferSize== |
| + | Takes two s32s '''SampleRate''' and '''ChannelCount''' packed as an u64. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. |
| + | |
| + | == OpenHardwareOpusDecoderForMultiStream == |
| + | Takes a type-0x19 input buffer, an u32 '''WorkBufferSize''' and a TransferMemory handle for '''WorkBuffer'''. Returns an [[#IHardwareOpusDecoder]] object. The TransferMemory is created by the user-process with permissions=0. |
| + | |
| + | The input buffer is a [[#MultiStreamParameters]] struct. The user-process initializes this struct the same way as [[#GetWorkBufferSizeForMultiStream]], except that an u8-array specified by the user is copied to +0x10 with size '''ChannelCount''', when '''ChannelCount''' above 0. |
| + | |
| + | == GetWorkBufferSizeForMultiStream == |
| + | Takes a type-0x19 input buffer. Returns the u32 required size for the decoder's work buffer. Official user-processes align the output size to page-alignment. |
| + | |
| + | The input buffer is a [[#MultiStreamParameters]] struct. |
| + | |
| + | == MultiStreamParameters == |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Sample rate (Hz) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Number of channels |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | Number of streams |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Number of stereo streams |
| + | |- |
| + | | 0x10 |
| + | | 0x100 |
| + | | u8 array of channel mappings |
| + | |} |
| + | |
| + | == IHardwareOpusDecoder == |
| + | This is "nn::codec::detail::IHardwareOpusDecoder". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [4.0.0+] [[#DecodeInterleavedOld]] ([1.0.0-3.0.2] [[#DecodeInterleavedOld|#DecodeInterleaved]]) |
| + | |- |
| + | | 1 || [[#SetContext]] |
| + | |- |
| + | | 2 || [4.0.0+] [[#DecodeInterleavedForMultiStreamOld]] ([3.0.0-3.0.2] DecodeInterleavedForMultiStream) |
| + | |- |
| + | | 3 || [3.0.0+] [[#SetContextForMultiStream]] |
| + | |- |
| + | | 4 || [6.0.0+] [[#DecodeInterleavedWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedWithPerf) |
| + | |- |
| + | | 5 || [6.0.0+] [[#DecodeInterleavedForMultiStreamWithPerfOld]] ([4.0.0-5.1.0] DecodeInterleavedForMultiStreamWithPerf) |
| + | |- |
| + | | 6 || [6.0.0+] [[#DecodeInterleaved]] |
| + | |- |
| + | | 7 || [6.0.0+] [[#DecodeInterleavedForMultiStream]] |
| + | |- |
| + | | 8 || [7.0.0+] |
| + | |- |
| + | | 9 || [7.0.0+] |
| + | |} |
| + | |
| + | === DecodeInterleavedOld === |
| + | Takes a type-5 input buffer ('''OpusDataIn''') and a type-6 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''' and s32 '''DecodedSampleCount'''. |
| + | |
| + | Calls the same func as [[#DecodeInterleaved]] internally with flag=0 and out_u64_ptr=NULL. |
| + | |
| + | === SetContext === |
| + | Takes a type-5 input buffer ('''DecoderContextIn'''). Sends the unknown context data to the hardware decoder. The input buffer is unused. |
| + | |
| + | === DecodeInterleavedForMultiStreamOld === |
| + | Takes a type-5 input buffer ('''OpusDataIn''') and a type-6 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''' and s32 '''DecodedSampleCount'''. |
| + | |
| + | Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0 and out_u64_ptr=NULL. |
| + | |
| + | === SetContextForMultiStream === |
| + | Takes a type-5 input buffer ('''DecoderContextIn'''). Sends the unknown context data to the hardware decoder. |
| + | |
| + | === DecodeInterleavedWithPerfOld === |
| + | Takes a type-0x5 input buffer ('''OpusDataIn''') and a type-0x46 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''', s32 '''DecodedSampleCount''', and an u64. |
| + | |
| + | The output u64 is ignored by official user-processes. |
| + | |
| + | Calls the same func as [[#DecodeInterleaved]] internally with flag=0. |
| + | |
| + | === DecodeInterleavedForMultiStreamWithPerfOld === |
| + | Takes a type-0x5 input buffer ('''OpusDataIn''') and a type-0x46 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''', s32 '''DecodedSampleCount''', and an u64. |
| + | |
| + | The output u64 is ignored by official user-processes. |
| + | |
| + | Calls the same func as [[#DecodeInterleavedForMultiStream]] internally with flag=0. |
| + | |
| + | === DecodeInterleaved === |
| + | Takes an input u8 bool flag, a type-0x5 input buffer ('''OpusDataIn''') and a type-0x46 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''', s32 '''DecodedSampleCount''', and an u64. |
| + | |
| + | The bool flag indicates whether or not a reset of the decoder context is being requested. |
| + | |
| + | === DecodeInterleavedForMultiStream === |
| + | Takes an input u8 bool flag, a type-0x5 input buffer ('''OpusDataIn''') and a type-0x46 output buffer ('''PcmDataOut'''). Decodes the Opus source data to PCM and returns output s32 '''DecodedDataSize''', s32 '''DecodedSampleCount''', and an u64. |
| + | |
| + | The bool flag indicates whether or not a reset of the decoder context is being requested. |
| + | |
| + | = auddebug = |
| + | This is "nn::audio::detail::IAudioDebugManager". |
| + | |
| + | This service doesn't exist in retail units. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || StartDspProfiler |
| + | |- |
| + | | 1 || StopDspProfiler |
| + | |- |
| + | | 2 || StartCpuProfiler |
| + | |- |
| + | | 3 || StopCpuProfiler |
| + | |} |
| | | |
| [[Category:Services]] | | [[Category:Services]] |