Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
track_automation_renderer.hpp
Go to the documentation of this file.
1#pragma once
2
8
9#include <array>
10#include <cstddef>
11#include <cstdint>
12#include <memory>
13#include <span>
14#include <vector>
15
16namespace pulp::playback {
17
20 std::uint32_t param_id = 0;
21 std::uint32_t sample_offset = 0;
22 float value = 0.0f;
23 std::uint32_t ramp_duration_sample_frames = 0;
24
25 constexpr bool operator==(const TrackAutomationEvent&) const = default;
26};
27
30 std::span<const TrackAutomationEvent> events;
31 bool coalesced = false;
32};
33
48
49enum class TrackAutomationRendererAdoption : std::uint8_t {
52};
53
59
67
72 public:
73 static constexpr std::size_t kEventsPerDevice =
77
79 create(std::shared_ptr<const TrackAutomationProgram> program,
81
85 TrackAutomationRenderer& operator=(TrackAutomationRenderer&&) noexcept = default;
86
91
93 void reset() noexcept;
94
95 timeline::ItemId track_id() const noexcept;
96 const std::shared_ptr<const TrackAutomationProgram>& program() const noexcept {
97 return program_;
98 }
99 const AutomationPlaybackLimits& limits() const noexcept {
100 return limits_;
101 }
102 std::span<const DeviceAutomationBatch> batches() const noexcept {
103 return batch_views_;
104 }
105
106 private:
107 TrackAutomationRenderer() = default;
108
109 struct LaneState {
110 std::shared_ptr<const AutomationProgram> program;
111 AutomationCursor cursor;
112 AutomationCursor next_cursor;
113 std::array<AutomationBlockEvent, kEventsPerDevice> scratch{};
114 std::uint32_t event_count = 0;
115 std::uint32_t merge_position = 0;
116 std::uint32_t selected_sample_offset = 0;
117 bool has_selected_event = false;
118 bool coalesced = false;
119 };
120
121 struct DeviceState {
122 struct QueuedEvent {
124 std::uint32_t lane_sequence = 0;
125 };
126
127 timeline::ItemId device_placement_id;
128 std::vector<std::size_t> lane_indices;
129 std::vector<std::size_t> merge_heap;
130 std::array<QueuedEvent, kEventsPerDevice> queued_events{};
131 std::array<TrackAutomationEvent, kEventsPerDevice> events{};
132 std::uint32_t event_count = 0;
133 bool coalesced = false;
134 };
135
136 std::shared_ptr<const TrackAutomationProgram> program_;
137 AutomationPlaybackLimits limits_;
138 std::vector<LaneState> lanes_;
139 std::vector<DeviceState> devices_;
140 std::vector<DeviceAutomationBatch> batch_views_;
141};
142
143} // namespace pulp::playback
Allocation-free renderer for one immutable AutomationProgram.
Definition automation_cursor.hpp:221
Immutable compiler-supplied grouping of one track's compiled automation lanes.
Definition track_automation_program.hpp:44
TrackAutomationRenderer(const TrackAutomationRenderer &)=delete
const std::shared_ptr< const TrackAutomationProgram > & program() const noexcept
Definition track_automation_renderer.hpp:96
timeline::ItemId track_id() const noexcept
static constexpr std::size_t kEventsPerDevice
Definition track_automation_renderer.hpp:73
std::span< const DeviceAutomationBatch > batches() const noexcept
Definition track_automation_renderer.hpp:102
TrackAutomationRenderer & operator=(const TrackAutomationRenderer &)=delete
static constexpr audio::RtSafetyClass process_rt_safety_class
Definition track_automation_renderer.hpp:75
TrackAutomationRenderer(TrackAutomationRenderer &&) noexcept=default
const AutomationPlaybackLimits & limits() const noexcept
Definition track_automation_renderer.hpp:99
static runtime::Result< TrackAutomationRenderer, TrackAutomationRendererError > create(std::shared_ptr< const TrackAutomationProgram > program, AutomationPlaybackLimits limits=AutomationPlaybackLimits::platform_defaults())
TrackAutomationRenderResult process(const TransportSnapshot &transport) noexcept
runtime::Result< TrackAutomationRendererAdoption, TrackAutomationRendererError > adopt(std::shared_ptr< const TrackAutomationProgram > program)
Rebuilds prepared storage while the caller has exclusive access.
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
RtSafetyClass
Definition rt_safety_contract.hpp:11
@ AudioCallbackSafeWithImmutableInputs
Definition rt_safety_contract.hpp:14
Definition child_process_manager.hpp:18
Definition audio_renderer.hpp:20
@ InvalidLimits
The carried automation ceilings are not a configuration the renderer accepts.
Definition program_wire.hpp:347
@ InvalidTransport
Definition audio_renderer.hpp:218
TrackAutomationRendererCode
Definition track_automation_renderer.hpp:34
@ LaneCapacityExceeded
Definition track_automation_renderer.hpp:42
@ PointCapacityExceeded
Definition track_automation_renderer.hpp:43
@ MissingProgram
Definition track_automation_renderer.hpp:37
@ TrackMismatch
Definition track_automation_renderer.hpp:38
@ Ok
Definition track_automation_renderer.hpp:35
@ DeviceCapacityExceeded
Definition track_automation_renderer.hpp:44
@ LaneAdoptionRejected
Definition track_automation_renderer.hpp:41
@ Unchanged
Definition automation_cursor.hpp:40
@ Adopted
Definition automation_cursor.hpp:39
@ MissingProgram
Definition note_renderer.hpp:38
TrackAutomationRendererAdoption
Definition track_automation_renderer.hpp:49
@ Coalesced
Definition automation_cursor.hpp:30
@ WorkCapacityExceeded
Definition automation_cursor.hpp:35
@ TempoMapMismatch
Definition automation_cursor.hpp:33
@ Ok
Definition automation_cursor.hpp:29
Definition generated_event_source.hpp:33
Definition program_compiler.hpp:18
STL namespace.
Result<T, E> — success / failure union for fallible operations.
Preparation and callback-work ceilings shared by document compilation and track automation rendering.
Definition automation_limits.hpp:12
static constexpr std::uint32_t kMaximumEventsPerDevicePerBlock
Definition automation_limits.hpp:18
static constexpr AutomationPlaybackLimits platform_defaults() noexcept
Definition automation_limits.hpp:42
Definition track_automation_renderer.hpp:28
timeline::ItemId device_placement_id
Definition track_automation_renderer.hpp:29
std::span< const TrackAutomationEvent > events
Definition track_automation_renderer.hpp:30
bool coalesced
Definition track_automation_renderer.hpp:31
Definition track_automation_renderer.hpp:18
float value
Definition track_automation_renderer.hpp:22
std::uint32_t param_id
Definition track_automation_renderer.hpp:20
timeline::ItemId lane_id
Definition track_automation_renderer.hpp:19
constexpr bool operator==(const TrackAutomationEvent &) const =default
std::uint32_t ramp_duration_sample_frames
Definition track_automation_renderer.hpp:23
std::uint32_t sample_offset
Definition track_automation_renderer.hpp:21
Definition track_automation_renderer.hpp:60
timeline::ItemId failed_device_placement_id
Definition track_automation_renderer.hpp:65
std::uint32_t emitted_events
Definition track_automation_renderer.hpp:62
timeline::ItemId failed_lane_id
Definition track_automation_renderer.hpp:64
TrackAutomationRendererCode code
Definition track_automation_renderer.hpp:61
std::uint32_t candidate_events
Definition track_automation_renderer.hpp:63
Definition track_automation_renderer.hpp:54
TrackAutomationRendererCode code
Definition track_automation_renderer.hpp:55
timeline::ItemId track_id
Definition track_automation_renderer.hpp:56
timeline::ItemId lane_id
Definition track_automation_renderer.hpp:57
Definition track_automation_renderer.hpp:122
std::uint32_t lane_sequence
Definition track_automation_renderer.hpp:124
TrackAutomationEvent event
Definition track_automation_renderer.hpp:123
Definition transport.hpp:71
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19