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

◆ read_exported_contours()

std::vector< Kinesis::Vision::Contour > MayaFlux::Yantra::VisionGpuExecutor::read_exported_contours ( const Kinesis::Vision::VisionResult &  result)
static

Host contours decoded from result.buffers.contours, or empty.

Always in compacted (unsorted) order; sort the returned list yourself if you need top-K-by-area order. For occasional host access, not per-frame use. Valid for one more run after the result was delivered.

Definition at line 489 of file VisionComponentsDispatch.cpp.

491{
492 const auto& view = result.buffers.contours;
493 if (!view.meta || !view.meta->mapped_ptr || !view.points || !view.points->mapped_ptr
494 || !view.area_perim || !view.area_perim->mapped_ptr) {
495 return {};
496 }
497
498 const auto* meta = static_cast<const glm::uvec4*>(view.meta->mapped_ptr);
499 const auto* points = static_cast<const glm::vec2*>(view.points->mapped_ptr);
500 const auto* area_perim = static_cast<const glm::vec2*>(view.area_perim->mapped_ptr);
501
502 const size_t meta_capacity = view.meta->size_bytes / sizeof(glm::uvec4);
503 const size_t area_capacity = view.area_perim->size_bytes / sizeof(glm::vec2);
504 const size_t points_capacity = view.points->size_bytes / sizeof(glm::vec2);
505 const auto count = static_cast<uint32_t>(
506 std::min<size_t>({ view.count, meta_capacity, area_capacity }));
507 const auto points_written = static_cast<uint32_t>(std::min<size_t>(view.points_written, points_capacity));
508
509 std::vector<Kinesis::Vision::Contour> out;
510 out.reserve(count);
511 for (uint32_t idx = 0; idx < count; ++idx) {
512 const auto& m = meta[idx];
513 if (m.y < 3U)
514 continue;
515 if (m.x > points_written || m.y > points_written - m.x)
516 continue;
517
518 std::vector<glm::vec2> pts(points + m.x, points + m.x + m.y);
519 const glm::vec2 ap = area_perim[idx];
520 out.push_back({ .points = std::move(pts), .area = ap.x, .perimeter = ap.y, .parent_label = m.z, .label_id = m.w });
521 }
522 return out;
523}
std::vector< glm::vec2 > * points
std::vector< float > * out
size_t count

References MayaFlux::Kinesis::Vision::VisionResult::buffers, MayaFlux::Kinesis::Vision::BufferOutputs::contours, count, MayaFlux::Kinesis::Vision::ContoursBufferView::meta, out, and points.