Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
offline_stretch_artifact.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <compare>
9#include <cstdint>
10#include <memory>
11#include <span>
12#include <vector>
13
14namespace pulp::playback {
15
17enum class OfflineStretchErrorCode : std::uint8_t;
18
19namespace detail {
20bool offline_stretch_frame_distance(std::int64_t start, std::int64_t end,
21 std::uint64_t& distance) noexcept;
24}
25
26inline constexpr std::uint32_t kOfflineStretchAlgorithmVersion = 1;
27
30 float max_time_ratio = 16.0f;
31 constexpr auto operator<=>(const OfflineStretchAlgorithmConfig&) const = default;
32};
33
51
54 std::shared_ptr<const audio::AudioFileData> audio;
55};
56
60 std::uint64_t document_revision = 0;
61 std::uint64_t program_generation = 0;
62 bool cache_hit = false;
63
64 bool matches(timeline::ItemId clip, timeline::ItemId project, std::uint64_t revision,
65 std::uint64_t generation) const noexcept {
66 return clip_id == clip && project_id == project && document_revision == revision &&
67 program_generation == generation;
68 }
69};
70
87
95
97 std::uint64_t max_input_frames = 100'000'000u;
98 std::uint64_t max_output_frames = 100'000'000u;
99 std::uint64_t max_input_bytes = 1024u * 1024u * 1024u;
100 std::uint64_t max_sample_rate_converter_bytes = 256u * 1024u * 1024u;
101 std::uint64_t max_scratch_allocation_bytes = 256u * 1024u * 1024u;
102 std::uint64_t max_output_bytes = 1024u * 1024u * 1024u;
103 std::uint64_t max_artifact_bytes = 512u * 1024u * 1024u;
104 std::uint64_t max_cache_bytes = 2u << 30u;
105 std::uint32_t max_cached_artifacts = 256;
106 constexpr auto operator<=>(const OfflineStretchLimits&) const = default;
107};
108
111 public:
112 std::shared_ptr<const OfflineStretchArtifact>
113 find(const OfflineStretchArtifactKey& key) const noexcept;
114 bool insert(std::shared_ptr<const OfflineStretchArtifact> artifact,
115 OfflineStretchLimits limits) noexcept;
116 void clear() noexcept;
117 void constrain(OfflineStretchLimits limits) noexcept;
118 std::uint64_t retained_bytes() const noexcept {
119 return retained_bytes_;
120 }
121 std::size_t size() const noexcept {
122 return artifacts_.size();
123 }
124
125 private:
126 std::vector<std::shared_ptr<const OfflineStretchArtifact>> artifacts_;
127 std::uint64_t retained_bytes_ = 0;
128};
129
130enum class OfflineStretchCompileStatus : std::uint8_t { Progress, Complete, Failed };
131
134 public:
141
142 OfflineStretchCompileStatus begin(const timeline::Clip& clip, const timeline::Project& project,
143 const timebase::CompiledTempoMap& tempo_map,
144 const DecodedAudioAsset& decoded,
145 OfflineStretchLimits limits = {},
146 OfflineStretchAlgorithmConfig algorithm = {},
147 std::uint32_t work_block_frames = 256,
148 OfflineStretchArtifactCache* cache = nullptr);
150
152 OfflineStretchError error() const noexcept;
153 bool cache_hit() const noexcept;
154 const OfflineStretchArtifactKey* key() const noexcept;
155 std::shared_ptr<const OfflineStretchArtifact> take() noexcept;
156
157 private:
158 struct Impl;
159 std::unique_ptr<Impl> impl_;
160};
161
162} // namespace pulp::playback
Control-thread-only bounded semantic artifact cache.
Definition offline_stretch_artifact.hpp:110
bool insert(std::shared_ptr< const OfflineStretchArtifact > artifact, OfflineStretchLimits limits) noexcept
void constrain(OfflineStretchLimits limits) noexcept
std::uint64_t retained_bytes() const noexcept
Definition offline_stretch_artifact.hpp:118
std::size_t size() const noexcept
Definition offline_stretch_artifact.hpp:121
std::shared_ptr< const OfflineStretchArtifact > find(const OfflineStretchArtifactKey &key) const noexcept
OfflineStretchCompileStatus step() noexcept
std::shared_ptr< const OfflineStretchArtifact > take() noexcept
OfflineStretchCompileJob(OfflineStretchCompileJob &&) noexcept
OfflineStretchCompileStatus status() const noexcept
OfflineStretchCompileStatus begin(const timeline::Clip &clip, const timeline::Project &project, const timebase::CompiledTempoMap &tempo_map, const DecodedAudioAsset &decoded, OfflineStretchLimits limits={}, OfflineStretchAlgorithmConfig algorithm={}, std::uint32_t work_block_frames=256, OfflineStretchArtifactCache *cache=nullptr)
const OfflineStretchArtifactKey * key() const noexcept
OfflineStretchError error() const noexcept
Durable SHA-256 identity for sealed media bytes.
Definition assets.hpp:24
FiniteTimeStretchFailure
Definition finite_time_stretch.hpp:25
Definition automation_program.hpp:17
bool offline_stretch_frame_distance(std::int64_t start, std::int64_t end, std::uint64_t &distance) noexcept
OfflineStretchErrorCode offline_stretch_error_code(audio::FiniteTimeStretchFailure failure) noexcept
Definition audio_renderer.hpp:20
@ Complete
Definition compile_executor.hpp:15
constexpr std::uint32_t kOfflineStretchAlgorithmVersion
Definition offline_stretch_artifact.hpp:26
@ None
Definition automation_recording.hpp:29
OfflineStretchCompileStatus
Definition offline_stretch_artifact.hpp:130
@ Progress
Definition offline_stretch_artifact.hpp:130
@ Failed
Definition offline_stretch_artifact.hpp:130
@ UnsupportedSampleRate
Definition audio_renderer.hpp:35
@ AssetMetadataMismatch
Definition audio_renderer.hpp:34
@ CapacityExceeded
Definition audio_renderer.hpp:38
OfflineStretchErrorCode
Definition offline_stretch_artifact.hpp:71
@ InvalidTempoSchedule
Definition offline_stretch_artifact.hpp:78
@ InvalidClip
Definition offline_stretch_artifact.hpp:73
@ ProcessorPrepareFailed
Definition offline_stretch_artifact.hpp:81
@ OutputTooLong
Definition offline_stretch_artifact.hpp:84
@ None
Definition offline_stretch_artifact.hpp:72
@ InvalidAlgorithmConfig
Definition offline_stretch_artifact.hpp:77
@ ProcessorProtocolError
Definition offline_stretch_artifact.hpp:85
@ SampleRateConverterPrepareFailed
Definition offline_stretch_artifact.hpp:80
@ MissingSource
Definition offline_stretch_artifact.hpp:74
@ InvalidRatio
Definition offline_stretch_artifact.hpp:82
@ OutputTooShort
Definition offline_stretch_artifact.hpp:83
Definition beat_division.hpp:11
Definition program_compiler.hpp:18
STL namespace.
Definition audio_renderer.hpp:52
Definition offline_stretch_artifact.hpp:28
float max_time_ratio
Definition offline_stretch_artifact.hpp:30
constexpr auto operator<=>(const OfflineStretchAlgorithmConfig &) const =default
std::uint32_t version
Definition offline_stretch_artifact.hpp:29
Definition offline_stretch_artifact.hpp:34
timeline::ContentHash source_content_hash
Definition offline_stretch_artifact.hpp:35
std::uint32_t channel_count
Definition offline_stretch_artifact.hpp:45
std::vector< timebase::TempoPoint > tempo_points
Definition offline_stretch_artifact.hpp:47
timebase::RationalRate source_sample_rate
Definition offline_stretch_artifact.hpp:39
timebase::TickPosition musical_tick_end
Definition offline_stretch_artifact.hpp:42
OfflineStretchAlgorithmConfig algorithm
Definition offline_stretch_artifact.hpp:46
std::uint64_t timeline_input_frame_count
Definition offline_stretch_artifact.hpp:43
timebase::RationalRate timeline_sample_rate
Definition offline_stretch_artifact.hpp:40
std::uint64_t target_frame_count
Definition offline_stretch_artifact.hpp:44
timeline::ContentHash decoded_content_hash
Definition offline_stretch_artifact.hpp:36
std::uint64_t source_start
Definition offline_stretch_artifact.hpp:37
std::uint64_t source_frame_count
Definition offline_stretch_artifact.hpp:38
timebase::TickPosition musical_tick_start
Definition offline_stretch_artifact.hpp:41
bool operator==(const OfflineStretchArtifactKey &) const =default
Definition offline_stretch_artifact.hpp:52
OfflineStretchArtifactKey key
Definition offline_stretch_artifact.hpp:53
std::shared_ptr< const audio::AudioFileData > audio
Definition offline_stretch_artifact.hpp:54
Definition offline_stretch_artifact.hpp:88
timeline::ItemId item
Definition offline_stretch_artifact.hpp:90
std::uint64_t actual
Definition offline_stretch_artifact.hpp:92
std::uint64_t limit
Definition offline_stretch_artifact.hpp:93
OfflineStretchErrorCode code
Definition offline_stretch_artifact.hpp:89
timeline::ItemId related_item
Definition offline_stretch_artifact.hpp:91
Definition offline_stretch_artifact.hpp:96
std::uint64_t max_output_frames
Definition offline_stretch_artifact.hpp:98
std::uint64_t max_output_bytes
Definition offline_stretch_artifact.hpp:102
std::uint64_t max_sample_rate_converter_bytes
Definition offline_stretch_artifact.hpp:100
std::uint64_t max_cache_bytes
Definition offline_stretch_artifact.hpp:104
std::uint32_t max_cached_artifacts
Definition offline_stretch_artifact.hpp:105
std::uint64_t max_input_frames
Definition offline_stretch_artifact.hpp:97
constexpr auto operator<=>(const OfflineStretchLimits &) const =default
std::uint64_t max_input_bytes
Definition offline_stretch_artifact.hpp:99
std::uint64_t max_artifact_bytes
Definition offline_stretch_artifact.hpp:103
std::uint64_t max_scratch_allocation_bytes
Definition offline_stretch_artifact.hpp:101
Definition offline_stretch_artifact.hpp:57
std::uint64_t document_revision
Definition offline_stretch_artifact.hpp:60
bool matches(timeline::ItemId clip, timeline::ItemId project, std::uint64_t revision, std::uint64_t generation) const noexcept
Definition offline_stretch_artifact.hpp:64
bool cache_hit
Definition offline_stretch_artifact.hpp:62
timeline::ItemId project_id
Definition offline_stretch_artifact.hpp:59
timeline::ItemId clip_id
Definition offline_stretch_artifact.hpp:58
std::uint64_t program_generation
Definition offline_stretch_artifact.hpp:61
Definition rational_time.hpp:14
Definition tick.hpp:61
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19