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

◆ get_region_data()

std::vector< DataVariant > MayaFlux::Kakshya::VideoStreamContainer::get_region_data ( const Region region) const
overridevirtual

Get data for a specific region.

Parameters
regionThe region to extract data from
Returns
std::vector<DataVariant> containing the region's data

Implements MayaFlux::Kakshya::NDDataContainer.

Definition at line 296 of file VideoStreamContainer.cpp.

297{
298 std::optional<std::vector<DataVariant>> result;
300 if (m_data.empty())
301 return;
302
303 auto [ptr, bytes] = variant_bytes(m_data[0]);
304 if (!ptr || bytes == 0)
305 return;
306
307 const size_t element_size = storage_element_size(m_format);
308
309 try {
310 if (element_size == 2) {
311 const std::span<const uint16_t> src {
312 reinterpret_cast<const uint16_t*>(ptr), bytes / sizeof(uint16_t)
313 };
314 result = { extract_nd_region<uint16_t>(src, region, m_structure.dimensions) };
315 } else if (element_size == 4) {
316 const std::span<const float> src {
317 reinterpret_cast<const float*>(ptr), bytes / sizeof(float)
318 };
319 result = { extract_nd_region<float>(src, region, m_structure.dimensions) };
320 } else {
321 const std::span<const uint8_t> src { ptr, bytes };
322 result = { extract_nd_region<uint8_t>(src, region, m_structure.dimensions) };
323 }
324 } catch (const std::exception& e) {
326 "VideoStreamContainer::get_region_data extraction failed: {}", e.what());
327 }
328 });
329
330 return result.value_or(std::vector<DataVariant> {});
331}
#define MF_WARN(comp, ctx,...)
const uint8_t * ptr
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
std::pair< const uint8_t *, size_t > variant_bytes(const DataVariant &v)
Get a pointer to the raw bytes of a DataVariant and its size.
Definition DataUtils.cpp:95
size_t storage_element_size(ImageFormat format)
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 MayaFlux::Journal::ContainerProcessing, MayaFlux::Kakshya::ContainerDataStructure::dimensions, MayaFlux::Journal::Kakshya, m_data, m_data_lock, m_format, m_structure, MF_WARN, ptr, MayaFlux::Kakshya::storage_element_size(), and MayaFlux::Kakshya::variant_bytes().

+ Here is the call graph for this function: