Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
production_mode.hpp File Reference

How content is produced, and how honestly a render of it can be replayed. More...

#include <cstdint>
#include <optional>
#include <string_view>

Go to the source code of this file.

Classes

struct  pulp::timeline::ProductionDeclaration
 What a piece of content declares about its own production. More...

Namespaces

namespace  pulp
namespace  pulp::timeline

Enumerations

enum class  pulp::timeline::ProductionMode : std::uint8_t { pulp::timeline::ProductionMode::Synchronous , pulp::timeline::ProductionMode::Buffered }
 Where content is produced relative to the audio callback that consumes it. More...
enum class  pulp::timeline::ReproducibilityClass : std::uint8_t { pulp::timeline::ReproducibilityClass::Deterministic , pulp::timeline::ReproducibilityClass::Tolerance , pulp::timeline::ReproducibilityClass::Materialized , pulp::timeline::ReproducibilityClass::BestEffort }
 What a second render of the same document may claim about the first. More...
enum class  pulp::timeline::ProductionDeclarationErrorCode : std::uint8_t { pulp::timeline::ProductionDeclarationErrorCode::None , pulp::timeline::ProductionDeclarationErrorCode::SynchronousDeclaresLookahead , pulp::timeline::ProductionDeclarationErrorCode::BufferedDeclaresNoLookahead , pulp::timeline::ProductionDeclarationErrorCode::LookaheadExceedsLimit }
 Validation result for a ProductionDeclaration. More...

Functions

std::string_view pulp::timeline::production_mode_name (ProductionMode mode) noexcept
 Canonical wire name, stable across builds and safe to persist.
std::string_view pulp::timeline::reproducibility_class_name (ReproducibilityClass reproducibility) noexcept
 Canonical persisted name for a reproducibility class.
std::optional< ProductionMode > pulp::timeline::production_mode_from_name (std::string_view name) noexcept
 Parse a canonical wire name.
std::optional< ReproducibilityClass > pulp::timeline::reproducibility_class_from_name (std::string_view name) noexcept
 Parses a canonical reproducibility-class name and rejects unknown names.
std::uint8_t pulp::timeline::replay_strength (ReproducibilityClass reproducibility) noexcept
 Replay strength, ascending: BestEffort < Tolerance < Materialized < Deterministic.
ReproducibilityClass pulp::timeline::weakest (ReproducibilityClass left, ReproducibilityClass right) noexcept
 The weaker of two claims — the only correct way to aggregate a render that spans several classes.
bool pulp::timeline::is_bit_reproducible (ReproducibilityClass reproducibility) noexcept
 True when a second render is entitled to claim bit-equality with the first.
ProductionDeclarationErrorCode pulp::timeline::validate_production_declaration (const ProductionDeclaration &declaration) noexcept
 Validate a declaration. Returns None when the declaration is coherent.

Variables

constexpr std::uint64_t pulp::timeline::kMaxProductionLookaheadMs = 60'000
 Upper bound on a declared lookahead.

Detailed Description

How content is produced, and how honestly a render of it can be replayed.

These are declarations of intent, not scheduling policy. A production mode says whether content is produced in band with the audio callback or ahead of it; a reproducibility class says what a second render of the same document is entitled to claim about the first. Both travel with content so a replay, bounce, or diff can report which parts of a render are bit-reproducible and which are not, instead of asserting bit-equality over material that never promised it.

The declared lookahead is wall-clock milliseconds and is never latency. Production cost is wall-clock (decode time, a GPU round trip), so a lookahead expressed in musical ticks would silently shrink as tempo rises. A producer that needs musical context ("the next bar's chords") is declaring a compile context subscription, not a lookahead. Nothing here may reach a latency or delay-compensation computation: a lookahead is time a producer is given to work, not time a signal is delayed by.