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

◆ get_frames_typed_as()

template<typename T >
void MayaFlux::Kakshya::TextureContainer::get_frames_typed_as ( std::span< T >  output,
uint64_t  start_frame,
uint64_t  num_frames 
) const
private

Definition at line 1048 of file TextureContainer.cpp.

1049{
1050 const size_t layer_elems = static_cast<size_t>(m_width) * m_height * m_channels;
1051 size_t out_idx = 0;
1052
1053 for (uint64_t layer = start_frame;
1054 layer < start_frame + num_frames && layer < m_data.size() && out_idx < output.size();
1055 ++layer) {
1056 seqlock_read_void(m_slot_locks[layer], 8, [&] {
1057 const auto* vec = std::get_if<std::vector<T>>(&m_data[layer]);
1058 if (!vec || vec->empty())
1059 return;
1060 const size_t copy_n = std::min(layer_elems, std::min(vec->size(), output.size() - out_idx));
1061 std::copy_n(vec->begin(), static_cast<std::ptrdiff_t>(copy_n), output.begin() + static_cast<std::ptrdiff_t>(out_idx));
1062 out_idx += copy_n;
1063 });
1064 }
1065
1066 if (out_idx < output.size()) {
1067 std::fill(output.begin() + static_cast<std::ptrdiff_t>(out_idx), output.end(), T {});
1068 }
1069}
std::shared_ptr< Core::VKImage > output
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:222

References output.