import { Extension as Extension$1, VideoProcessor as VideoProcessor$1, IProcessorContext } from 'agora-rte-extension';
import { Player } from '@banuba/webar';

/** Same options as of Player.create(), see {@link https://docs.banuba.com/face-ar-sdk-v1/generated/typedoc/classes/Player.html#create} */
type VideoProcessorOptions = Parameters<(typeof Player)["create"]>[0];
/** Banuba WebAR extension for Agora RTC */
declare class Extension extends Extension$1<VideoProcessor> {
    private readonly _options;
    constructor(opts: VideoProcessorOptions);
    /** Checks if the browser is capable to perform AR processing */
    checkCompatibility(): boolean;
    protected _createProcessor(): VideoProcessor;
}
/** Banuba WebAR processor for Agora RTC */
declare class VideoProcessor extends VideoProcessor$1 {
    private readonly _player;
    private readonly _output;
    name: string;
    constructor(opts: VideoProcessorOptions);
    protected onTrack(track: MediaStreamTrack, ctx: IProcessorContext): Promise<void>;
    protected onEnableChange(): Promise<void>;
    /**
     * Adds AR modules from URL
     * @example
     * ```ts
     * // This is a syntax sugar over
     * // import { Module } from "@banuba/webar"
     * // const face_tracker = new Module("/path/to/face_tracker.zip")
     * // await processor.addModule(face_tracker)
     *
     * await processor.addModule("/path/to/face_tracker.zip")
     * ```
     */
    addModule(...urls: string[]): ReturnType<Player["addModule"]>;
    /**
     * Adds @banuba/webar Module to the processor
     *
     * See {@link https://docs.banuba.com/face-ar-sdk-v1/generated/typedoc/classes/Module.html} for more details.
     * @example
     * ```ts
     * import { Module } from "@banuba/webar"
     *
     * const face_tracker = new Module("/path/to/face_tracker.zip")
     *
     * await processor.addModule(face_tracker)
     * ```
     */
    addModule(...modules: Parameters<Player["addModule"]>): ReturnType<Player["addModule"]>;
    /**
     * Applies AR effect from URL
     * @example
  s
     */
    applyEffect(url: string): ReturnType<Player["applyEffect"]>;
    /**
     * Applies `@banuba/webar`'s Effect
     *
     * See {@link https://docs.banuba.com/face-ar-sdk-v1/generated/typedoc/classes/Effect.html} for more details.
     * @example
     * ```ts
     * import { Effect } from "@banuba/webar"
     *
     * const octopus = new Effect("/path/to/Octopus.zip")
     *
     * await processor.applyEffect(octopus)
     * ```
     */
    applyEffect(effect: Parameters<Player["applyEffect"]>[0]): ReturnType<Player["applyEffect"]>;
    /** Clears effect applied to the processor */
    clearEffect(): Promise<void>;
    /** Destroys the processor, clears all the resources used */
    destroy(): Promise<void>;
}

export { Extension, Extension as default };
