audio_render_manager.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "audio_core/audio_render_manager.h"
  4. #include "audio_core/common/audio_renderer_parameter.h"
  5. #include "audio_core/common/feature_support.h"
  6. #include "core/core.h"
  7. namespace AudioCore::AudioRenderer {
  8. Manager::Manager(Core::System& system_)
  9. : system{system_}, system_manager{std::make_unique<SystemManager>(system)} {
  10. std::iota(session_ids.begin(), session_ids.end(), 0);
  11. }
  12. Manager::~Manager() {
  13. Stop();
  14. }
  15. void Manager::Stop() {
  16. system_manager->Stop();
  17. }
  18. SystemManager& Manager::GetSystemManager() {
  19. return *system_manager;
  20. }
  21. Result Manager::GetWorkBufferSize(const AudioRendererParameterInternal& params,
  22. u64& out_count) const {
  23. if (!CheckValidRevision(params.revision)) {
  24. return Service::Audio::ERR_INVALID_REVISION;
  25. }
  26. out_count = System::GetWorkBufferSize(params);
  27. return ResultSuccess;
  28. }
  29. s32 Manager::GetSessionId() {
  30. std::scoped_lock l{session_lock};
  31. auto session_id{session_ids[session_count]};
  32. if (session_id == -1) {
  33. return -1;
  34. }
  35. session_ids[session_count] = -1;
  36. session_count++;
  37. return session_id;
  38. }
  39. void Manager::ReleaseSessionId(const s32 session_id) {
  40. std::scoped_lock l{session_lock};
  41. session_ids[--session_count] = session_id;
  42. }
  43. u32 Manager::GetSessionCount() const {
  44. std::scoped_lock l{session_lock};
  45. return session_count;
  46. }
  47. bool Manager::AddSystem(System& system_) {
  48. return system_manager->Add(system_);
  49. }
  50. bool Manager::RemoveSystem(System& system_) {
  51. return system_manager->Remove(system_);
  52. }
  53. } // namespace AudioCore::AudioRenderer