import { TaskEither } from '@eleven-am/fp';
import { MediaMetadata, VideoQuality } from './types';
export interface AdaptiveQualityResult {
    selectedQualities: VideoQuality[];
    reason: string;
    complexityScore: number;
}
/**
 * Analyzes video content and selects optimal quality levels
 * Prevents upscaling and adjusts bitrates based on content complexity
 */
export declare class AdaptiveQualitySelector {
    private readonly qualityLevels;
    /**
     * Select optimal quality levels based on source video characteristics
     */
    selectOptimalQualities(metadata: MediaMetadata): TaskEither<AdaptiveQualityResult>;
    /**
     * Get recommended quality based on network conditions
     */
    getRecommendedQuality(availableBandwidth: number, qualities: VideoQuality[]): TaskEither<VideoQuality>;
    /**
     * Analyze video complexity based on metadata - TaskEither version
     */
    private analyzeComplexityTask;
    private calculateBitrateFactor;
    private adjustScoreForBitrate;
    private adjustScoreForFrameRate;
    private adjustScoreForCodec;
    private adjustScoreForDuration;
    private normalizeScore;
    /**
     * Filter quality levels to prevent upscaling
     */
    private filterQualitiesBySource;
    /**
     * Adjust bitrates based on content complexity
     */
    private adjustBitratesForComplexity;
    /**
     * Add original quality option for high-quality sources
     */
    private addOriginalQualityIfNeeded;
    /**
     * Generate human-readable reason for quality selection
     */
    private generateSelectionReason;
}
//# sourceMappingURL=adaptiveQualitySelector.d.ts.map