Module tracking

Source
Expand description

Point / area tracking (the Tracking pane): zero-mean normalised cross-correlation of a template patch over a search window, frame by frame, producing exactly the (x, y, t) point list a PathAsset holds — so a track can be saved as a project path and replayed onto a clip’s X/Y keyframes (Project::apply_path).

The job owns a thread and its own DecoderPool (same shape as every other worker here) and streams one point plus a progress fraction per frame; dropping the job hangs up the channel and the worker stops on its next send. The UI never blocks.

ponytail: the clip is tracked in its source frame decoded at project resolution, so the clip’s own transform is ignored — right for the usual full-frame clip. Render through engine::compose per frame if a scaled / rotated / nested clip ever has to track.

Structs§

TrackJob

Functions§

best_match
Best zero-mean NCC match for tpl (a patch of the same half-sizes) within search px of (cx, cy): the matched centre and its score in -1..=1. None when the template or every candidate window is flat — there is nothing to lock onto, and the caller keeps the previous position.
luma 🔒
Luma at (x, y), edge-clamped (the search window is allowed to hang off the frame).
patch
The (2*hw+1) x (2*hh+1) luma patch centred on (cx, cy).

Type Aliases§

Msg 🔒
One tracked frame: its point (canvas px relative to the centre, clip-local seconds) and how far through the clip the worker is.