/// <reference types="dom-webcodecs" />
import { ModuleType as FF, FrameInfo, StreamInfo, DataFormat } from './types/ffmpeg';
declare type WebPacket = EncodedVideoChunk | EncodedAudioChunk;
declare type WebFrame = VideoFrame | AudioData;
declare type WebEncoder = VideoEncoder | AudioEncoder;
declare type WebDecoder = VideoDecoder | AudioDecoder;
export declare class Packet {
    FFPacket?: FF['Packet'];
    WebPacket?: WebPacket;
    dts: number;
    mediaType: 'video' | 'audio';
    constructor(pkt: FF['Packet'] | WebPacket, dts: number, mediaType: 'video' | 'audio');
    get size(): number;
    get duration(): number;
    toFF(): import("./types/ffmpeg").Packet;
    toWeb(): WebPacket;
    close(): void;
}
export declare class Frame {
    #private;
    FFFrame?: FF['Frame'];
    WebFrame?: WebFrame;
    constructor(frame: FF['Frame'] | WebFrame | undefined, name: string);
    get name(): string;
    get pts(): number;
    get frameInfo(): FrameInfo | {
        format: string;
        height: number;
        width: number;
        sampleRate: number;
        channels: number;
        channelLayout: string;
    };
    toFF(): Promise<import("./types/ffmpeg").Frame>;
    toWeb(frameRate: number): WebFrame;
    clone(): Frame;
    close(): void;
}
export declare class Encoder {
    #private;
    encoder: FF['Encoder'] | WebEncoder;
    streamInfo: StreamInfo;
    outputs: WebPacket[];
    /**
     * @param useWebCodecs check `Encoder.isWebCodecsSupported` before contructor if `true`
     */
    constructor(streamInfo: StreamInfo, useWebCodecs: boolean, muxFormat: string);
    static isWebCodecsSupported(streamInfo: StreamInfo): Promise<boolean>;
    toSupportedFormat(dataFormat: DataFormat): DataFormat;
    get FFEncoder(): import("./types/ffmpeg").Encoder | undefined;
    encode(frame: Frame): Promise<Packet[]>;
    flush(): Promise<Packet[]>;
    close(): void;
}
export declare class Decoder {
    #private;
    decoder: FF['Decoder'] | WebDecoder;
    outputs: WebFrame[];
    streamInfo: StreamInfo;
    /**
     * @param useWebCodecs check `Decoder.isWebCodecsSupported` before contructor if `true`
     */
    constructor(demuxer: FF['Demuxer'] | null, name: string, streamInfo: StreamInfo, useWebCodecs?: boolean);
    static isWebCodecsSupported(streamInfo: StreamInfo): Promise<boolean>;
    get mediaType(): "video" | "audio";
    decode(pkt: Packet): Promise<Frame[]>;
    flush(): Promise<Frame[]>;
    close(): void;
}
export {};
