| 52 | }; |
| 53 | |
| 54 | InitFlags lazyInit(UnityAudioEffectState* state, |
| 55 | int numChannelsIn, |
| 56 | int numChannelsOut) |
| 57 | { |
| 58 | assert(state); |
| 59 | |
| 60 | auto initFlags = INIT_NONE; |
| 61 | |
| 62 | if (!gContext) |
| 63 | return initFlags; |
| 64 | |
| 65 | if (!gHRTF[1]) |
| 66 | return initFlags; |
| 67 | |
| 68 | auto effect = state->GetEffectData<State>(); |
| 69 | if (!effect) |
| 70 | return initFlags; |
| 71 | |
| 72 | IPLAudioSettings audioSettings; |
| 73 | audioSettings.samplingRate = state->samplerate; |
| 74 | audioSettings.frameSize = state->dspbuffersize; |
| 75 | |
| 76 | auto status = IPL_STATUS_SUCCESS; |
| 77 | |
| 78 | if (numChannelsIn > 0) |
| 79 | { |
| 80 | status = IPL_STATUS_SUCCESS; |
| 81 | if (!effect->ambisonicsDecodeEffect) |
| 82 | { |
| 83 | IPLAmbisonicsDecodeEffectSettings effectSettings; |
| 84 | effectSettings.speakerLayout = speakerLayoutForNumChannels(numChannelsOut); |
| 85 | effectSettings.hrtf = gHRTF[1]; |
| 86 | effectSettings.maxOrder = orderForNumChannels(numChannelsIn); |
| 87 | |
| 88 | status = iplAmbisonicsDecodeEffectCreate(gContext, &audioSettings, &effectSettings, &effect->ambisonicsDecodeEffect); |
| 89 | } |
| 90 | |
| 91 | if (status == IPL_STATUS_SUCCESS) |
| 92 | initFlags = static_cast<InitFlags>(initFlags | INIT_DECODEEFFECT); |
| 93 | } |
| 94 | |
| 95 | if (numChannelsIn > 0 && numChannelsOut > 0) |
| 96 | { |
| 97 | if (!effect->inBuffer.data) |
| 98 | iplAudioBufferAllocate(gContext, numChannelsIn, audioSettings.frameSize, &effect->inBuffer); |
| 99 | |
| 100 | if (!effect->n3dInBuffer.data) |
| 101 | iplAudioBufferAllocate(gContext, numChannelsIn, audioSettings.frameSize, &effect->n3dInBuffer); |
| 102 | |
| 103 | if (!effect->outBuffer.data) |
| 104 | iplAudioBufferAllocate(gContext, numChannelsOut, audioSettings.frameSize, &effect->outBuffer); |
| 105 | |
| 106 | initFlags = static_cast<InitFlags>(initFlags | INIT_AUDIOBUFFERS); |
| 107 | } |
| 108 | |
| 109 | return initFlags; |
| 110 | } |
| 111 |
no test coverage detected