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

◆ get_frames()

void MayaFlux::Kakshya::WindowContainer::get_frames ( std::span< double >  output,
uint64_t  start_frame,
uint64_t  num_frames 
) const
overridevirtual

Get multiple frames efficiently.

Parameters
outputBuffer to write frames into
start_frameFirst frame index
num_framesNumber of frames to retrieve

Implements MayaFlux::Kakshya::NDDataContainer.

Definition at line 591 of file WindowContainer.cpp.

592{
593 std::shared_lock lock(m_data_mutex);
594
595 const uint64_t h = m_structure.get_height();
596 if (start_frame >= h || output.empty() || m_processed_data.empty()) {
597 std::ranges::fill(output, 0.0);
598 return;
599 }
600
601 const auto* pixels = std::get_if<std::vector<uint8_t>>(&m_processed_data[0]);
602 if (!pixels || pixels->empty()) {
603 std::ranges::fill(output, 0.0);
604 return;
605 }
606
607 const uint64_t w = m_structure.get_width();
608 const uint64_t c = m_structure.get_channel_count();
609 const uint64_t row_elems = w * c;
610 const uint64_t frames_to_copy = std::min(num_frames, h - start_frame);
611 const uint64_t elems_to_copy = std::min(frames_to_copy * row_elems,
612 static_cast<uint64_t>(output.size()));
613
614 const uint64_t src_offset = start_frame * row_elems;
615 for (uint64_t i = 0; i < elems_to_copy; ++i)
616 output[i] = static_cast<double>((*pixels)[src_offset + i]) / 255.0;
617
618 if (elems_to_copy < output.size())
619 std::fill(output.begin() + elems_to_copy, output.end(), 0.0);
620}
uint32_t h
Definition InkPress.cpp:25
const std::vector< float > * pixels
void lock() override
Acquire a lock for thread-safe access.
std::vector< DataVariant > m_processed_data
static uint64_t get_height(const std::vector< DataDimension > &dimensions)
Extract height from image/video dimensions.
static uint64_t get_channel_count(const std::vector< DataDimension > &dimensions)
Extract channel count from dimensions.
static uint64_t get_width(const std::vector< DataDimension > &dimensions)
Extract width from image/video dimensions.

References MayaFlux::Kakshya::ContainerDataStructure::get_channel_count(), MayaFlux::Kakshya::ContainerDataStructure::get_height(), MayaFlux::Kakshya::ContainerDataStructure::get_width(), h, lock(), m_data_mutex, m_processed_data, m_structure, and pixels.

+ Here is the call graph for this function: