MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ get_frame_typed_as()

template<typename T >
auto MayaFlux::Kakshya::TextureContainer::get_frame_typed_as ( uint64_t  frame_index) const -> std::span<const T>
private

Definition at line 1044 of file TextureContainer.cpp.

1045{
1046 if (frame_index >= m_data.size())
1047 return {};
1048
1049 ensure_cpu(static_cast<uint32_t>(frame_index));
1050
1051 std::span<const T> result;
1052 seqlock_read_void(m_slot_locks[frame_index], 8, [&] {
1053 const auto* vec = std::get_if<std::vector<T>>(&m_data[frame_index]);
1054 if (!vec || vec->empty())
1055 return;
1056 const size_t layer_elems = static_cast<size_t>(m_width) * m_height * m_channels;
1057 const size_t n = std::min(layer_elems, vec->size());
1058 result = std::span<const T>(vec->data(), n);
1059 });
1060
1061 return result;
1062}
void ensure_cpu(uint32_t layer) const
Download a GPU-held layer into m_data before a CPU read.
bool seqlock_read_void(const Seqlock &lock, uint32_t max_attempts, Fn &&fn)
Invoke a void read functor under a Seqlock with a bounded retry count.
Definition SeqLock.hpp:268