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

◆ get_frame_typed()

auto MayaFlux::Kakshya::TextureContainer::get_frame_typed ( uint64_t  frame_index) const -> DataSpanVariant
private

Definition at line 822 of file TextureContainer.cpp.

823{
824 if (frame_index >= m_data.size()) {
825 return { std::span<const uint8_t> {} };
826 }
827
828 const size_t layer_elems = static_cast<size_t>(m_width) * m_height * m_channels;
829 DataSpanVariant out { std::span<const uint8_t> {} };
830 seqlock_read_void(m_slot_locks[frame_index], 8, [&] {
831 out = std::visit(
832 [&](const auto& vec) -> DataSpanVariant {
833 using T = typename std::decay_t<decltype(vec)>::value_type;
834 if constexpr (std::is_same_v<T, uint8_t> || std::is_same_v<T, uint16_t> || std::is_same_v<T, float>) {
835 const size_t nn = std::min(layer_elems, vec.size());
836 return DataSpanVariant(std::span<const T>(vec.data(), nn));
837 } else {
838 return { std::span<const uint8_t> {} };
839 }
840 },
841 m_data[frame_index]);
842 });
843 return out;
844}
typename detail::span_const_from_vector_variant< DataVariant >::type DataSpanVariant
Definition NDData.hpp:657
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