Get data for a specific region.
297{
298 std::optional<std::vector<DataVariant>> result;
301 return;
302
304 if (!
ptr || bytes == 0)
305 return;
306
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 };
315 } else if (element_size == 4) {
316 const std::span<const float> src {
317 reinterpret_cast<const float*
>(
ptr), bytes /
sizeof(
float)
318 };
320 } else {
321 const std::span<const uint8_t> src {
ptr, bytes };
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,...)
Memory::Seqlock m_data_lock
std::vector< DataVariant > m_data
Portal::Graphics::ImageFormat m_format
ContainerDataStructure m_structure
@ 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.
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.
std::vector< DataDimension > dimensions