91 bool prepared() const noexcept {
return prepared_; }
92 std::uint32_t
channels() const noexcept {
return channels_; }
93 std::uint32_t
page_count() const noexcept {
return page_count_; }
94 std::uint64_t
page_frames() const noexcept {
return page_frames_; }
103 std::uint64_t completed_audio_generation = 0) noexcept;
105 std::uint32_t channel) noexcept;
108 std::uint64_t frames) noexcept;
111 std::uint64_t frames) noexcept;
118 std::uint64_t retire_after_audio_generation) noexcept;
124 std::uint64_t stream_generation,
125 std::uint64_t source_frame) const noexcept;
127 std::uint32_t channel) const noexcept;
134 template<typename SampleType>
135 bool copy_to_filling_page_impl(
std::uint32_t page_index,
137 std::uint64_t frames) noexcept;
139 bool valid_page(
std::uint32_t page_index) const noexcept;
141 bool overlaps_ready_page(
std::uint32_t page_index,
143 float* mutable_page_channel(
std::uint32_t page_index,
144 std::uint32_t channel) noexcept;
145 const
float* page_channel(
std::uint32_t page_index,
146 std::uint32_t channel) const noexcept;
147 void clear_page(
std::uint32_t page_index) noexcept;
148 void clear_unprepared() noexcept;
149 std::uint64_t frames_until_next_ready_page(
std::uint64_t stream_generation,
150 std::uint64_t source_frame,
151 std::uint64_t limit) const noexcept;
153 struct PageMetadata {
157 std::vector<float> storage_;
158 std::vector<std::atomic<std::uint8_t>> states_;
159 std::vector<PageMetadata> metadata_;
160 std::vector<std::atomic<std::uint64_t>> retire_after_generation_;
162 std::uint32_t channels_ = 0;
163 std::uint32_t page_count_ = 0;
164 std::uint64_t page_frames_ = 0;
165 bool prepared_ =
false;
167 std::atomic<std::uint64_t> pages_published_{0};
168 std::atomic<std::uint64_t> pages_retired_{0};
169 std::atomic<std::uint64_t> ready_read_chunks_{0};
170 std::atomic<std::uint64_t> ready_frames_read_{0};
171 std::atomic<std::uint64_t> missed_frames_{0};
172 std::atomic<std::uint64_t> zero_filled_frames_{0};
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
SampleStreamWindow()=default
void reset_when_quiescent() noexcept
bool retire_page(std::uint32_t page_index, std::uint64_t retire_after_audio_generation) noexcept
bool cancel_fill_page(std::uint32_t page_index) noexcept
SampleStreamPageView ready_page_for_frame(std::uint64_t stream_generation, std::uint64_t source_frame) const noexcept
std::uint32_t page_count() const noexcept
Definition sample_stream_window.hpp:93
SampleStreamPageState page_state(std::uint32_t page_index) const noexcept
bool prepare(const SampleStreamWindowConfig &config)
SampleStreamWindowStats stats() const noexcept
bool begin_fill_page(std::uint32_t page_index, std::uint64_t completed_audio_generation=0) noexcept
SampleStreamWindowReadResult read_frames(BufferView< float > destination, const SampleStreamWindowReadRequest &request) noexcept
const float * ready_channel_data(const SampleStreamPageView &view, std::uint32_t channel) const noexcept
bool prepared() const noexcept
Definition sample_stream_window.hpp:91
std::uint32_t channels() const noexcept
Definition sample_stream_window.hpp:92
bool publish_page(std::uint32_t page_index, const SampleStreamPageDescriptor &descriptor) noexcept
bool copy_to_filling_page(std::uint32_t page_index, BufferView< const float > source, std::uint64_t frames) noexcept
float * writable_channel_data(std::uint32_t page_index, std::uint32_t channel) noexcept
std::uint64_t page_frames() const noexcept
Definition sample_stream_window.hpp:94
Definition analyzer_provider.hpp:12
@ Retired
Definition sample_slot_bank.hpp:19
@ Empty
Definition sample_resource.hpp:21
@ Ready
Definition sample_starvation_envelope.hpp:10
SampleStreamPageState
Definition sample_stream_window.hpp:18
@ Retiring
Definition sample_stream_window.hpp:22
@ Filling
Definition sample_stream_window.hpp:20
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
Definition sample_stream_window.hpp:26
std::uint64_t start_frame
Definition sample_stream_window.hpp:30
bool final_page
Definition sample_stream_window.hpp:32
std::uint64_t stream_generation
Definition sample_stream_window.hpp:29
std::uint64_t valid_frames
Definition sample_stream_window.hpp:31
Definition sample_stream_window.hpp:35
std::uint64_t local_offset
Definition sample_stream_window.hpp:41
std::uint32_t page_index
Definition sample_stream_window.hpp:37
std::uint64_t stream_generation
Definition sample_stream_window.hpp:38
bool final_page
Definition sample_stream_window.hpp:42
std::uint64_t start_frame
Definition sample_stream_window.hpp:39
bool valid
Definition sample_stream_window.hpp:36
std::uint64_t valid_frames
Definition sample_stream_window.hpp:40
Definition sample_stream_window.hpp:12
std::uint32_t channels
Definition sample_stream_window.hpp:13
std::uint32_t page_count
Definition sample_stream_window.hpp:14
std::uint64_t page_frames
Definition sample_stream_window.hpp:15
Definition sample_stream_window.hpp:45
std::uint64_t start_frame
Definition sample_stream_window.hpp:47
std::uint64_t frames
Definition sample_stream_window.hpp:48
bool accumulate
Definition sample_stream_window.hpp:49
bool zero_fill_misses
Definition sample_stream_window.hpp:50
std::uint64_t stream_generation
Definition sample_stream_window.hpp:46
Definition sample_stream_window.hpp:53
std::uint64_t copied_frames
Definition sample_stream_window.hpp:55
std::uint64_t missed_frames
Definition sample_stream_window.hpp:56
std::uint64_t requested_frames
Definition sample_stream_window.hpp:54
bool complete
Definition sample_stream_window.hpp:58
std::uint64_t zero_filled_frames
Definition sample_stream_window.hpp:57
Definition sample_stream_window.hpp:61
std::uint64_t pages_published
Definition sample_stream_window.hpp:62
std::uint64_t ready_frames_read
Definition sample_stream_window.hpp:65
std::uint64_t missed_frames
Definition sample_stream_window.hpp:66
std::uint64_t pages_retired
Definition sample_stream_window.hpp:63
std::uint64_t zero_filled_frames
Definition sample_stream_window.hpp:67
std::uint64_t ready_read_chunks
Definition sample_stream_window.hpp:64
std::uint32_t ready_pages
Definition sample_stream_window.hpp:68