// Metro module 4299 (f4300). import { VIDEO_QUALITY_FRAMERATE, VIDEO_QUALITY_FRAMERATE_MUTED, VIDEO_QUALITY_FRAMERATE_MUTED_2, defaultVideoQualityOptions } from "./Module4250"; class MediaSinkWantsLadder { constructor(r4 = defaultVideoQualityOptions) { const prototype = new.target.prototype; const videoBudget = r4.videoBudget; const { width, height } = videoBudget; if (!(width <= 0) && !(height <= 0)) { const r11 = { __proto__: prototype }; r11.pixelBudget = width * height; r11.ladder = MediaSinkWantsLadder.calculateLadder(r11.pixelBudget); r11.orderedLadder = MediaSinkWantsLadder.calculateOrderedLadder(r11.ladder); return r11; } throw new Error("Invalid argument"); } getMaxSinkValue(a0, r9 = 0) { if (a0 < 0) { throw new Error("getMaxSinkValue: Requested " + a0); } let wantValue = this.orderedLadder[0].wantValue; for (const item of this.orderedLadder) { const { pixelCount, wantValue: wantValue2 } = item; if (!(r9 > 0 && r9 < pixelCount)) { if (pixelCount * a0 > this.pixelBudget) { break; } wantValue = wantValue2; continue; } wantValue = wantValue2; break; } return wantValue; } getResolution(a0) { let r2 = null; for (const item of this.orderedLadder) { if (a0 >= item.wantValue) { r2 = item; continue; } break; } let r19 = r2; if (r19 == null) { r19 = this.orderedLadder[0]; } return { width: r19.width, height: r19.height, budgetPortion: r19.budgetPortion, mutedFramerate: r19.mutedFramerate, framerate: r19.framerate }; } static calculateLadder(a0) { let r34; const set = new Set([0, 4, 8, 10]); const r8 = []; let r38 = 1; while (true) { const width = 16 * r38 / 9; const r40 = set.has(width % 16); const height = r38; if (r40 && set.has(height % 16)) { const pixelCount = width * height; r8.push({ pixelCount, width, height, budgetPortion: pixelCount / a0, wantValue: 0 }); } r38 = height + 1; if (!(r38 < 4096)) { const r48 = {}; let r49 = 100; let r52 = 1; let r53 = 0; loop6: while (true) { let r54 = 0; let height2 = 0; let budgetPortion = 0; let r19 = r8[Symbol.iterator](); const next = r19.next; const r59 = r52; const r20 = r49; let r60 = r53; while (true) { const r61 = r19 === void 0 ? void 0 : (r34 = next.call(r19)).done ? r19 = void 0 : r34.value; if (r19 !== void 0) { try { if (!(r61.pixelCount * r59 > a0)) { r54 = r61.width; height2 = r61.height; budgetPortion = r61.budgetPortion; continue; } } catch (r67) { if (r19 !== void 0 && typeof r19.return === "function") { try { r19.return(); } catch {} } throw r67; } const r66 = r19; if (r66 !== void 0 && typeof r66.return === "function") { r66.return(); } } const r68 = r54; let r69 = r20; if (r60 !== r68) { const mutedFramerate = MediaSinkWantsLadder.getMutedFramerate(r20); const width2 = r54; r48[r20] = { width: width2, height: height2, budgetPortion, mutedFramerate, framerate: VIDEO_QUALITY_FRAMERATE }; r69 = r20 - 10; r60 = width2; } r52 = r59 + 1; r49 = r69; r53 = r60; if (r52 <= 25) { continue loop6; } return r48; } } } } } static getMutedFramerate(a0) { return a0 <= 20 ? VIDEO_QUALITY_FRAMERATE_MUTED_2 : VIDEO_QUALITY_FRAMERATE_MUTED; } static calculateOrderedLadder(a0) { const r0 = []; for (const item of Object.keys(a0).map((item) => Number(item)).sort((a, b) => a - b)) { if (item !== 0) { const r9 = a0[item]; r0.push({ pixelCount: r9.width * r9.height, wantValue: item, ...r9 }); } } return r0; } } export { MediaSinkWantsLadder };