audio_core: Streams need unique names for CoreTiming.
This commit is contained in:
		| @@ -27,16 +27,16 @@ static Stream::Format ChannelsToStreamFormat(u32 num_channels) { | ||||
|     return {}; | ||||
| } | ||||
|  | ||||
| StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, | ||||
| StreamPtr AudioOut::OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, | ||||
|                                Stream::ReleaseCallback&& release_callback) { | ||||
|     if (!sink) { | ||||
|         const SinkDetails& sink_details = GetSinkDetails(Settings::values.sink_id); | ||||
|         sink = sink_details.factory(Settings::values.audio_device_id); | ||||
|     } | ||||
|  | ||||
|     return std::make_shared<Stream>(sample_rate, ChannelsToStreamFormat(num_channels), | ||||
|                                     std::move(release_callback), | ||||
|                                     sink->AcquireSinkStream(sample_rate, num_channels)); | ||||
|     return std::make_shared<Stream>( | ||||
|         sample_rate, ChannelsToStreamFormat(num_channels), std::move(release_callback), | ||||
|         sink->AcquireSinkStream(sample_rate, num_channels), std::move(name)); | ||||
| } | ||||
|  | ||||
| std::vector<Buffer::Tag> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) { | ||||
|   | ||||
| @@ -5,6 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <vector> | ||||
|  | ||||
| #include "audio_core/buffer.h" | ||||
| @@ -20,7 +21,7 @@ namespace AudioCore { | ||||
| class AudioOut { | ||||
| public: | ||||
|     /// Opens a new audio stream | ||||
|     StreamPtr OpenStream(u32 sample_rate, u32 num_channels, | ||||
|     StreamPtr OpenStream(u32 sample_rate, u32 num_channels, std::string&& name, | ||||
|                          Stream::ReleaseCallback&& release_callback); | ||||
|  | ||||
|     /// Returns a vector of recently released buffers specified by tag for the specified stream | ||||
|   | ||||
| @@ -37,12 +37,12 @@ u32 Stream::GetSampleSize() const { | ||||
| } | ||||
|  | ||||
| Stream::Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | ||||
|                SinkStream& sink_stream) | ||||
|                SinkStream& sink_stream, std::string&& name_) | ||||
|     : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, | ||||
|       sink_stream{sink_stream} { | ||||
|       sink_stream{sink_stream}, name{std::move(name_)} { | ||||
|  | ||||
|     release_event = CoreTiming::RegisterEvent( | ||||
|         "Stream::Release", [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); | ||||
|         name, [this](u64 userdata, int cycles_late) { ReleaseActiveBuffer(); }); | ||||
| } | ||||
|  | ||||
| void Stream::Play() { | ||||
| @@ -104,6 +104,7 @@ void Stream::PlayNextBuffer() { | ||||
| } | ||||
|  | ||||
| void Stream::ReleaseActiveBuffer() { | ||||
|     ASSERT(active_buffer); | ||||
|     released_buffers.push(std::move(active_buffer)); | ||||
|     release_callback(); | ||||
|     PlayNextBuffer(); | ||||
|   | ||||
| @@ -6,6 +6,7 @@ | ||||
|  | ||||
| #include <functional> | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| #include <queue> | ||||
|  | ||||
| @@ -33,7 +34,7 @@ public: | ||||
|     using ReleaseCallback = std::function<void()>; | ||||
|  | ||||
|     Stream(u32 sample_rate, Format format, ReleaseCallback&& release_callback, | ||||
|            SinkStream& sink_stream); | ||||
|            SinkStream& sink_stream, std::string&& name_); | ||||
|  | ||||
|     /// Plays the audio stream | ||||
|     void Play(); | ||||
| @@ -96,6 +97,7 @@ private: | ||||
|     std::queue<BufferPtr> queued_buffers;   ///< Buffers queued to be played in the stream | ||||
|     std::queue<BufferPtr> released_buffers; ///< Buffers recently released from the stream | ||||
|     SinkStream& sink_stream;                ///< Output sink for the stream | ||||
|     std::string name;                       ///< Name of the stream, must be unique | ||||
| }; | ||||
|  | ||||
| using StreamPtr = std::shared_ptr<Stream>; | ||||
|   | ||||
| @@ -48,7 +48,7 @@ public: | ||||
|         buffer_event = Kernel::Event::Create(Kernel::ResetType::Sticky, "IAudioOutBufferReleased"); | ||||
|  | ||||
|         stream = audio_core.OpenStream(audio_params.sample_rate, audio_params.channel_count, | ||||
|                                        [=]() { buffer_event->Signal(); }); | ||||
|                                        "IAudioOut", [=]() { buffer_event->Signal(); }); | ||||
|     } | ||||
|  | ||||
| private: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user