/** * Keyframe sampling + easing curve helpers. * * Used by file-only ffmpeg helpers (Ken-Burns zoompan, speed-ramp curves) * and by tests that want to verify FCPXML emission lines up with the * mathematical sampled trajectory. * * Convention: t is normalized 0..1. Curves are pure functions of t so they * compose cleanly. easeIn / easeOut use simple quadratic curves; smooth is * smoothstep (3t² − 2t³). Linear is the identity. */ import type { Keyframe } from "./fcpxml.js"; /** Linear interpolation. f(t) = t. */ export declare function linear(t: number): number; /** Quadratic ease-in. f(t) = t². Slow start, fast finish. */ export declare function easeIn(t: number): number; /** Quadratic ease-out. f(t) = 1 − (1−t)². Fast start, slow finish. */ export declare function easeOut(t: number): number; /** Smoothstep. f(t) = 3t² − 2t³. Symmetric ease-in-out. */ export declare function smooth(t: number): number; /** Resolve an "interp" string to its curve function. */ export declare function curveFor(interp: "linear" | "easeIn" | "easeOut" | "smooth" | undefined): (t: number) => number; /** * Sample a scalar keyframe sequence at a given clip-relative frame. * * Behaviour: * - Empty list → throws (caller bug). * - Single keyframe → returns its value (constant). * - Frame before first kf → first value (clamp). * - Frame after last kf → last value (clamp). * - Otherwise → interpolate between the two surrounding kfs using the * LEFT keyframe's `interp` setting. */ export declare function sampleCurve(kfs: Keyframe[], frame: number, _fps: number): number; //# sourceMappingURL=keyframes.d.ts.map