Kaynağa Gözat

audio_core: Move to audout_u impl.

- This is necessary so streams are created on the same thread.
bunnei 8 yıl önce
ebeveyn
işleme
eaf66b4c9f

+ 0 - 2
src/core/core.cpp

@@ -177,7 +177,6 @@ System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
     }
     }
 
 
     gpu_core = std::make_unique<Tegra::GPU>();
     gpu_core = std::make_unique<Tegra::GPU>();
-    audio_core = std::make_unique<AudioCore::AudioOut>();
     telemetry_session = std::make_unique<Core::TelemetrySession>();
     telemetry_session = std::make_unique<Core::TelemetrySession>();
     service_manager = std::make_shared<Service::SM::ServiceManager>();
     service_manager = std::make_shared<Service::SM::ServiceManager>();
 
 
@@ -229,7 +228,6 @@ void System::Shutdown() {
     service_manager.reset();
     service_manager.reset();
     telemetry_session.reset();
     telemetry_session.reset();
     gpu_core.reset();
     gpu_core.reset();
-    audio_core.reset();
 
 
     // Close all CPU/threading state
     // Close all CPU/threading state
     cpu_barrier->NotifyEnd();
     cpu_barrier->NotifyEnd();

+ 0 - 7
src/core/core.h

@@ -8,7 +8,6 @@
 #include <memory>
 #include <memory>
 #include <string>
 #include <string>
 #include <thread>
 #include <thread>
-#include "audio_core/audio_out.h"
 #include "common/common_types.h"
 #include "common/common_types.h"
 #include "core/arm/exclusive_monitor.h"
 #include "core/arm/exclusive_monitor.h"
 #include "core/core_cpu.h"
 #include "core/core_cpu.h"
@@ -132,11 +131,6 @@ public:
         return *gpu_core;
         return *gpu_core;
     }
     }
 
 
-    /// Gets the AudioCore interface
-    AudioCore::AudioOut& AudioCore() {
-        return *audio_core;
-    }
-
     /// Gets the scheduler for the CPU core that is currently running
     /// Gets the scheduler for the CPU core that is currently running
     Kernel::Scheduler& CurrentScheduler() {
     Kernel::Scheduler& CurrentScheduler() {
         return *CurrentCpuCore().Scheduler();
         return *CurrentCpuCore().Scheduler();
@@ -201,7 +195,6 @@ private:
     /// AppLoader used to load the current executing application
     /// AppLoader used to load the current executing application
     std::unique_ptr<Loader::AppLoader> app_loader;
     std::unique_ptr<Loader::AppLoader> app_loader;
     std::unique_ptr<Tegra::GPU> gpu_core;
     std::unique_ptr<Tegra::GPU> gpu_core;
-    std::unique_ptr<AudioCore::AudioOut> audio_core;
     std::shared_ptr<Tegra::DebugContext> debug_context;
     std::shared_ptr<Tegra::DebugContext> debug_context;
     Kernel::SharedPtr<Kernel::Process> current_process;
     Kernel::SharedPtr<Kernel::Process> current_process;
     std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor;
     std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor;

+ 4 - 4
src/core/hle/service/audio/audout_u.cpp

@@ -25,9 +25,8 @@ constexpr int DefaultSampleRate{48000};
 
 
 class IAudioOut final : public ServiceFramework<IAudioOut> {
 class IAudioOut final : public ServiceFramework<IAudioOut> {
 public:
 public:
-    IAudioOut(AudoutParams audio_params)
-        : ServiceFramework("IAudioOut"), audio_params(audio_params),
-          audio_core(Core::System::GetInstance().AudioCore()) {
+    IAudioOut(AudoutParams audio_params, AudioCore::AudioOut& audio_core)
+        : ServiceFramework("IAudioOut"), audio_params(audio_params), audio_core(audio_core) {
 
 
         static const FunctionInfo functions[] = {
         static const FunctionInfo functions[] = {
             {0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
             {0, &IAudioOut::GetAudioOutState, "GetAudioOutState"},
@@ -195,7 +194,7 @@ void AudOutU::OpenAudioOutImpl(Kernel::HLERequestContext& ctx) {
     // TODO(bunnei): Support more than one IAudioOut interface. When we add this, ListAudioOutsImpl
     // TODO(bunnei): Support more than one IAudioOut interface. When we add this, ListAudioOutsImpl
     // will likely need to be updated as well.
     // will likely need to be updated as well.
     ASSERT_MSG(!audio_out_interface, "Unimplemented");
     ASSERT_MSG(!audio_out_interface, "Unimplemented");
-    audio_out_interface = std::make_shared<IAudioOut>(std::move(params));
+    audio_out_interface = std::make_shared<IAudioOut>(std::move(params), *audio_core);
 
 
     IPC::ResponseBuilder rb{ctx, 6, 0, 1};
     IPC::ResponseBuilder rb{ctx, 6, 0, 1};
     rb.Push(RESULT_SUCCESS);
     rb.Push(RESULT_SUCCESS);
@@ -212,6 +211,7 @@ AudOutU::AudOutU() : ServiceFramework("audout:u") {
                                              {2, &AudOutU::ListAudioOutsImpl, "ListAudioOutsAuto"},
                                              {2, &AudOutU::ListAudioOutsImpl, "ListAudioOutsAuto"},
                                              {3, &AudOutU::OpenAudioOutImpl, "OpenAudioOutAuto"}};
                                              {3, &AudOutU::OpenAudioOutImpl, "OpenAudioOutAuto"}};
     RegisterHandlers(functions);
     RegisterHandlers(functions);
+    audio_core = std::make_unique<AudioCore::AudioOut>();
 }
 }
 
 
 } // namespace Service::Audio
 } // namespace Service::Audio

+ 2 - 0
src/core/hle/service/audio/audout_u.h

@@ -4,6 +4,7 @@
 
 
 #pragma once
 #pragma once
 
 
+#include "audio_core/audio_out.h"
 #include "core/hle/service/service.h"
 #include "core/hle/service/service.h"
 
 
 namespace Kernel {
 namespace Kernel {
@@ -33,6 +34,7 @@ public:
 
 
 private:
 private:
     std::shared_ptr<IAudioOut> audio_out_interface;
     std::shared_ptr<IAudioOut> audio_out_interface;
+    std::unique_ptr<AudioCore::AudioOut> audio_core;
 
 
     void ListAudioOutsImpl(Kernel::HLERequestContext& ctx);
     void ListAudioOutsImpl(Kernel::HLERequestContext& ctx);
     void OpenAudioOutImpl(Kernel::HLERequestContext& ctx);
     void OpenAudioOutImpl(Kernel::HLERequestContext& ctx);