summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio_core/audio_renderer.cpp6
-rw-r--r--src/audio_core/audio_renderer.h3
-rw-r--r--src/core/hle/service/audio/audren_u.cpp9
-rw-r--r--src/core/hle/service/audio/audren_u.h1
4 files changed, 12 insertions, 7 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp
index 4882a6cd8..da50a0bbc 100644
--- a/src/audio_core/audio_renderer.cpp
+++ b/src/audio_core/audio_renderer.cpp
@@ -73,13 +73,15 @@ private:
73 EffectInStatus info{}; 73 EffectInStatus info{};
74}; 74};
75AudioRenderer::AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params, 75AudioRenderer::AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params,
76 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event) 76 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event,
77 std::size_t instance_number)
77 : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), 78 : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count),
78 effects(params.effect_count) { 79 effects(params.effect_count) {
79 80
80 audio_out = std::make_unique<AudioCore::AudioOut>(); 81 audio_out = std::make_unique<AudioCore::AudioOut>();
81 stream = audio_out->OpenStream(core_timing, STREAM_SAMPLE_RATE, STREAM_NUM_CHANNELS, 82 stream = audio_out->OpenStream(core_timing, STREAM_SAMPLE_RATE, STREAM_NUM_CHANNELS,
82 "AudioRenderer", [=]() { buffer_event->Signal(); }); 83 fmt::format("AudioRenderer-Instance{}", instance_number),
84 [=]() { buffer_event->Signal(); });
83 audio_out->StartStream(stream); 85 audio_out->StartStream(stream);
84 86
85 QueueMixedBuffer(0); 87 QueueMixedBuffer(0);
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h
index b2e5d336c..45afbe759 100644
--- a/src/audio_core/audio_renderer.h
+++ b/src/audio_core/audio_renderer.h
@@ -215,7 +215,8 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size
215class AudioRenderer { 215class AudioRenderer {
216public: 216public:
217 AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params, 217 AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params,
218 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event); 218 Kernel::SharedPtr<Kernel::WritableEvent> buffer_event,
219 std::size_t instance_number);
219 ~AudioRenderer(); 220 ~AudioRenderer();
220 221
221 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params); 222 std::vector<u8> UpdateAudioRenderer(const std::vector<u8>& input_params);
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 3711e1ea1..679299f68 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -25,7 +25,8 @@ namespace Service::Audio {
25 25
26class IAudioRenderer final : public ServiceFramework<IAudioRenderer> { 26class IAudioRenderer final : public ServiceFramework<IAudioRenderer> {
27public: 27public:
28 explicit IAudioRenderer(AudioCore::AudioRendererParameter audren_params) 28 explicit IAudioRenderer(AudioCore::AudioRendererParameter audren_params,
29 const std::size_t instance_number)
29 : ServiceFramework("IAudioRenderer") { 30 : ServiceFramework("IAudioRenderer") {
30 // clang-format off 31 // clang-format off
31 static const FunctionInfo functions[] = { 32 static const FunctionInfo functions[] = {
@@ -48,8 +49,8 @@ public:
48 auto& system = Core::System::GetInstance(); 49 auto& system = Core::System::GetInstance();
49 system_event = Kernel::WritableEvent::CreateEventPair( 50 system_event = Kernel::WritableEvent::CreateEventPair(
50 system.Kernel(), Kernel::ResetType::Manual, "IAudioRenderer:SystemEvent"); 51 system.Kernel(), Kernel::ResetType::Manual, "IAudioRenderer:SystemEvent");
51 renderer = std::make_unique<AudioCore::AudioRenderer>(system.CoreTiming(), audren_params, 52 renderer = std::make_unique<AudioCore::AudioRenderer>(
52 system_event.writable); 53 system.CoreTiming(), audren_params, system_event.writable, instance_number);
53 } 54 }
54 55
55private: 56private:
@@ -607,7 +608,7 @@ void AudRenU::OpenAudioRendererImpl(Kernel::HLERequestContext& ctx) {
607 IPC::ResponseBuilder rb{ctx, 2, 0, 1}; 608 IPC::ResponseBuilder rb{ctx, 2, 0, 1};
608 609
609 rb.Push(RESULT_SUCCESS); 610 rb.Push(RESULT_SUCCESS);
610 rb.PushIpcInterface<IAudioRenderer>(params); 611 rb.PushIpcInterface<IAudioRenderer>(params, audren_instance_count++);
611} 612}
612 613
613bool AudRenU::IsFeatureSupported(AudioFeatures feature, u32_le revision) const { 614bool AudRenU::IsFeatureSupported(AudioFeatures feature, u32_le revision) const {
diff --git a/src/core/hle/service/audio/audren_u.h b/src/core/hle/service/audio/audren_u.h
index 1d3c8df61..49f2733cf 100644
--- a/src/core/hle/service/audio/audren_u.h
+++ b/src/core/hle/service/audio/audren_u.h
@@ -33,6 +33,7 @@ private:
33 }; 33 };
34 34
35 bool IsFeatureSupported(AudioFeatures feature, u32_le revision) const; 35 bool IsFeatureSupported(AudioFeatures feature, u32_le revision) const;
36 std::size_t audren_instance_count = 0;
36}; 37};
37 38
38} // namespace Service::Audio 39} // namespace Service::Audio