9 throw std::invalid_argument(
"Container cannot be null");
22 container->mark_ready_for_processing(
true);
48 cache.
load_time = std::chrono::steady_clock::now();
51 }
catch (
const std::exception& e) {
62 for (
auto& pos : position) {
67 for (
size_t dim = 0; dim < std::min(position.size(), region->
loop_start.size()); ++dim) {
68 if (position[dim] >= region->
loop_end[dim]) {
75 for (
auto& pos : position) {
76 if (pos >= frame_count) {
77 pos = frame_count - 1;
87 if (output_data.size() < required_shape[1]) {
88 output_data.resize(required_shape[1],
DataVariant {});
91 for (
auto& data : output_data) {
92 std::visit([required_shape](
auto& dt) {
93 if (dt.size() < required_shape[0]) {
94 dt.resize(required_shape[0]);
virtual void cache_region_if_needed(const RegionSegment &segment, const std::shared_ptr< SignalSourceContainer > &container)
Cache a region's data if beneficial and not already cached.
std::unique_ptr< RegionCacheManager > m_cache_manager
virtual void organize_container_data(std::shared_ptr< SignalSourceContainer > container)=0
Organize container data into structured regions.
virtual bool advance_position(std::vector< uint64_t > &position, uint64_t steps=1, const OrganizedRegion *region=nullptr)
Advance position according to memory layout and looping.
virtual void ensure_output_dimensioning(std::vector< DataVariant > &output_data, const std::vector< uint64_t > &required_shape)
Ensure output data is properly dimensioned for region extraction.
ContainerDataStructure m_structure
void on_detach(std::shared_ptr< SignalSourceContainer > container) override
Detach this processor from its container.
void on_attach(std::shared_ptr< SignalSourceContainer > container) override
Attach this processor to a signal source container.
std::vector< OrganizedRegion > m_organized_regions
std::vector< uint64_t > m_current_position
std::weak_ptr< SignalSourceContainer > m_container_weak
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
static size_t get_frame_size(const std::vector< DataDimension > &dimensions)
Extract the size of non time dimensions (channel, spatial, frequency)
static size_t get_frame_count(const std::vector< DataDimension > &dimensions)
Extract frame count from video dimensions.
std::vector< uint64_t > loop_start
Loop start coordinates.
std::vector< uint64_t > loop_end
Loop end coordinates.
A structured audio region with metadata and transition information.
Region source_region
Region this cache corresponds to.
std::vector< DataVariant > data
Cached data.
std::chrono::steady_clock::time_point load_time
When cache was loaded.
Stores cached data for a region, with metadata for cache management.
Region source_region
Associated region.
uint64_t get_total_elements() const
Get the total number of elements in the segment.
Represents a discrete segment of audio data with caching capabilities.