diff options
| author | 2019-02-15 19:52:11 -0700 | |
|---|---|---|
| committer | 2019-02-15 19:52:11 -0700 | |
| commit | 99da6362c43a24c608a2790f668f10a62e3b80a6 (patch) | |
| tree | 6257ac07283ebb4ea5ac622784cc7a041d48f8b1 /src/audio_core | |
| parent | Merge pull request #2112 from lioncash/shadowing (diff) | |
| parent | core_timing: Convert core timing into a class (diff) | |
| download | yuzu-99da6362c43a24c608a2790f668f10a62e3b80a6.tar.gz yuzu-99da6362c43a24c608a2790f668f10a62e3b80a6.tar.xz yuzu-99da6362c43a24c608a2790f668f10a62e3b80a6.zip | |
Merge pull request #2123 from lioncash/coretiming-global
core_timing: De-globalize core_timing facilities
Diffstat (limited to 'src/audio_core')
| -rw-r--r-- | src/audio_core/audio_out.cpp | 5 | ||||
| -rw-r--r-- | src/audio_core/audio_out.h | 8 | ||||
| -rw-r--r-- | src/audio_core/audio_renderer.cpp | 7 | ||||
| -rw-r--r-- | src/audio_core/audio_renderer.h | 6 | ||||
| -rw-r--r-- | src/audio_core/stream.cpp | 11 | ||||
| -rw-r--r-- | src/audio_core/stream.h | 8 |
6 files changed, 28 insertions, 17 deletions
diff --git a/src/audio_core/audio_out.cpp b/src/audio_core/audio_out.cpp index 50d2a1ed3..8619a3f03 100644 --- a/src/audio_core/audio_out.cpp +++ b/src/audio_core/audio_out.cpp | |||
| @@ -26,14 +26,15 @@ static Stream::Format ChannelsToStreamFormat(u32 num_channels) { | |||
| 26 | return {}; | 26 | return {}; |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, | 29 | StreamPtr AudioOut::OpenStream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, |
| 30 | u32 num_channels, std::string&& name, | ||
| 30 | Stream::ReleaseCallback&& release_callback) { | 31 | Stream::ReleaseCallback&& release_callback) { |
| 31 | if (!sink) { | 32 | if (!sink) { |
| 32 | sink = CreateSinkFromID(Settings::values.sink_id, Settings::values.audio_device_id); | 33 | sink = CreateSinkFromID(Settings::values.sink_id, Settings::values.audio_device_id); |
| 33 | } | 34 | } |
| 34 | 35 | ||
| 35 | return std::make_shared<Stream>( | 36 | return std::make_shared<Stream>( |
| 36 | sample_rate, ChannelsToStreamFormat(num_channels), std::move(release_callback), | 37 | core_timing, sample_rate, ChannelsToStreamFormat(num_channels), std::move(release_callback), |
| 37 | sink->AcquireSinkStream(sample_rate, num_channels, name), std::move(name)); | 38 | sink->AcquireSinkStream(sample_rate, num_channels, name), std::move(name)); |
| 38 | } | 39 | } |
| 39 | 40 | ||
diff --git a/src/audio_core/audio_out.h b/src/audio_core/audio_out.h index df9607ac7..b07588287 100644 --- a/src/audio_core/audio_out.h +++ b/src/audio_core/audio_out.h | |||
| @@ -13,6 +13,10 @@ | |||
| 13 | #include "audio_core/stream.h" | 13 | #include "audio_core/stream.h" |
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | 15 | ||
| 16 | namespace Core::Timing { | ||
| 17 | class CoreTiming; | ||
| 18 | } | ||
| 19 | |||
| 16 | namespace AudioCore { | 20 | namespace AudioCore { |
| 17 | 21 | ||
| 18 | /** | 22 | /** |
| @@ -21,8 +25,8 @@ namespace AudioCore { | |||
| 21 | class AudioOut { | 25 | class AudioOut { |
| 22 | public: | 26 | public: |
| 23 | /// Opens a new audio stream | 27 | /// Opens a new audio stream |
| 24 | StreamPtr OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, | 28 | StreamPtr OpenStream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, u32 num_channels, |
| 25 | Stream::ReleaseCallback&& release_callback); | 29 | std::string&& name, Stream::ReleaseCallback&& release_callback); |
| 26 | 30 | ||
| 27 | /// Returns a vector of recently released buffers specified by tag for the specified stream | 31 | /// Returns a vector of recently released buffers specified by tag for the specified stream |
| 28 | std::vector<Buffer::Tag> GetTagsAndReleaseBuffers(StreamPtr stream, std::size_t max_count); | 32 | std::vector<Buffer::Tag> GetTagsAndReleaseBuffers(StreamPtr stream, std::size_t max_count); |
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index 00c026511..9a0939883 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "audio_core/codec.h" | 8 | #include "audio_core/codec.h" |
| 9 | #include "common/assert.h" | 9 | #include "common/assert.h" |
| 10 | #include "common/logging/log.h" | 10 | #include "common/logging/log.h" |
| 11 | #include "core/core.h" | ||
| 11 | #include "core/hle/kernel/writable_event.h" | 12 | #include "core/hle/kernel/writable_event.h" |
| 12 | #include "core/memory.h" | 13 | #include "core/memory.h" |
| 13 | 14 | ||
| @@ -71,14 +72,14 @@ private: | |||
| 71 | EffectOutStatus out_status{}; | 72 | EffectOutStatus out_status{}; |
| 72 | EffectInStatus info{}; | 73 | EffectInStatus info{}; |
| 73 | }; | 74 | }; |
| 74 | AudioRenderer::AudioRenderer(AudioRendererParameter params, | 75 | AudioRenderer::AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params, |
| 75 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event) | 76 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event) |
| 76 | : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), | 77 | : worker_params{params}, buffer_event{buffer_event}, voices(params.voice_count), |
| 77 | effects(params.effect_count) { | 78 | effects(params.effect_count) { |
| 78 | 79 | ||
| 79 | audio_out = std::make_unique<AudioCore::AudioOut>(); | 80 | audio_out = std::make_unique<AudioCore::AudioOut>(); |
| 80 | stream = audio_out->OpenStream(STREAM_SAMPLE_RATE, STREAM_NUM_CHANNELS, "AudioRenderer", | 81 | stream = audio_out->OpenStream(core_timing, STREAM_SAMPLE_RATE, STREAM_NUM_CHANNELS, |
| 81 | [=]() { buffer_event->Signal(); }); | 82 | "AudioRenderer", [=]() { buffer_event->Signal(); }); |
| 82 | audio_out->StartStream(stream); | 83 | audio_out->StartStream(stream); |
| 83 | 84 | ||
| 84 | QueueMixedBuffer(0); | 85 | QueueMixedBuffer(0); |
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index 7826881bf..201ec7a3c 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -14,6 +14,10 @@ | |||
| 14 | #include "common/swap.h" | 14 | #include "common/swap.h" |
| 15 | #include "core/hle/kernel/object.h" | 15 | #include "core/hle/kernel/object.h" |
| 16 | 16 | ||
| 17 | namespace Core::Timing { | ||
| 18 | class CoreTiming; | ||
| 19 | } | ||
| 20 | |||
| 17 | namespace Kernel { | 21 | namespace Kernel { |
| 18 | class WritableEvent; | 22 | class WritableEvent; |
| 19 | } | 23 | } |
| @@ -208,7 +212,7 @@ static_assert(sizeof(UpdateDataHeader) == 0x40, "UpdateDataHeader has wrong size | |||
| 208 | 212 | ||
| 209 | class AudioRenderer { | 213 | class AudioRenderer { |
| 210 | public: | 214 | public: |
| 211 | AudioRenderer(AudioRendererParameter params, | 215 | AudioRenderer(Core::Timing::CoreTiming& core_timing, AudioRendererParameter params, |
| 212 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event); | 216 | Kernel::SharedPtr<Kernel::WritableEvent> buffer_event); |
| 213 | ~AudioRenderer(); | 217 | ~AudioRenderer(); |
| 214 | 218 | ||
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp index 8ab5649df..d89ff30b7 100644 --- a/src/audio_core/stream.cpp +++ b/src/audio_core/stream.cpp | |||
| @@ -32,12 +32,12 @@ u32 Stream::GetNumChannels() const { | |||
| 32 | return {}; | 32 | return {}; |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | 35 | Stream::Stream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, Format format, |
| 36 | SinkStream& sink_stream, std::string&& name_) | 36 | ReleaseCallback&& release_callback, SinkStream& sink_stream, std::string&& name_) |
| 37 | : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, | 37 | : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, |
| 38 | sink_stream{sink_stream}, name{std::move(name_)} { | 38 | sink_stream{sink_stream}, core_timing{core_timing}, name{std::move(name_)} { |
| 39 | 39 | ||
| 40 | release_event = Core::Timing::RegisterEvent( | 40 | release_event = core_timing.RegisterEvent( |
| 41 | name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); | 41 | name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); |
| 42 | } | 42 | } |
| 43 | 43 | ||
| @@ -99,8 +99,7 @@ void Stream::PlayNextBuffer() { | |||
| 99 | 99 | ||
| 100 | sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); | 100 | sink_stream.EnqueueSamples(GetNumChannels(), active_buffer->GetSamples()); |
| 101 | 101 | ||
| 102 | Core::Timing::ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, | 102 | core_timing.ScheduleEventThreadsafe(GetBufferReleaseCycles(*active_buffer), release_event, {}); |
| 103 | {}); | ||
| 104 | } | 103 | } |
| 105 | 104 | ||
| 106 | void Stream::ReleaseActiveBuffer() { | 105 | void Stream::ReleaseActiveBuffer() { |
diff --git a/src/audio_core/stream.h b/src/audio_core/stream.h index caa775544..05071243b 100644 --- a/src/audio_core/stream.h +++ b/src/audio_core/stream.h | |||
| @@ -14,8 +14,9 @@ | |||
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | 15 | ||
| 16 | namespace Core::Timing { | 16 | namespace Core::Timing { |
| 17 | class CoreTiming; | ||
| 17 | struct EventType; | 18 | struct EventType; |
| 18 | } | 19 | } // namespace Core::Timing |
| 19 | 20 | ||
| 20 | namespace AudioCore { | 21 | namespace AudioCore { |
| 21 | 22 | ||
| @@ -42,8 +43,8 @@ public: | |||
| 42 | /// Callback function type, used to change guest state on a buffer being released | 43 | /// Callback function type, used to change guest state on a buffer being released |
| 43 | using ReleaseCallback = std::function<void()>; | 44 | using ReleaseCallback = std::function<void()>; |
| 44 | 45 | ||
| 45 | Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | 46 | Stream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, Format format, |
| 46 | SinkStream& sink_stream, std::string&& name_); | 47 | ReleaseCallback&& release_callback, SinkStream& sink_stream, std::string&& name_); |
| 47 | 48 | ||
| 48 | /// Plays the audio stream | 49 | /// Plays the audio stream |
| 49 | void Play(); | 50 | void Play(); |
| @@ -100,6 +101,7 @@ private: | |||
| 100 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream | 101 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream |
| 101 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream | 102 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream |
| 102 | SinkStream& sink_stream; ///< Output sink for the stream | 103 | SinkStream& sink_stream; ///< Output sink for the stream |
| 104 | Core::Timing::CoreTiming& core_timing; ///< Core timing instance. | ||
| 103 | std::string name; ///< Name of the stream, must be unique | 105 | std::string name; ///< Name of the stream, must be unique |
| 104 | }; | 106 | }; |
| 105 | 107 | ||