import { Ms } from "../../../../units/ms.js";
import { Driver } from "../../../../driver/driver.js";
import { TimelineFile } from "../../../parts/basics.js";
import { DecoderSource } from "../../../../driver/fns/schematic.js";
type StreamCursor<T> = {
    next(target: number): Promise<T | undefined>;
    cancel(): Promise<void>;
};
type VideoFrameCursor = StreamCursor<VideoFrame>;
declare abstract class BaseVisualSampler {
    #private;
    protected driver: Driver;
    protected resolveMedia: (hash: string) => DecoderSource;
    protected timeline: TimelineFile;
    constructor(driver: Driver, resolveMedia: (hash: string) => DecoderSource, timeline: TimelineFile);
    protected abstract createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor;
    protected sample(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
    cancel(): Promise<void>;
}
/**
 * forward-only frame cursor optimized for export purposes.
 * it uses mediabunny internally so the support for non-clients
 * should be done from mediabunny custom decoder/encoder
 */
export declare class CursorVisualSampler extends BaseVisualSampler {
    #private;
    next(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
    protected createCursor(source: DecoderSource, startUs: number, _endUs: number): VideoFrameCursor;
}
export declare class ReverseCursorVisualSampler extends BaseVisualSampler {
    #private;
    next(timecode: Ms): Promise<import("../../../../driver/fns/schematic.js").Layer[]>;
    protected createCursor(source: DecoderSource, startUs: number, endUs: number): VideoFrameCursor;
}
export {};
