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

◆ sample_points()

std::vector< glm::vec4 > MayaFlux::Yantra::VisionExtractor::sample_points ( const std::shared_ptr< Core::VKImage > &  source,
const Kinesis::Vision::VisionAnalysis &  analysis,
uint32_t  radius,
uint32_t  source_w,
uint32_t  source_h 
)

Mean over a (2 * radius + 1) squared window at every keypoint, else every track, in one dispatch, in point order.

With flow as the source this is the motion under each point, with the frame the colour under it.

Definition at line 539 of file VisionExtractor.cpp.

544{
545 const auto points = points_for_analysis(analysis);
546 if (points.empty())
547 return {};
548
549 const auto count = static_cast<uint32_t>(points.size());
550
551 auto& ctx = reduce_context();
552 use_shader(ctx, "point_sample.comp.spv", k_wg_reduce, sizeof(PointSamplePC));
553 ctx.stage_image(source);
554 ctx.set_binding_data(3, std::span<const float>(
555 reinterpret_cast<const float*>(points.data()), points.size() * 2));
556 ctx.set_push_constants(PointSamplePC {
557 .count = count, .radius = radius, .src_w = source_w, .src_h = source_h });
558
559 const auto raw = dispatch_reduce(ctx, count, static_cast<size_t>(count) * sizeof(glm::vec4));
560 std::vector<glm::vec4> out;
561 if (raw.size() < static_cast<size_t>(count) * 4)
562 return out;
563
564 out.resize(count);
565 std::memcpy(out.data(), raw.data(), static_cast<size_t>(count) * sizeof(glm::vec4));
566 return out;
567}
std::vector< glm::vec2 > * points
float radius
std::vector< float > * out
size_t count
std::vector< glm::vec2 > points_for_analysis(const Kinesis::Vision::VisionAnalysis &analysis) const
TextureExecutionContext & reduce_context()

References count, out, points, points_for_analysis(), radius, and reduce_context().

Referenced by run_operation().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: