64 return sample_rate_hz >= 1000.0 && sample_rate_hz <= 1536000.0;
69 std::uint64_t rhs)
noexcept {
70 constexpr auto max = std::numeric_limits<std::uint64_t>::max();
71 return rhs > max - lhs ? max : lhs + rhs;
75 std::uint64_t generation)
noexcept {
76 constexpr auto max = std::numeric_limits<std::uint64_t>::max();
77 return generation == max
79 : std::optional<std::uint64_t>{generation + 1};
97 return audio_io.route_instance_token != 0 &&
98 audio_io.route_instance_token == timing.route_instance_token &&
99 audio_io.calibration_generation != 0 &&
100 audio_io.calibration_generation == timing.calibration_generation;
110 std::uint64_t graph_latency_frames,
111 double graph_sample_rate_hz)
noexcept {
113 graph_sample_rate_hz != timing.sample_rate_hz ||
117 timing.route_instance_token == 0 ||
118 timing.calibration_generation == 0) {
122 std::optional<std::uint64_t> input_path;
123 if (timing.input_latency_frames && timing.input_safety_offset_frames &&
124 timing.io_buffer_frames) {
127 *timing.input_latency_frames,
128 *timing.input_safety_offset_frames),
129 *timing.io_buffer_frames);
131 std::optional<std::uint64_t> output_path;
132 if (timing.output_latency_frames && timing.output_safety_offset_frames &&
133 timing.io_buffer_frames) {
136 *timing.output_latency_frames,
137 *timing.output_safety_offset_frames),
138 *timing.io_buffer_frames);
140 if (!input_path && !output_path)
return std::nullopt;
142 std::optional<std::uint64_t> monitoring;
143 if (input_path && output_path) {
148 std::optional<std::uint64_t> output_scheduling;
156 timing.sample_rate_hz,
157 graph_latency_frames,
Definition analyzer_provider.hpp:12
constexpr bool is_supported_audio_sample_rate(double sample_rate_hz) noexcept
Definition audio_io_timing.hpp:61
constexpr std::uint64_t saturating_frame_add(std::uint64_t lhs, std::uint64_t rhs) noexcept
Definition audio_io_timing.hpp:67
AudioTimestampDomain
Clock domain used by the backend's audio timestamps.
Definition audio_io_timing.hpp:10
@ monotonic_host_time
Definition audio_io_timing.hpp:13
@ device_sample_frames
Definition audio_io_timing.hpp:12
@ unspecified
Definition audio_io_timing.hpp:11
AudioTimingSource
Authority behind the reported I/O timing.
Definition audio_io_timing.hpp:17
@ os_estimate
Definition audio_io_timing.hpp:20
@ device_clock
Definition audio_io_timing.hpp:19
@ unspecified
Definition audio_io_timing.hpp:18
@ user_calibration
Definition audio_io_timing.hpp:21
AudioTimingConfidence
How strongly callers may rely on the reported values.
Definition audio_io_timing.hpp:25
@ estimated
Definition audio_io_timing.hpp:27
@ calibrated
Definition audio_io_timing.hpp:29
@ unavailable
Definition audio_io_timing.hpp:26
@ reported
Definition audio_io_timing.hpp:28
@ unavailable
Definition analyzer_provider.hpp:68
constexpr std::optional< LatencySnapshot > make_latency_snapshot(const AudioIoTiming &timing, std::uint64_t graph_latency_frames, double graph_sample_rate_hz) noexcept
Compose I/O timing with a graph total obtained from the graph's public latency accessor.
Definition audio_io_timing.hpp:108
constexpr std::optional< std::uint64_t > next_calibration_generation(std::uint64_t generation) noexcept
Definition audio_io_timing.hpp:74
Immutable control-thread snapshot of one audio route's I/O timing.
Definition audio_io_timing.hpp:41
AudioTimingSource timestamp_source
Definition audio_io_timing.hpp:53
std::optional< std::uint32_t > input_safety_offset_frames
Definition audio_io_timing.hpp:44
std::uint64_t calibration_generation
Definition audio_io_timing.hpp:58
std::optional< std::uint32_t > io_buffer_frames
Frames in each CoreAudio I/O cycle.
Definition audio_io_timing.hpp:50
AudioTimestampDomain timestamp_domain
Definition audio_io_timing.hpp:52
std::uint64_t route_instance_token
Process-local identity of the AudioDevice instance that minted this report.
Definition audio_io_timing.hpp:57
std::optional< std::uint32_t > output_latency_frames
Definition audio_io_timing.hpp:43
std::optional< std::uint32_t > input_latency_frames
Definition audio_io_timing.hpp:42
std::optional< std::uint32_t > output_safety_offset_frames
Definition audio_io_timing.hpp:45
double sample_rate_hz
Definition audio_io_timing.hpp:51
AudioTimingConfidence confidence
Definition audio_io_timing.hpp:54
Control-thread composition of backend I/O timing with the graph's already computed total latency.
Definition audio_io_timing.hpp:85
constexpr bool is_current_for(const AudioIoTiming &timing) const noexcept
Whether this snapshot still describes the route calibration supplied by the backend.
Definition audio_io_timing.hpp:96
std::optional< std::uint64_t > input_placement_offset_frames
Definition audio_io_timing.hpp:89
double sample_rate_hz
Definition audio_io_timing.hpp:87
std::optional< std::uint64_t > output_scheduling_offset_frames
Definition audio_io_timing.hpp:91
AudioIoTiming audio_io
Definition audio_io_timing.hpp:86
std::uint64_t graph_latency_frames
Definition audio_io_timing.hpp:88
std::optional< std::uint64_t > monitoring_latency_frames
Definition audio_io_timing.hpp:90