import { AudioFrame } from './audio_frame.cjs';
import { VideoFrame } from './video_frame.cjs';
import '@livekit/rtc-ffi-bindings';

type FrameProcessorStreamInfo = {
    roomName: string;
    participantIdentity: string;
    publicationSid: string;
};
type FrameProcessorCredentials = {
    token: string;
    url: string;
};
declare const FrameProcessorSymbol: unique symbol;
declare function isFrameProcessor<T extends FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame> | unknown>(maybeProcessor: unknown): maybeProcessor is T extends FrameProcessor<AudioFrame> ? FrameProcessor<AudioFrame> : T extends FrameProcessor<VideoFrame> ? FrameProcessor<VideoFrame> : FrameProcessor<AudioFrame> | FrameProcessor<VideoFrame>;
declare abstract class FrameProcessor<Frame extends VideoFrame | AudioFrame> {
    readonly symbol: symbol;
    abstract isEnabled(): boolean;
    abstract setEnabled(enabled: boolean): void;
    onStreamInfoUpdated(_info: FrameProcessorStreamInfo): void;
    onStreamInfoCleared(): void;
    onCredentialsUpdated(_credentials: FrameProcessorCredentials): void;
    onCredentialsCleared(): void;
    abstract process(frame: Frame): Frame;
    abstract close(): void;
}

export { FrameProcessor, type FrameProcessorCredentials, type FrameProcessorStreamInfo, FrameProcessorSymbol, isFrameProcessor };
