import type { GenericTrack } from "./container/Track";
import { ExtendedVideoFrame } from "./frame";
/**
 * @group Stream
 */
export declare abstract class MFXWritableStream<I> extends WritableStream {
    protected _eventTarget: EventTarget;
    abstract get identifier(): any;
    constructor(underlyingSink?: UnderlyingSink<I>, strategy?: QueuingStrategy<I>);
    dispatchEvent(event: Event): void;
    dispatchError(error: Error): void;
    addEventListener(type: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
    removeEventListener(type: string, callback: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
}
/**
 * @group Stream
 */
export declare abstract class MFXTransformStream<I, O> extends TransformStream {
    protected _track: GenericTrack<any>;
    protected _buffer: O[];
    protected _eventTarget: EventTarget;
    protected _controller: TransformStreamDefaultController<O>;
    protected _debug: boolean;
    abstract get identifier(): any;
    constructor(transformer?: Transformer<I, O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>);
    private _copy_buffer;
    get desiredSize(): number;
    get track(): GenericTrack<any>;
    setDebug(value: boolean): void;
    setTrack(track: GenericTrack<any>): this;
    queue(...items: O[]): Promise<void>;
    dispatchEvent(event: Event): void;
    dispatchError(error: Error): void;
    addEventListener(type: string, callback: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
    removeEventListener(type: string, callback: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
}
export declare class MFXBufferCopy<T> extends MFXWritableStream<T> {
    get identifier(): string;
    constructor(a: WritableStream<T>, b: WritableStream<T>);
}
/**
 * @group Video
 */
export declare class FrameTee extends MFXTransformStream<ExtendedVideoFrame, ExtendedVideoFrame> {
    get identifier(): string;
    constructor(ctx: (stream: ReadableStream<ExtendedVideoFrame>) => void);
}
/** @group Stream */
export declare class Void extends WritableStream<any> {
    constructor();
}
export declare class PassThroughStream<T> extends MFXTransformStream<T, T> {
    flushed: Promise<void>;
    get identifier(): string;
    constructor(transform?: (T: any) => T);
}
