summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-08-02 18:27:22 -0400
committerGravatar bunnei2018-08-04 14:34:12 -0400
commit9f846d3aa42d7ad269d3d5d0cd1ad68c43b37bb7 (patch)
tree92d92a14528997d5b1cd2baab50a1045f702b9dc /src
parentMerge pull request #849 from DarkLordZach/xci (diff)
downloadyuzu-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.cpp8
-rw-r--r--src/audio_core/audio_out.h3
-rw-r--r--src/audio_core/stream.cpp7
-rw-r--r--src/audio_core/stream.h4
-rw-r--r--src/core/hle/service/audio/audout_u.cpp2
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
30StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, 30StreamPtr 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
42std::vector<Buffer::Tag> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) { 42std::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 {
20class AudioOut { 21class AudioOut {
21public: 22public:
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
39Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, 39Stream::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
48void Stream::Play() { 48void Stream::Play() {
@@ -104,6 +104,7 @@ void Stream::PlayNextBuffer() {
104} 104}
105 105
106void Stream::ReleaseActiveBuffer() { 106void 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
101using StreamPtr = std::shared_ptr<Stream>; 103using 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
54private: 54private: