diff options
| author | 2018-08-02 18:27:22 -0400 | |
|---|---|---|
| committer | 2018-08-04 14:34:12 -0400 | |
| commit | 9f846d3aa42d7ad269d3d5d0cd1ad68c43b37bb7 (patch) | |
| tree | 92d92a14528997d5b1cd2baab50a1045f702b9dc /src | |
| parent | Merge pull request #849 from DarkLordZach/xci (diff) | |
| download | yuzu-9f846d3aa42d7ad269d3d5d0cd1ad68c43b37bb7.tar.gz yuzu-9f846d3aa42d7ad269d3d5d0cd1ad68c43b37bb7.tar.xz yuzu-9f846d3aa42d7ad269d3d5d0cd1ad68c43b37bb7.zip | |
audio_core: Streams need unique names for CoreTiming.
Diffstat (limited to 'src')
| -rw-r--r-- | src/audio_core/audio_out.cpp | 8 | ||||
| -rw-r--r-- | src/audio_core/audio_out.h | 3 | ||||
| -rw-r--r-- | src/audio_core/stream.cpp | 7 | ||||
| -rw-r--r-- | src/audio_core/stream.h | 4 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audout_u.cpp | 2 |
5 files changed, 14 insertions, 10 deletions
diff --git a/src/audio_core/audio_out.cpp b/src/audio_core/audio_out.cpp index 3dfdf61f9..5cf665c22 100644 --- a/src/audio_core/audio_out.cpp +++ b/src/audio_core/audio_out.cpp | |||
| @@ -27,16 +27,16 @@ static Stream::Format ChannelsToStreamFormat(u32 num_channels) { | |||
| 27 | return {}; | 27 | return {}; |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, | 30 | StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, |
| 31 | Stream::ReleaseCallback&& release_callback) { | 31 | Stream::ReleaseCallback&& release_callback) { |
| 32 | if (!sink) { | 32 | if (!sink) { |
| 33 | const SinkDetails& sink_details = GetSinkDetails(Settings::values.sink_id); | 33 | const SinkDetails& sink_details = GetSinkDetails(Settings::values.sink_id); |
| 34 | sink = sink_details.factory(Settings::values.audio_device_id); | 34 | sink = sink_details.factory(Settings::values.audio_device_id); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | return std::make_shared<Stream>(sample_rate, ChannelsToStreamFormat(num_channels), | 37 | return std::make_shared<Stream>( |
| 38 | std::move(release_callback), | 38 | sample_rate, ChannelsToStreamFormat(num_channels), std::move(release_callback), |
| 39 | sink->AcquireSinkStream(sample_rate, num_channels)); | 39 | sink->AcquireSinkStream(sample_rate, num_channels), std::move(name)); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | std::vector<Buffer::Tag> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) { | 42 | std::vector<Buffer::Tag> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) { |
diff --git a/src/audio_core/audio_out.h b/src/audio_core/audio_out.h index 95e9b53fe..d564ff91a 100644 --- a/src/audio_core/audio_out.h +++ b/src/audio_core/audio_out.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include <string> | ||
| 8 | #include <vector> | 9 | #include <vector> |
| 9 | 10 | ||
| 10 | #include "audio_core/buffer.h" | 11 | #include "audio_core/buffer.h" |
| @@ -20,7 +21,7 @@ namespace AudioCore { | |||
| 20 | class AudioOut { | 21 | class AudioOut { |
| 21 | public: | 22 | public: |
| 22 | /// Opens a new audio stream | 23 | /// Opens a new audio stream |
| 23 | StreamPtr OpenStream(u32 sample_rate, u32 num_channels, | 24 | StreamPtr OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, |
| 24 | Stream::ReleaseCallback&& release_callback); | 25 | Stream::ReleaseCallback&& release_callback); |
| 25 | 26 | ||
| 26 | /// Returns a vector of recently released buffers specified by tag for the specified stream | 27 | /// Returns a vector of recently released buffers specified by tag for the specified stream |
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp index a0045b7a1..7ab87c0c9 100644 --- a/src/audio_core/stream.cpp +++ b/src/audio_core/stream.cpp | |||
| @@ -37,12 +37,12 @@ u32 Stream::GetSampleSize() const { | |||
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | 39 | Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, |
| 40 | SinkStream& sink_stream) | 40 | SinkStream& sink_stream, std::string&& name_) |
| 41 | : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, | 41 | : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, |
| 42 | sink_stream{sink_stream} { | 42 | sink_stream{sink_stream}, name{std::move(name_)} { |
| 43 | 43 | ||
| 44 | release_event = CoreTiming::RegisterEvent( | 44 | release_event = CoreTiming::RegisterEvent( |
| 45 | "Stream::Release", [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); | 45 | name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | void Stream::Play() { | 48 | void Stream::Play() { |
| @@ -104,6 +104,7 @@ void Stream::PlayNextBuffer() { | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | void Stream::ReleaseActiveBuffer() { | 106 | void Stream::ReleaseActiveBuffer() { |
| 107 | ASSERT(active_buffer); | ||
| 107 | released_buffers.push(std::move(active_buffer)); | 108 | released_buffers.push(std::move(active_buffer)); |
| 108 | release_callback(); | 109 | release_callback(); |
| 109 | PlayNextBuffer(); | 110 | PlayNextBuffer(); |
diff --git a/src/audio_core/stream.h b/src/audio_core/stream.h index 35253920e..00f991733 100644 --- a/src/audio_core/stream.h +++ b/src/audio_core/stream.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #include <functional> | 7 | #include <functional> |
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | #include <string> | ||
| 9 | #include <vector> | 10 | #include <vector> |
| 10 | #include <queue> | 11 | #include <queue> |
| 11 | 12 | ||
| @@ -33,7 +34,7 @@ public: | |||
| 33 | using ReleaseCallback = std::function<void()>; | 34 | using ReleaseCallback = std::function<void()>; |
| 34 | 35 | ||
| 35 | Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | 36 | Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, |
| 36 | SinkStream& sink_stream); | 37 | SinkStream& sink_stream, std::string&& name_); |
| 37 | 38 | ||
| 38 | /// Plays the audio stream | 39 | /// Plays the audio stream |
| 39 | void Play(); | 40 | void Play(); |
| @@ -96,6 +97,7 @@ private: | |||
| 96 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream | 97 | std::queue<BufferPtr> queued_buffers; ///< Buffers queued to be played in the stream |
| 97 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream | 98 | std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream |
| 98 | SinkStream& sink_stream; ///< Output sink for the stream | 99 | SinkStream& sink_stream; ///< Output sink for the stream |
| 100 | std::string name; ///< Name of the stream, must be unique | ||
| 99 | }; | 101 | }; |
| 100 | 102 | ||
| 101 | using StreamPtr = std::shared_ptr<Stream>; | 103 | using StreamPtr = std::shared_ptr<Stream>; |
diff --git a/src/core/hle/service/audio/audout_u.cpp b/src/core/hle/service/audio/audout_u.cpp index b317027b6..9f4c7855a 100644 --- a/src/core/hle/service/audio/audout_u.cpp +++ b/src/core/hle/service/audio/audout_u.cpp | |||
| @@ -48,7 +48,7 @@ public: | |||
| 48 | buffer_event = Kernel::Event::Create(Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); | 48 | buffer_event = Kernel::Event::Create(Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); |
| 49 | 49 | ||
| 50 | stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, | 50 | stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, |
| 51 | [=]() { buffer_event->Signal(); }); | 51 | "IAudioOut", [=]() { buffer_event->Signal(); }); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | private: | 54 | private: |