diff options
| author | 2019-11-26 21:48:56 -0500 | |
|---|---|---|
| committer | 2019-11-26 21:48:56 -0500 | |
| commit | ec0ce96c568b2b610c5218efd7faa5d9a19350f8 (patch) | |
| tree | 61b5133e3cc6a9edf3b45c5fe6604493689f6769 /src/audio_core | |
| parent | Merge pull request #3164 from ReinUsesLisp/half-cast-float (diff) | |
| download | yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.tar.gz yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.tar.xz yuzu-ec0ce96c568b2b610c5218efd7faa5d9a19350f8.zip | |
core_timing: Use better reference tracking for EventType. (#3159)
* core_timing: Use better reference tracking for EventType.
- Moves ownership of the event to the caller, ensuring we don't fire events for destroyed objects.
- Removes need for unique names - we won't be using this for save states anyways.
Diffstat (limited to 'src/audio_core')
| -rw-r--r-- | src/audio_core/stream.cpp | 2 | ||||
| -rw-r--r-- | src/audio_core/stream.h | 25 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp index 6a5f53a57..4ca98f8ea 100644 --- a/src/audio_core/stream.cpp +++ b/src/audio_core/stream.cpp | |||
| @@ -37,7 +37,7 @@ Stream::Stream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, Format fo | |||
| 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}, core_timing{core_timing}, 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::CreateEvent( |
| 41 | name, [this](u64 userdata, s64 cycles_late) { ReleaseActiveBuffer(); }); | 41 | name, [this](u64 userdata, s64 cycles_late) { ReleaseActiveBuffer(); }); |
| 42 | } | 42 | } |
| 43 | 43 | ||
diff --git a/src/audio_core/stream.h b/src/audio_core/stream.h index 8106cea43..1708a4d98 100644 --- a/src/audio_core/stream.h +++ b/src/audio_core/stream.h | |||
| @@ -98,18 +98,19 @@ private: | |||
| 98 | /// Gets the number of core cycles when the specified buffer will be released | 98 | /// Gets the number of core cycles when the specified buffer will be released |
| 99 | s64 GetBufferReleaseCycles(const Buffer& buffer) const; | 99 | s64 GetBufferReleaseCycles(const Buffer& buffer) const; |
| 100 | 100 | ||
| 101 | u32 sample_rate; ///< Sample rate of the stream | 101 | u32 sample_rate; ///< Sample rate of the stream |
| 102 | Format format; ///< Format of the stream | 102 | Format format; ///< Format of the stream |
| 103 | float game_volume = 1.0f; ///< The volume the game currently has set | 103 | float game_volume = 1.0f; ///< The volume the game currently has set |
| 104 | ReleaseCallback release_callback; ///< Buffer release callback for the stream | 104 | ReleaseCallback release_callback; ///< Buffer release callback for the stream |
| 105 | State state{State::Stopped}; ///< Playback state of the stream | 105 | State state{State::Stopped}; ///< Playback state of the stream |
| 106 | Core::Timing::EventType* release_event{}; ///< Core timing release event for the stream | 106 | std::shared_ptr<Core::Timing::EventType> |
| 107 | BufferPtr active_buffer; ///< Actively playing buffer in the stream | 107 | release_event; ///< Core timing release event for the stream |
| 108 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream | 108 | BufferPtr active_buffer; ///< Actively playing buffer in the stream |
| 109 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream | 109 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream |
| 110 | SinkStream& sink_stream; ///< Output sink for the stream | 110 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream |
| 111 | Core::Timing::CoreTiming& core_timing; ///< Core timing instance. | 111 | SinkStream& sink_stream; ///< Output sink for the stream |
| 112 | std::string name; ///< Name of the stream, must be unique | 112 | Core::Timing::CoreTiming& core_timing; ///< Core timing instance. |
| 113 | std::string name; ///< Name of the stream, must be unique | ||
| 113 | }; | 114 | }; |
| 114 | 115 | ||
| 115 | using StreamPtr = std::shared_ptr<Stream>; | 116 | using StreamPtr = std::shared_ptr<Stream>; |