Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
playback_context_projection.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <cstdint>
7#include <limits>
8
9namespace pulp::format {
10
22
25inline ProcessContext
27 const playback::TransportRange& range,
28 const PlaybackContextProjectionOptions& options = {}) noexcept {
29 ProcessContext context;
30 context.sample_rate = static_cast<double>(snapshot.sample_rate.as_long_double());
31 context.num_samples =
32 range.frame_count > static_cast<std::uint32_t>(std::numeric_limits<int>::max())
33 ? std::numeric_limits<int>::max()
34 : static_cast<int>(range.frame_count);
35 context.process_mode = options.process_mode;
36 context.is_bypassed = options.is_bypassed;
37 context.is_tail_drain = options.is_tail_drain;
38 context.render_speed_hint = options.render_speed_hint;
39 context.is_playing = snapshot.is_playing;
40 context.is_recording = false;
41 context.tempo_bpm = range.tempo_bpm;
42 context.position_beats =
44 ? range.host_tick_start / static_cast<double>(timebase::kTicksPerQuarter)
45 : static_cast<double>(range.timeline_tick_start.value) /
46 static_cast<double>(timebase::kTicksPerQuarter);
47 context.position_samples = range.timeline_sample_start.value;
48 context.time_sig_numerator = snapshot.meter.numerator;
49 context.time_sig_denominator = snapshot.meter.denominator;
50 context.bar = range.bar_start.value;
51 context.is_looping = snapshot.loop.enabled;
52 if (snapshot.loop.enabled) {
53 context.loop_start_beats = snapshot.has_precise_host_loop
54 ? snapshot.host_loop_start_beats
55 : static_cast<double>(snapshot.loop.start.value) /
56 static_cast<double>(timebase::kTicksPerQuarter);
57 context.loop_end_beats = snapshot.has_precise_host_loop
58 ? snapshot.host_loop_end_beats
59 : static_cast<double>(snapshot.loop.end.value) /
60 static_cast<double>(timebase::kTicksPerQuarter);
61 }
62 context.host_time_ns = options.host_time_ns;
63 context.frame_rate = options.frame_rate;
64
65 const bool first_range = range.sample_offset == 0;
66 context.tempo_changed = range.tempo_changed;
67 context.time_sig_changed = first_range && snapshot.time_sig_changed;
68 context.transport_changed = first_range && snapshot.transport_changed;
69 context.transport_started = first_range && snapshot.transport_started;
70 context.reset_requested = first_range && snapshot.reset_requested;
71 context.transport_jump = range.discontinuity;
72 context.transport_validity.set(TransportField::Playing);
73 context.transport_validity.set(TransportField::Looping);
74 context.transport_validity.set(TransportField::Tempo);
75 context.transport_validity.set(TransportField::BeatPosition);
76 context.transport_validity.set(TransportField::SamplePosition);
77 context.transport_validity.set(TransportField::TimeSignature);
78 context.transport_validity.set(TransportField::Bar);
79 if (snapshot.loop.enabled)
80 context.transport_validity.set(TransportField::LoopRange);
81 if (options.host_time_ns != 0)
82 context.transport_validity.set(TransportField::HostTime);
83 if (options.frame_rate != FrameRate::unknown)
84 context.transport_validity.set(TransportField::FrameRate);
85 return context;
86}
87
88} // namespace pulp::format
What the product grants a device: the quota table indexed by capability tier and live thermal state.
Definition aax_editor.hpp:31
RenderSpeedHint
Host render-speed hint for offline or constrained live rendering.
Definition process_context.hpp:40
@ Unknown
Definition process_context.hpp:41
ProcessMode
Coarse processing mode for one block.
Definition process_block.hpp:29
@ Realtime
Definition process_block.hpp:30
FrameRate
SMPTE video frame rate.
Definition process_context.hpp:24
@ unknown
Definition process_context.hpp:25
@ BeatPosition
Definition transport_fields.hpp:14
@ FrameRate
Definition transport_fields.hpp:20
@ HostTime
Definition transport_fields.hpp:19
@ LoopRange
Definition transport_fields.hpp:17
@ Looping
Definition transport_fields.hpp:12
@ TimeSignature
Definition transport_fields.hpp:16
@ Playing
Definition transport_fields.hpp:10
@ Tempo
Definition transport_fields.hpp:13
@ Bar
Definition transport_fields.hpp:18
@ SamplePosition
Definition transport_fields.hpp:15
ProcessContext project_process_context(const playback::TransportSnapshot &snapshot, const playback::TransportRange &range, const PlaybackContextProjectionOptions &options={}) noexcept
Lossy, one-way adapter from the integer-authoritative playback snapshot to the public format ABI.
Definition playback_context_projection.hpp:26
Definition beat_division.hpp:11
constexpr std::int64_t kTicksPerQuarter
Definition tick.hpp:54
Format-layer metadata that is intentionally absent from the engine-owned transport snapshot.
Definition playback_context_projection.hpp:14
FrameRate frame_rate
Definition playback_context_projection.hpp:20
bool is_tail_drain
Definition playback_context_projection.hpp:18
bool is_bypassed
Definition playback_context_projection.hpp:17
RenderSpeedHint render_speed_hint
Definition playback_context_projection.hpp:16
ProcessMode process_mode
Definition playback_context_projection.hpp:15
std::int64_t host_time_ns
Definition playback_context_projection.hpp:19
Process context — passed every audio callback with transport state.
Definition process_context.hpp:89
Definition transport.hpp:45
std::uint32_t sample_offset
Definition transport.hpp:46
std::uint32_t frame_count
Definition transport.hpp:47
bool tempo_changed
Definition transport.hpp:55
double host_tick_start
Definition transport.hpp:58
double tempo_bpm
Definition transport.hpp:54
timebase::SamplePosition timeline_sample_start
Definition transport.hpp:48
timebase::BarPosition bar_start
Definition transport.hpp:53
bool discontinuity
Definition transport.hpp:56
bool has_precise_host_ticks
Definition transport.hpp:60
Definition transport.hpp:71
LoopRegion loop
Definition transport.hpp:82
bool transport_changed
Definition transport.hpp:89
bool time_sig_changed
Definition transport.hpp:92
bool reset_requested
Definition transport.hpp:91
MeterSignature meter
Definition transport.hpp:81
timebase::RationalRate sample_rate
Definition transport.hpp:75
bool is_playing
Definition transport.hpp:83
bool transport_started
Definition transport.hpp:90
std::int64_t value
Definition compiled_meter_map.hpp:27
bool enabled
Definition loop_region.hpp:21
std::int32_t denominator
Definition compiled_meter_map.hpp:16
std::int32_t numerator
Definition compiled_meter_map.hpp:15
constexpr long double as_long_double() const noexcept
Definition rational_time.hpp:29
std::int64_t value
Definition rational_time.hpp:10