/// <summary> /// Register a new <see cref="AudioRenderSystem"/>. /// </summary> /// <param name="renderer">The <see cref="AudioRenderSystem"/> to register.</param> private void Register(AudioRenderSystem renderer) { lock (_sessionLock) { _sessions[renderer.GetSessionId()] = renderer; } lock (_audioProcessorLock) { if (!_isRunning) { StartLocked(); } } }
/// <summary> /// Unregister a new <see cref="AudioRenderSystem"/>. /// </summary> /// <param name="renderer">The <see cref="AudioRenderSystem"/> to unregister.</param> internal void Unregister(AudioRenderSystem renderer) { lock (_sessionLock) { int sessionId = renderer.GetSessionId(); _sessions[renderer.GetSessionId()] = null; ReleaseSessionId(sessionId); } lock (_audioProcessorLock) { if (_isRunning && !HasAnyActiveRendererLocked()) { StopLocked(); } } }
/// <summary> /// Open a new <see cref="AudioRenderSystem"/> /// </summary> /// <param name="renderer">The new <see cref="AudioRenderSystem"/></param> /// <param name="memoryManager">The memory manager that will be used for all guest memory operations.</param> /// <param name="parameter">The user configuration</param> /// <param name="appletResourceUserId">The applet resource user id of the application.</param> /// <param name="workBufferAddress">The guest work buffer address.</param> /// <param name="workBufferSize">The guest work buffer size.</param> /// <param name="processHandle">The process handle of the application.</param> /// <returns>A <see cref="ResultCode"/> reporting an error or a success.</returns> public ResultCode OpenAudioRenderer(out AudioRenderSystem renderer, IVirtualMemoryManager memoryManager, ref AudioRendererConfiguration parameter, ulong appletResourceUserId, ulong workBufferAddress, ulong workBufferSize, uint processHandle) { int sessionId = AcquireSessionId(); AudioRenderSystem audioRenderer = new AudioRenderSystem(this, _sessionsSystemEvent[sessionId]); ResultCode result = audioRenderer.Initialize(ref parameter, processHandle, workBufferAddress, workBufferSize, sessionId, appletResourceUserId, memoryManager); if (result == ResultCode.Success) { renderer = audioRenderer; Register(renderer); } else { ReleaseSessionId(sessionId); renderer = null; } return(result); }
/// <summary> /// Get the work buffer size required by a session. /// </summary> /// <param name="parameter">The user configuration</param> /// <returns>The work buffer size required by a session.</returns> public static ulong GetWorkBufferSize(ref AudioRendererConfiguration parameter) { return(AudioRenderSystem.GetWorkBufferSize(ref parameter)); }