audio_renderer.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <span>
  5. #include "audio_core/renderer/system.h"
  6. #include "core/hle/service/audio/errors.h"
  7. namespace Core {
  8. class System;
  9. }
  10. namespace Kernel {
  11. class KTransferMemory;
  12. class KProcess;
  13. } // namespace Kernel
  14. namespace AudioCore {
  15. struct AudioRendererParameterInternal;
  16. namespace Renderer {
  17. class Manager;
  18. /**
  19. * Audio Renderer, wraps the main audio system and is mainly responsible for handling service calls.
  20. */
  21. class Renderer {
  22. public:
  23. explicit Renderer(Core::System& system, Manager& manager, Kernel::KEvent* rendered_event);
  24. /**
  25. * Initialize the renderer.
  26. * Registers the system with the Renderer::Manager, allocates workbuffers and initializes
  27. * everything to a default state.
  28. *
  29. * @param params - Input parameters to initialize the system with.
  30. * @param transfer_memory - Game-supplied memory for all workbuffers. Unused.
  31. * @param transfer_memory_size - Size of the transfer memory. Unused.
  32. * @param process_handle - Process handle, also used for memory.
  33. * @param applet_resource_user_id - Applet id for this renderer. Unused.
  34. * @param session_id - Session id of this renderer.
  35. * @return Result code.
  36. */
  37. Result Initialize(const AudioRendererParameterInternal& params,
  38. Kernel::KTransferMemory* transfer_memory, u64 transfer_memory_size,
  39. Kernel::KProcess* process_handle, u64 applet_resource_user_id,
  40. s32 session_id);
  41. /**
  42. * Finalize the renderer for shutdown.
  43. */
  44. void Finalize();
  45. /**
  46. * Get the renderer's system.
  47. *
  48. * @return Reference to the system.
  49. */
  50. System& GetSystem();
  51. /**
  52. * Start the renderer.
  53. */
  54. void Start();
  55. /**
  56. * Stop the renderer.
  57. */
  58. void Stop();
  59. /**
  60. * Update the audio renderer with new information.
  61. * Called via RequestUpdate from the AudRen:U service.
  62. *
  63. * @param input - Input buffer containing the new data.
  64. * @param performance - Optional performance buffer for outputting performance metrics.
  65. * @param output - Output data from the renderer.
  66. * @return Result code.
  67. */
  68. Result RequestUpdate(std::span<const u8> input, std::span<u8> performance,
  69. std::span<u8> output);
  70. private:
  71. /// System core
  72. Core::System& core;
  73. /// Manager this renderer is registered with
  74. Manager& manager;
  75. /// Is the audio renderer initialized?
  76. bool initialized{};
  77. /// Is the system registered with the manager?
  78. bool system_registered{};
  79. /// Audio render system, main driver of audio rendering
  80. System system;
  81. };
  82. } // namespace Renderer
  83. } // namespace AudioCore