import { Observable } from 'rxjs';
import { Call } from '../Call';
import { CameraDirection, CameraManagerState } from './CameraManagerState';
import { DeviceManager } from './DeviceManager';
import { VideoSettingsResponse } from '../gen/coordinator';
import { DevicePersistenceOptions } from './devicePersistence';
export declare class CameraManager extends DeviceManager<CameraManagerState> {
    private targetResolution;
    /**
     * Constructs a new CameraManager.
     *
     * @param call the call instance.
     * @param devicePersistence the device persistence preferences to use.
     */
    constructor(call: Call, devicePersistence: Required<DevicePersistenceOptions>);
    private isDirectionSupportedByDevice;
    /**
     * Select the camera direction.
     *
     * @param direction the direction of the camera to select.
     * @param options additional direction selection options.
     */
    selectDirection(direction: Exclude<CameraDirection, undefined>, options?: {
        enableCamera?: boolean;
    }): Promise<void>;
    /**
     * Flips the camera direction: if it's front it will change to back, if it's back, it will change to front.
     *
     * Note: if there is no available camera with the desired direction, this method will do nothing.
     * @returns
     */
    flip(): Promise<void>;
    /**
     * @internal
     */
    selectTargetResolution(resolution: {
        width: number;
        height: number;
    }): Promise<void>;
    /**
     * Applies the video settings to the camera.
     *
     * @param settings the video settings to apply.
     * @param publish whether to publish the stream after applying the settings.
     */
    apply(settings: VideoSettingsResponse, publish: boolean): Promise<void>;
    protected getDevices(): Observable<MediaDeviceInfo[]>;
    protected getResolvedConstraints(constraints: MediaTrackConstraints): MediaTrackConstraints;
    protected getStream(constraints: MediaTrackConstraints): Promise<MediaStream>;
}
