import { ITuningConfig } from '../utils/tuningConfig';
import { Kbps, Milliseconds, IRectangle, type ExactVideoQuality, QualityLimits, IComponentLogger } from '@vkontakte/videoplayer-shared';
import { IAudioTrack, IBaseTrack, IVideoTrack } from '../player/types';
interface IConstraints<T extends IBaseTrack> {
    container?: IRectangle;
    estimatedThroughput?: Kbps;
    tuning: ITuningConfig['autoTrackSelection'];
    limits?: QualityLimits;
    reserve?: Kbps;
    playbackRate?: number;
    forwardBufferHealth?: number;
    current?: T;
    visible?: boolean;
    history?: TrackHistory<T>;
    droppedVideoMaxQualityLimit?: ExactVideoQuality;
    stallsVideoMaxQualityLimit?: ExactVideoQuality;
    stallsPredictedThroughput?: Kbps;
    abrLogger: IComponentLogger;
    panelSize?: IRectangle;
}
export declare class TrackHistory<T extends IBaseTrack> {
    last: T | undefined;
    history: Record<IBaseTrack['id'], Milliseconds>;
    recordSelection(track: T): void;
    recordSwitch(track: T | undefined): void;
    clear(): void;
}
export declare const defaultEmptyArrayErrorMessage = "Assertion \"ABR Tracks is empty array\" failed";
export declare const getMinPossibleAudioForVideoOld: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
export declare const getMinPossibleAudioForVideoNew: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize, }: IConstraints<IVideoTrack>) => IVideoTrack;
export declare const autoSelectVideoTrackOld: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize, }: IConstraints<IVideoTrack>) => IVideoTrack;
export declare const autoSelectAudioTrackForVideoOld: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput, }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
export declare const autoSelectAudioTrackForVideoNew: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput, }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
export {};
