import { Thread } from "@e280/comrade";
import { type StreamTargetChunk } from "mediabunny";
import { Machina } from "./parts/machina.js";
import { Compositor } from "./parts/compositor.js";
import { DecoderInput, DriverSchematic, Composition, EncoderInput, DecoderSource } from "./fns/schematic.js";
export type DriverOptions = {
    workerUrl: URL | string;
};
export declare class Driver {
    machina: Machina;
    thread: Thread<DriverSchematic>;
    compositor: Compositor;
    static setup(options?: DriverOptions): Promise<Driver>;
    constructor(machina: Machina, thread: Thread<DriverSchematic>, compositor: Compositor);
    hello(): Promise<void>;
    getAudioDuration(source: DecoderSource): Promise<number>;
    getVideoDuration(source: DecoderSource): Promise<number | undefined>;
    decodeVideo(input: DecoderInput): {
        readable: ReadableStream<VideoFrame>;
        /**
         * use this to stop decoding (premature interruption)
         * */
        cancel(): void;
    };
    decodeAudio(input: DecoderInput): {
        readable: ReadableStream<AudioData>;
        /**
         * use this to stop decoding (premature interruption)
         * */
        cancel(): void;
    };
    encode({ audio, video, config }: EncoderInput): {
        readable: ReadableStream<StreamTargetChunk>;
        done: Promise<void>;
    };
    composite(composition: Composition): Promise<VideoFrame>;
    resize(width: number, height: number): void;
}
