summaryrefslogtreecommitdiff
path: root/src/audio_core/stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio_core/stream.cpp')
-rw-r--r--src/audio_core/stream.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/src/audio_core/stream.cpp b/src/audio_core/stream.cpp
index cb33926bc..afe68c9ed 100644
--- a/src/audio_core/stream.cpp
+++ b/src/audio_core/stream.cpp
@@ -12,7 +12,6 @@
12#include "common/assert.h" 12#include "common/assert.h"
13#include "common/logging/log.h" 13#include "common/logging/log.h"
14#include "core/core_timing.h" 14#include "core/core_timing.h"
15#include "core/core_timing_util.h"
16#include "core/settings.h" 15#include "core/settings.h"
17 16
18namespace AudioCore { 17namespace AudioCore {
@@ -32,10 +31,10 @@ u32 Stream::GetNumChannels() const {
32 return {}; 31 return {};
33} 32}
34 33
35Stream::Stream(Core::Timing::CoreTiming& core_timing, u32 sample_rate, Format format, 34Stream::Stream(Core::Timing::CoreTiming& core_timing_, u32 sample_rate_, Format format_,
36 ReleaseCallback&& release_callback, SinkStream& sink_stream, std::string&& name_) 35 ReleaseCallback&& release_callback_, SinkStream& sink_stream_, std::string&& name_)
37 : sample_rate{sample_rate}, format{format}, release_callback{std::move(release_callback)}, 36 : 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_)} { 37 sink_stream{sink_stream_}, core_timing{core_timing_}, name{std::move(name_)} {
39 release_event = 38 release_event =
40 Core::Timing::CreateEvent(name, [this](std::uintptr_t, std::chrono::nanoseconds ns_late) { 39 Core::Timing::CreateEvent(name, [this](std::uintptr_t, std::chrono::nanoseconds ns_late) {
41 ReleaseActiveBuffer(ns_late); 40 ReleaseActiveBuffer(ns_late);
@@ -123,7 +122,7 @@ bool Stream::QueueBuffer(BufferPtr&& buffer) {
123 return false; 122 return false;
124} 123}
125 124
126bool Stream::ContainsBuffer(Buffer::Tag tag) const { 125bool Stream::ContainsBuffer([[maybe_unused]] Buffer::Tag tag) const {
127 UNIMPLEMENTED(); 126 UNIMPLEMENTED();
128 return {}; 127 return {};
129} 128}
@@ -131,7 +130,25 @@ bool Stream::ContainsBuffer(Buffer::Tag tag) const {
131std::vector<Buffer::Tag> Stream::GetTagsAndReleaseBuffers(std::size_t max_count) { 130std::vector<Buffer::Tag> Stream::GetTagsAndReleaseBuffers(std::size_t max_count) {
132 std::vector<Buffer::Tag> tags; 131 std::vector<Buffer::Tag> tags;
133 for (std::size_t count = 0; count < max_count && !released_buffers.empty(); ++count) { 132 for (std::size_t count = 0; count < max_count && !released_buffers.empty(); ++count) {
134 tags.push_back(released_buffers.front()->GetTag()); 133 if (released_buffers.front()) {
134 tags.push_back(released_buffers.front()->GetTag());
135 } else {
136 ASSERT_MSG(false, "Invalid tag in released_buffers!");
137 }
138 released_buffers.pop();
139 }
140 return tags;
141}
142
143std::vector<Buffer::Tag> Stream::GetTagsAndReleaseBuffers() {
144 std::vector<Buffer::Tag> tags;
145 tags.reserve(released_buffers.size());
146 while (!released_buffers.empty()) {
147 if (released_buffers.front()) {
148 tags.push_back(released_buffers.front()->GetTag());
149 } else {
150 ASSERT_MSG(false, "Invalid tag in released_buffers!");
151 }
135 released_buffers.pop(); 152 released_buffers.pop();
136 } 153 }
137 return tags; 154 return tags;