diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java index c14c090452..65f89e3fa7 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter.java @@ -48,27 +48,27 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList /** Default initial Wifi bitrate estimate in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI = - ImmutableList.of(4_400_000L, 3_200_000L, 2_300_000L, 1_600_000L, 810_000L); + ImmutableList.of(4_300_000L, 3_200_000L, 2_400_000L, 1_700_000L, 860_000L); /** Default initial 2G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_2G = - ImmutableList.of(1_400_000L, 990_000L, 730_000L, 510_000L, 230_000L); + ImmutableList.of(1_500_000L, 980_000L, 750_000L, 520_000L, 290_000L); /** Default initial 3G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_3G = - ImmutableList.of(2_100_000L, 1_400_000L, 1_000_000L, 890_000L, 640_000L); + ImmutableList.of(2_000_000L, 1_300_000L, 1_000_000L, 860_000L, 610_000L); /** Default initial 4G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_4G = - ImmutableList.of(2_600_000L, 1_700_000L, 1_300_000L, 1_000_000L, 700_000L); + ImmutableList.of(2_500_000L, 1_700_000L, 1_200_000L, 970_000L, 680_000L); /** Default initial 5G-NSA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA = - ImmutableList.of(5_700_000L, 3_700_000L, 2_300_000L, 1_700_000L, 990_000L); + ImmutableList.of(4_700_000L, 2_800_000L, 2_100_000L, 1_700_000L, 980_000L); /** Default initial 5G-SA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA = - ImmutableList.of(2_800_000L, 1_800_000L, 1_400_000L, 1_100_000L, 870_000L); + ImmutableList.of(2_700_000L, 2_000_000L, 1_600_000L, 1_300_000L, 1_000_000L); /** * Default initial bitrate estimate used when the device is offline or the network type cannot be @@ -475,410 +475,410 @@ public final class DefaultBandwidthMeter implements BandwidthMeter, TransferList */ private static int[] getInitialBitrateCountryGroupAssignment(String country) { switch (country) { - case "AD": - case "CW": - return new int[] {2, 2, 0, 0, 2, 2}; case "AE": - return new int[] {1, 4, 3, 4, 4, 2}; - case "AG": - return new int[] {2, 4, 3, 4, 2, 2}; + return new int[] {1, 4, 2, 3, 4, 1}; case "AL": - return new int[] {1, 1, 1, 3, 2, 2}; - case "AM": - return new int[] {2, 3, 2, 3, 2, 2}; + return new int[] {1, 1, 1, 2, 2, 2}; case "AO": - return new int[] {4, 4, 4, 3, 2, 2}; + return new int[] {3, 4, 4, 3, 2, 2}; + case "AR": + return new int[] {2, 2, 2, 2, 1, 2}; case "AS": return new int[] {2, 2, 3, 3, 2, 2}; - case "AT": - return new int[] {1, 2, 1, 4, 1, 4}; case "AU": - return new int[] {0, 2, 1, 1, 3, 0}; + return new int[] {0, 3, 1, 1, 3, 0}; + case "AW": + return new int[] {2, 2, 3, 4, 2, 2}; + case "BD": + return new int[] {2, 1, 3, 2, 4, 2}; case "BE": - return new int[] {0, 1, 4, 4, 3, 2}; + return new int[] {0, 0, 1, 0, 1, 2}; case "BH": - return new int[] {1, 3, 1, 4, 4, 2}; + return new int[] {1, 3, 1, 3, 4, 2}; case "BJ": return new int[] {4, 4, 2, 3, 2, 2}; + case "BM": + return new int[] {0, 2, 0, 0, 2, 2}; case "BN": - return new int[] {3, 2, 0, 1, 2, 2}; + return new int[] {3, 2, 0, 0, 2, 2}; case "BO": - return new int[] {1, 2, 3, 2, 2, 2}; + return new int[] {1, 2, 4, 4, 2, 2}; case "BR": - return new int[] {1, 1, 2, 1, 1, 0}; + return new int[] {1, 1, 1, 1, 2, 4}; + case "BS": + return new int[] {3, 2, 1, 1, 2, 2}; + case "BT": + return new int[] {3, 1, 2, 2, 3, 2}; case "BW": return new int[] {3, 2, 1, 0, 2, 2}; case "BY": - return new int[] {1, 1, 2, 3, 2, 2}; - case "CA": - return new int[] {0, 2, 3, 3, 3, 3}; + return new int[] {1, 2, 3, 3, 2, 2}; + case "CF": + return new int[] {4, 2, 4, 2, 2, 2}; case "CH": - return new int[] {0, 0, 0, 0, 0, 3}; + return new int[] {0, 1, 0, 0, 0, 2}; + case "AG": + case "CI": + return new int[] {2, 4, 3, 4, 2, 2}; case "BZ": case "CK": return new int[] {2, 2, 2, 1, 2, 2}; - case "CL": - return new int[] {1, 1, 2, 1, 3, 2}; - case "CM": - return new int[] {4, 3, 3, 4, 2, 2}; case "CN": - return new int[] {2, 0, 4, 3, 3, 1}; + return new int[] {2, 0, 1, 1, 3, 1}; case "CO": - return new int[] {2, 3, 4, 2, 2, 2}; - case "CR": - return new int[] {2, 4, 4, 4, 2, 2}; + return new int[] {2, 3, 3, 2, 2, 2}; case "CV": return new int[] {2, 3, 0, 1, 2, 2}; + case "CY": + return new int[] {1, 0, 1, 0, 0, 2}; case "CZ": return new int[] {0, 0, 2, 0, 1, 2}; case "DE": - return new int[] {0, 1, 3, 2, 2, 2}; - case "DO": - return new int[] {3, 4, 4, 4, 4, 2}; - case "AZ": - case "BF": - case "DZ": - return new int[] {3, 3, 4, 4, 2, 2}; + return new int[] {0, 1, 4, 2, 2, 1}; + case "DK": + return new int[] {0, 0, 2, 0, 0, 2}; case "EC": return new int[] {1, 3, 2, 1, 2, 2}; - case "CI": - case "EG": - return new int[] {3, 4, 3, 3, 2, 2}; + case "ES": + return new int[] {0, 0, 0, 0, 1, 0}; + case "ET": + return new int[] {4, 3, 4, 4, 4, 2}; case "FI": - return new int[] {0, 0, 0, 2, 0, 2}; + return new int[] {0, 0, 0, 1, 0, 2}; case "FJ": - return new int[] {3, 1, 2, 3, 2, 2}; + return new int[] {3, 2, 2, 3, 2, 2}; case "FM": - return new int[] {4, 2, 3, 0, 2, 2}; - case "AI": - case "BB": - case "BM": - case "BQ": - case "DM": + return new int[] {4, 2, 4, 0, 2, 2}; case "FO": - return new int[] {0, 2, 0, 0, 2, 2}; + return new int[] {0, 2, 2, 0, 2, 2}; case "FR": - return new int[] {1, 1, 2, 1, 1, 2}; + return new int[] {1, 1, 1, 1, 0, 2}; + case "GA": + return new int[] {3, 4, 0, 0, 2, 2}; case "GB": - return new int[] {0, 1, 1, 2, 1, 2}; + return new int[] {1, 1, 3, 2, 2, 2}; + case "GD": + return new int[] {2, 2, 0, 0, 2, 2}; case "GE": - return new int[] {1, 0, 0, 2, 2, 2}; + return new int[] {1, 1, 0, 2, 2, 2}; + case "GF": + return new int[] {3, 2, 3, 3, 2, 2}; case "GG": - return new int[] {0, 2, 1, 0, 2, 2}; - case "CG": + return new int[] {0, 2, 1, 1, 2, 2}; case "GH": - return new int[] {3, 3, 3, 3, 2, 2}; - case "GM": - return new int[] {4, 3, 2, 4, 2, 2}; + return new int[] {3, 3, 3, 2, 2, 2}; case "GN": - return new int[] {4, 4, 4, 2, 2, 2}; + return new int[] {3, 4, 4, 2, 2, 2}; case "GP": - return new int[] {3, 1, 1, 3, 2, 2}; - case "GQ": - return new int[] {4, 4, 3, 3, 2, 2}; + return new int[] {2, 1, 1, 3, 2, 2}; + case "GR": + return new int[] {1, 0, 0, 0, 1, 2}; case "GT": - return new int[] {2, 2, 2, 1, 1, 2}; - case "AW": + return new int[] {2, 1, 2, 1, 2, 2}; case "GU": - return new int[] {1, 2, 4, 4, 2, 2}; + return new int[] {2, 2, 4, 3, 3, 2}; case "GW": - return new int[] {4, 4, 2, 2, 2, 2}; + return new int[] {4, 4, 1, 2, 2, 2}; case "GY": - return new int[] {3, 0, 1, 1, 2, 2}; + return new int[] {3, 1, 1, 3, 2, 2}; case "HK": - return new int[] {0, 1, 1, 3, 2, 0}; - case "HN": - return new int[] {3, 3, 2, 2, 2, 2}; + return new int[] {0, 1, 0, 1, 1, 0}; case "ID": - return new int[] {3, 1, 1, 2, 3, 2}; - case "BA": + return new int[] {3, 1, 3, 3, 2, 4}; case "IE": - return new int[] {1, 1, 1, 1, 2, 2}; + return new int[] {1, 1, 1, 1, 1, 2}; case "IL": return new int[] {1, 2, 2, 3, 4, 2}; - case "IM": - return new int[] {0, 2, 0, 1, 2, 2}; case "IN": - return new int[] {1, 1, 2, 1, 2, 1}; + return new int[] {1, 1, 3, 2, 2, 3}; + case "IO": + return new int[] {3, 2, 2, 0, 2, 2}; + case "IQ": + return new int[] {3, 2, 3, 2, 2, 2}; case "IR": - return new int[] {4, 2, 3, 3, 4, 2}; - case "IS": - return new int[] {0, 0, 1, 0, 0, 2}; + return new int[] {4, 2, 3, 3, 4, 3}; case "IT": - return new int[] {0, 0, 1, 1, 1, 2}; + return new int[] {0, 1, 1, 2, 1, 2}; case "GI": + case "IM": case "JE": - return new int[] {1, 2, 0, 1, 2, 2}; + return new int[] {0, 2, 0, 1, 2, 2}; case "JM": - return new int[] {2, 4, 2, 1, 2, 2}; - case "JO": - return new int[] {2, 0, 1, 1, 2, 2}; + return new int[] {2, 4, 3, 1, 2, 2}; case "JP": - return new int[] {0, 3, 3, 3, 4, 4}; + return new int[] {0, 3, 2, 3, 4, 2}; case "KE": - return new int[] {3, 2, 2, 1, 2, 2}; + return new int[] {3, 2, 1, 1, 1, 2}; + case "KG": + return new int[] {2, 1, 1, 2, 2, 2}; case "KH": return new int[] {1, 0, 4, 2, 2, 2}; - case "CU": - case "KI": - return new int[] {4, 2, 4, 3, 2, 2}; - case "CD": - case "KM": - return new int[] {4, 3, 3, 2, 2, 2}; case "KR": return new int[] {0, 2, 2, 4, 4, 4}; + case "HR": case "KW": - return new int[] {1, 0, 1, 0, 0, 2}; - case "BD": + return new int[] {1, 0, 0, 0, 0, 2}; case "KZ": - return new int[] {2, 1, 2, 2, 2, 2}; + return new int[] {2, 1, 2, 2, 3, 2}; case "LA": return new int[] {1, 2, 1, 3, 2, 2}; - case "BS": case "LB": - return new int[] {3, 2, 1, 2, 2, 2}; - case "LK": - return new int[] {3, 2, 3, 4, 4, 2}; + return new int[] {3, 1, 1, 2, 2, 2}; + case "LC": + return new int[] {2, 2, 1, 1, 2, 2}; + case "DO": case "LR": - return new int[] {3, 4, 3, 4, 2, 2}; + return new int[] {3, 4, 4, 4, 2, 2}; + case "LT": + return new int[] {0, 1, 0, 1, 0, 2}; case "LU": - return new int[] {1, 1, 4, 2, 0, 2}; - case "CY": - case "HR": - case "LV": - return new int[] {1, 0, 0, 0, 0, 2}; + return new int[] {4, 0, 3, 2, 1, 3}; case "MA": - return new int[] {3, 3, 2, 1, 2, 2}; + return new int[] {3, 3, 1, 1, 2, 2}; + case "GL": case "MC": - return new int[] {0, 2, 2, 0, 2, 2}; + return new int[] {1, 2, 2, 0, 2, 2}; case "MD": return new int[] {1, 0, 0, 0, 2, 2}; case "ME": - return new int[] {2, 0, 0, 1, 1, 2}; - case "MH": - return new int[] {4, 2, 1, 3, 2, 2}; - case "MK": return new int[] {2, 0, 0, 1, 3, 2}; + case "MF": + return new int[] {1, 2, 2, 3, 2, 2}; + case "CG": + case "EG": + case "MG": + return new int[] {3, 4, 3, 3, 2, 2}; + case "MK": + return new int[] {1, 0, 0, 1, 3, 2}; + case "CD": + case "ML": + return new int[] {3, 3, 2, 2, 2, 2}; + case "LK": case "MM": - return new int[] {2, 2, 2, 3, 4, 2}; + return new int[] {3, 2, 3, 3, 4, 2}; case "MN": - return new int[] {2, 0, 1, 2, 2, 2}; + return new int[] {2, 0, 2, 2, 2, 2}; case "MO": - return new int[] {0, 2, 4, 4, 4, 2}; - case "KG": + return new int[] {0, 2, 4, 4, 3, 1}; case "MQ": - return new int[] {2, 1, 1, 2, 2, 2}; + return new int[] {2, 1, 2, 3, 2, 2}; + case "CM": case "MR": - return new int[] {4, 2, 3, 4, 2, 2}; - case "DK": - case "EE": - case "HU": - case "LT": - case "MT": - return new int[] {0, 0, 0, 0, 0, 2}; + return new int[] {4, 3, 3, 4, 2, 2}; + case "MU": + return new int[] {3, 1, 0, 2, 2, 2}; case "MV": - return new int[] {3, 4, 1, 3, 3, 2}; + return new int[] {3, 2, 1, 3, 4, 2}; case "MW": - return new int[] {4, 2, 3, 3, 2, 2}; + return new int[] {3, 2, 2, 1, 2, 2}; case "MX": - return new int[] {3, 4, 4, 4, 2, 2}; + return new int[] {2, 4, 4, 4, 3, 2}; case "MY": - return new int[] {1, 0, 4, 1, 2, 2}; + return new int[] {1, 0, 4, 1, 1, 0}; case "NA": return new int[] {3, 4, 3, 2, 2, 2}; - case "NC": - return new int[] {3, 2, 3, 4, 2, 2}; case "NG": return new int[] {3, 4, 2, 1, 2, 2}; + case "CR": case "NI": - return new int[] {2, 3, 4, 3, 2, 2}; + return new int[] {2, 4, 4, 4, 2, 2}; case "NL": - return new int[] {0, 2, 3, 3, 0, 4}; + return new int[] {2, 1, 4, 3, 0, 4}; case "NO": - return new int[] {0, 1, 2, 1, 1, 2}; + return new int[] {0, 0, 3, 0, 0, 2}; case "NP": - return new int[] {2, 1, 4, 3, 2, 2}; - case "NR": - return new int[] {4, 0, 3, 2, 2, 2}; - case "NU": - return new int[] {4, 2, 2, 1, 2, 2}; + return new int[] {2, 2, 4, 3, 2, 2}; case "NZ": - return new int[] {1, 0, 2, 2, 4, 2}; + return new int[] {0, 0, 1, 2, 4, 2}; case "OM": - return new int[] {2, 3, 1, 3, 4, 2}; + return new int[] {2, 3, 1, 2, 4, 2}; + case "AM": case "PA": - return new int[] {2, 3, 3, 3, 2, 2}; + return new int[] {2, 3, 2, 3, 2, 2}; case "PE": return new int[] {1, 2, 4, 4, 3, 2}; - case "AF": + case "PF": + return new int[] {2, 2, 3, 1, 2, 2}; + case "LS": case "PG": return new int[] {4, 3, 3, 3, 2, 2}; case "PH": - return new int[] {2, 1, 3, 2, 2, 0}; + return new int[] {2, 1, 2, 3, 2, 1}; + case "PK": + return new int[] {3, 3, 3, 3, 2, 2}; case "PL": - return new int[] {2, 1, 2, 2, 4, 2}; + return new int[] {1, 0, 2, 2, 4, 4}; case "PR": - return new int[] {2, 0, 2, 0, 2, 1}; + return new int[] {2, 0, 2, 1, 2, 0}; case "PS": - return new int[] {3, 4, 1, 4, 2, 2}; - case "PT": - return new int[] {1, 0, 0, 0, 1, 2}; + return new int[] {3, 4, 1, 3, 2, 2}; case "PW": - return new int[] {2, 2, 4, 2, 2, 2}; + return new int[] {2, 2, 4, 1, 2, 2}; case "BL": - case "MF": + case "MP": case "PY": return new int[] {1, 2, 2, 2, 2, 2}; case "QA": return new int[] {1, 4, 4, 4, 4, 2}; case "RE": - return new int[] {1, 2, 2, 3, 1, 2}; + return new int[] {0, 3, 2, 3, 1, 2}; case "RO": - return new int[] {0, 0, 1, 2, 1, 2}; + return new int[] {0, 0, 1, 1, 3, 2}; case "RS": - return new int[] {2, 0, 0, 0, 2, 2}; + return new int[] {1, 0, 0, 1, 2, 2}; case "RU": - return new int[] {1, 0, 0, 0, 3, 3}; + return new int[] {1, 0, 0, 1, 3, 3}; case "RW": - return new int[] {3, 3, 1, 0, 2, 2}; - case "MU": + return new int[] {3, 3, 2, 0, 2, 2}; case "SA": - return new int[] {3, 1, 1, 2, 2, 2}; - case "CF": - case "SB": - return new int[] {4, 2, 4, 2, 2, 2}; - case "SC": - return new int[] {4, 3, 1, 1, 2, 2}; - case "SD": - return new int[] {4, 3, 4, 2, 2, 2}; + return new int[] {3, 1, 1, 2, 2, 0}; + case "AT": + case "EE": + case "HU": + case "IS": + case "LV": + case "MT": case "SE": - return new int[] {0, 1, 1, 1, 0, 2}; + return new int[] {0, 0, 0, 0, 0, 2}; case "SG": - return new int[] {2, 3, 3, 3, 3, 3}; + return new int[] {2, 3, 3, 3, 1, 1}; case "AQ": case "ER": + case "NU": + case "SC": case "SH": return new int[] {4, 2, 2, 2, 2, 2}; case "BG": - case "ES": - case "GR": + case "PT": case "SI": return new int[] {0, 0, 0, 0, 1, 2}; - case "IQ": + case "FK": + case "NF": case "SJ": return new int[] {3, 2, 2, 2, 2, 2}; case "SK": - return new int[] {1, 1, 1, 1, 3, 2}; - case "GF": - case "PK": + return new int[] {0, 1, 1, 1, 2, 2}; + case "AZ": + case "DJ": + case "LY": case "SL": - return new int[] {3, 2, 3, 3, 2, 2}; - case "ET": + return new int[] {4, 2, 3, 3, 2, 2}; case "SN": return new int[] {4, 4, 3, 2, 2, 2}; case "SO": - return new int[] {3, 2, 2, 4, 4, 2}; + return new int[] {2, 2, 3, 4, 4, 2}; case "SR": - return new int[] {2, 4, 3, 0, 2, 2}; + return new int[] {2, 4, 4, 1, 2, 2}; + case "GM": + case "SS": + return new int[] {4, 3, 2, 4, 2, 2}; case "ST": return new int[] {2, 2, 1, 2, 2, 2}; - case "PF": case "SV": - return new int[] {2, 3, 3, 1, 2, 2}; + return new int[] {2, 3, 2, 1, 2, 2}; + case "AF": case "SZ": return new int[] {4, 4, 3, 4, 2, 2}; case "TC": - return new int[] {2, 2, 1, 3, 2, 2}; - case "GA": + return new int[] {3, 2, 1, 2, 2, 2}; + case "BF": + case "SD": + case "SY": + case "TD": + return new int[] {4, 3, 4, 4, 2, 2}; case "TG": return new int[] {3, 4, 1, 0, 2, 2}; + case "CL": case "TH": - return new int[] {0, 1, 2, 1, 2, 2}; - case "DJ": - case "SY": + return new int[] {0, 1, 2, 2, 2, 2}; + case "DZ": case "TJ": - return new int[] {4, 3, 4, 4, 2, 2}; - case "GL": - case "TK": - return new int[] {2, 2, 2, 4, 2, 2}; + return new int[] {3, 3, 4, 4, 2, 2}; + case "CU": + case "KI": + case "NR": case "TL": return new int[] {4, 2, 4, 4, 2, 2}; - case "SS": - case "TM": - return new int[] {4, 2, 2, 3, 2, 2}; - case "TR": - return new int[] {1, 0, 0, 1, 3, 2}; - case "TT": - return new int[] {1, 4, 0, 0, 2, 2}; - case "TW": - return new int[] {0, 2, 0, 0, 0, 0}; - case "ML": - case "TZ": - return new int[] {3, 4, 2, 2, 2, 2}; - case "UA": - return new int[] {0, 1, 1, 2, 4, 2}; - case "LS": - case "UG": - return new int[] {3, 3, 3, 2, 2, 2}; - case "US": - return new int[] {1, 1, 4, 1, 3, 1}; case "TN": + return new int[] {3, 1, 1, 1, 2, 2}; + case "TO": + return new int[] {3, 2, 4, 3, 2, 2}; + case "BA": + case "JO": + case "TR": + return new int[] {1, 1, 1, 1, 2, 2}; + case "TT": + return new int[] {2, 4, 1, 0, 2, 2}; + case "TW": + return new int[] {0, 0, 0, 0, 0, 0}; + case "TZ": + return new int[] {3, 4, 2, 1, 3, 2}; + case "CA": + case "UA": + return new int[] {0, 2, 1, 2, 3, 3}; + case "UG": + return new int[] {3, 3, 2, 3, 4, 2}; + case "US": + return new int[] {2, 2, 4, 1, 3, 1}; case "UY": - return new int[] {2, 1, 1, 1, 2, 2}; + return new int[] {2, 1, 1, 2, 1, 2}; case "UZ": - return new int[] {2, 2, 3, 4, 3, 2}; + return new int[] {1, 2, 3, 4, 3, 2}; case "AX": case "CX": case "LI": - case "MP": case "MS": case "PM": case "SM": case "VA": return new int[] {0, 2, 2, 2, 2, 2}; - case "GD": + case "AD": + case "AI": + case "BB": + case "BQ": + case "CW": + case "DM": case "KN": case "KY": - case "LC": case "SX": case "VC": return new int[] {1, 2, 0, 0, 2, 2}; case "VG": - return new int[] {2, 2, 0, 1, 2, 2}; + return new int[] {2, 2, 1, 1, 2, 4}; case "VI": return new int[] {0, 2, 1, 2, 2, 2}; case "VN": - return new int[] {0, 0, 1, 2, 2, 1}; + return new int[] {0, 0, 1, 2, 2, 2}; + case "KM": case "VU": - return new int[] {4, 3, 3, 1, 2, 2}; - case "IO": + return new int[] {4, 3, 3, 2, 2, 2}; + case "MH": + case "TM": case "TV": case "WF": return new int[] {4, 2, 2, 4, 2, 2}; - case "BT": case "MZ": case "WS": - return new int[] {3, 1, 2, 1, 2, 2}; + return new int[] {3, 1, 2, 2, 2, 2}; case "XK": return new int[] {1, 2, 1, 1, 2, 2}; case "BI": + case "GQ": case "HT": - case "MG": case "NE": - case "TD": case "VE": case "YE": return new int[] {4, 4, 4, 4, 2, 2}; + case "NC": case "YT": return new int[] {2, 3, 3, 4, 2, 2}; case "ZA": - return new int[] {2, 3, 2, 1, 2, 2}; + return new int[] {2, 4, 2, 1, 1, 2}; case "ZM": - return new int[] {4, 4, 4, 3, 3, 2}; - case "LY": - case "TO": + return new int[] {4, 4, 4, 3, 2, 2}; + case "SB": case "ZW": - return new int[] {3, 2, 4, 3, 2, 2}; + return new int[] {4, 2, 4, 3, 2, 2}; default: return new int[] {2, 2, 2, 2, 2, 2}; } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter.java index 4486436e7d..e7e62179e7 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter.java @@ -47,27 +47,27 @@ public final class ExperimentalBandwidthMeter implements BandwidthMeter, Transfe /** Default initial Wifi bitrate estimate in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_WIFI = - ImmutableList.of(4_400_000L, 3_200_000L, 2_300_000L, 1_600_000L, 810_000L); + ImmutableList.of(4_300_000L, 3_200_000L, 2_400_000L, 1_700_000L, 860_000L); /** Default initial 2G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_2G = - ImmutableList.of(1_400_000L, 990_000L, 730_000L, 510_000L, 230_000L); + ImmutableList.of(1_500_000L, 980_000L, 750_000L, 520_000L, 290_000L); /** Default initial 3G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_3G = - ImmutableList.of(2_100_000L, 1_400_000L, 1_000_000L, 890_000L, 640_000L); + ImmutableList.of(2_000_000L, 1_300_000L, 1_000_000L, 860_000L, 610_000L); /** Default initial 4G bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_4G = - ImmutableList.of(2_600_000L, 1_700_000L, 1_300_000L, 1_000_000L, 700_000L); + ImmutableList.of(2_500_000L, 1_700_000L, 1_200_000L, 970_000L, 680_000L); /** Default initial 5G-NSA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_NSA = - ImmutableList.of(5_700_000L, 3_700_000L, 2_300_000L, 1_700_000L, 990_000L); + ImmutableList.of(4_700_000L, 2_800_000L, 2_100_000L, 1_700_000L, 980_000L); /** Default initial 5G-SA bitrate estimates in bits per second. */ public static final ImmutableList DEFAULT_INITIAL_BITRATE_ESTIMATES_5G_SA = - ImmutableList.of(2_800_000L, 1_800_000L, 1_400_000L, 1_100_000L, 870_000L); + ImmutableList.of(2_700_000L, 2_000_000L, 1_600_000L, 1_300_000L, 1_000_000L); /** * Default number of samples to keep in the sliding window for estimating the time to first byte. @@ -428,410 +428,410 @@ public final class ExperimentalBandwidthMeter implements BandwidthMeter, Transfe */ private static int[] getInitialBitrateCountryGroupAssignment(String country) { switch (country) { - case "AD": - case "CW": - return new int[] {2, 2, 0, 0, 2, 2}; case "AE": - return new int[] {1, 4, 3, 4, 4, 2}; - case "AG": - return new int[] {2, 4, 3, 4, 2, 2}; + return new int[] {1, 4, 2, 3, 4, 1}; case "AL": - return new int[] {1, 1, 1, 3, 2, 2}; - case "AM": - return new int[] {2, 3, 2, 3, 2, 2}; + return new int[] {1, 1, 1, 2, 2, 2}; case "AO": - return new int[] {4, 4, 4, 3, 2, 2}; + return new int[] {3, 4, 4, 3, 2, 2}; + case "AR": + return new int[] {2, 2, 2, 2, 1, 2}; case "AS": return new int[] {2, 2, 3, 3, 2, 2}; - case "AT": - return new int[] {1, 2, 1, 4, 1, 4}; case "AU": - return new int[] {0, 2, 1, 1, 3, 0}; + return new int[] {0, 3, 1, 1, 3, 0}; + case "AW": + return new int[] {2, 2, 3, 4, 2, 2}; + case "BD": + return new int[] {2, 1, 3, 2, 4, 2}; case "BE": - return new int[] {0, 1, 4, 4, 3, 2}; + return new int[] {0, 0, 1, 0, 1, 2}; case "BH": - return new int[] {1, 3, 1, 4, 4, 2}; + return new int[] {1, 3, 1, 3, 4, 2}; case "BJ": return new int[] {4, 4, 2, 3, 2, 2}; + case "BM": + return new int[] {0, 2, 0, 0, 2, 2}; case "BN": - return new int[] {3, 2, 0, 1, 2, 2}; + return new int[] {3, 2, 0, 0, 2, 2}; case "BO": - return new int[] {1, 2, 3, 2, 2, 2}; + return new int[] {1, 2, 4, 4, 2, 2}; case "BR": - return new int[] {1, 1, 2, 1, 1, 0}; + return new int[] {1, 1, 1, 1, 2, 4}; + case "BS": + return new int[] {3, 2, 1, 1, 2, 2}; + case "BT": + return new int[] {3, 1, 2, 2, 3, 2}; case "BW": return new int[] {3, 2, 1, 0, 2, 2}; case "BY": - return new int[] {1, 1, 2, 3, 2, 2}; - case "CA": - return new int[] {0, 2, 3, 3, 3, 3}; + return new int[] {1, 2, 3, 3, 2, 2}; + case "CF": + return new int[] {4, 2, 4, 2, 2, 2}; case "CH": - return new int[] {0, 0, 0, 0, 0, 3}; + return new int[] {0, 1, 0, 0, 0, 2}; + case "AG": + case "CI": + return new int[] {2, 4, 3, 4, 2, 2}; case "BZ": case "CK": return new int[] {2, 2, 2, 1, 2, 2}; - case "CL": - return new int[] {1, 1, 2, 1, 3, 2}; - case "CM": - return new int[] {4, 3, 3, 4, 2, 2}; case "CN": - return new int[] {2, 0, 4, 3, 3, 1}; + return new int[] {2, 0, 1, 1, 3, 1}; case "CO": - return new int[] {2, 3, 4, 2, 2, 2}; - case "CR": - return new int[] {2, 4, 4, 4, 2, 2}; + return new int[] {2, 3, 3, 2, 2, 2}; case "CV": return new int[] {2, 3, 0, 1, 2, 2}; + case "CY": + return new int[] {1, 0, 1, 0, 0, 2}; case "CZ": return new int[] {0, 0, 2, 0, 1, 2}; case "DE": - return new int[] {0, 1, 3, 2, 2, 2}; - case "DO": - return new int[] {3, 4, 4, 4, 4, 2}; - case "AZ": - case "BF": - case "DZ": - return new int[] {3, 3, 4, 4, 2, 2}; + return new int[] {0, 1, 4, 2, 2, 1}; + case "DK": + return new int[] {0, 0, 2, 0, 0, 2}; case "EC": return new int[] {1, 3, 2, 1, 2, 2}; - case "CI": - case "EG": - return new int[] {3, 4, 3, 3, 2, 2}; + case "ES": + return new int[] {0, 0, 0, 0, 1, 0}; + case "ET": + return new int[] {4, 3, 4, 4, 4, 2}; case "FI": - return new int[] {0, 0, 0, 2, 0, 2}; + return new int[] {0, 0, 0, 1, 0, 2}; case "FJ": - return new int[] {3, 1, 2, 3, 2, 2}; + return new int[] {3, 2, 2, 3, 2, 2}; case "FM": - return new int[] {4, 2, 3, 0, 2, 2}; - case "AI": - case "BB": - case "BM": - case "BQ": - case "DM": + return new int[] {4, 2, 4, 0, 2, 2}; case "FO": - return new int[] {0, 2, 0, 0, 2, 2}; + return new int[] {0, 2, 2, 0, 2, 2}; case "FR": - return new int[] {1, 1, 2, 1, 1, 2}; + return new int[] {1, 1, 1, 1, 0, 2}; + case "GA": + return new int[] {3, 4, 0, 0, 2, 2}; case "GB": - return new int[] {0, 1, 1, 2, 1, 2}; + return new int[] {1, 1, 3, 2, 2, 2}; + case "GD": + return new int[] {2, 2, 0, 0, 2, 2}; case "GE": - return new int[] {1, 0, 0, 2, 2, 2}; + return new int[] {1, 1, 0, 2, 2, 2}; + case "GF": + return new int[] {3, 2, 3, 3, 2, 2}; case "GG": - return new int[] {0, 2, 1, 0, 2, 2}; - case "CG": + return new int[] {0, 2, 1, 1, 2, 2}; case "GH": - return new int[] {3, 3, 3, 3, 2, 2}; - case "GM": - return new int[] {4, 3, 2, 4, 2, 2}; + return new int[] {3, 3, 3, 2, 2, 2}; case "GN": - return new int[] {4, 4, 4, 2, 2, 2}; + return new int[] {3, 4, 4, 2, 2, 2}; case "GP": - return new int[] {3, 1, 1, 3, 2, 2}; - case "GQ": - return new int[] {4, 4, 3, 3, 2, 2}; + return new int[] {2, 1, 1, 3, 2, 2}; + case "GR": + return new int[] {1, 0, 0, 0, 1, 2}; case "GT": - return new int[] {2, 2, 2, 1, 1, 2}; - case "AW": + return new int[] {2, 1, 2, 1, 2, 2}; case "GU": - return new int[] {1, 2, 4, 4, 2, 2}; + return new int[] {2, 2, 4, 3, 3, 2}; case "GW": - return new int[] {4, 4, 2, 2, 2, 2}; + return new int[] {4, 4, 1, 2, 2, 2}; case "GY": - return new int[] {3, 0, 1, 1, 2, 2}; + return new int[] {3, 1, 1, 3, 2, 2}; case "HK": - return new int[] {0, 1, 1, 3, 2, 0}; - case "HN": - return new int[] {3, 3, 2, 2, 2, 2}; + return new int[] {0, 1, 0, 1, 1, 0}; case "ID": - return new int[] {3, 1, 1, 2, 3, 2}; - case "BA": + return new int[] {3, 1, 3, 3, 2, 4}; case "IE": - return new int[] {1, 1, 1, 1, 2, 2}; + return new int[] {1, 1, 1, 1, 1, 2}; case "IL": return new int[] {1, 2, 2, 3, 4, 2}; - case "IM": - return new int[] {0, 2, 0, 1, 2, 2}; case "IN": - return new int[] {1, 1, 2, 1, 2, 1}; + return new int[] {1, 1, 3, 2, 2, 3}; + case "IO": + return new int[] {3, 2, 2, 0, 2, 2}; + case "IQ": + return new int[] {3, 2, 3, 2, 2, 2}; case "IR": - return new int[] {4, 2, 3, 3, 4, 2}; - case "IS": - return new int[] {0, 0, 1, 0, 0, 2}; + return new int[] {4, 2, 3, 3, 4, 3}; case "IT": - return new int[] {0, 0, 1, 1, 1, 2}; + return new int[] {0, 1, 1, 2, 1, 2}; case "GI": + case "IM": case "JE": - return new int[] {1, 2, 0, 1, 2, 2}; + return new int[] {0, 2, 0, 1, 2, 2}; case "JM": - return new int[] {2, 4, 2, 1, 2, 2}; - case "JO": - return new int[] {2, 0, 1, 1, 2, 2}; + return new int[] {2, 4, 3, 1, 2, 2}; case "JP": - return new int[] {0, 3, 3, 3, 4, 4}; + return new int[] {0, 3, 2, 3, 4, 2}; case "KE": - return new int[] {3, 2, 2, 1, 2, 2}; + return new int[] {3, 2, 1, 1, 1, 2}; + case "KG": + return new int[] {2, 1, 1, 2, 2, 2}; case "KH": return new int[] {1, 0, 4, 2, 2, 2}; - case "CU": - case "KI": - return new int[] {4, 2, 4, 3, 2, 2}; - case "CD": - case "KM": - return new int[] {4, 3, 3, 2, 2, 2}; case "KR": return new int[] {0, 2, 2, 4, 4, 4}; + case "HR": case "KW": - return new int[] {1, 0, 1, 0, 0, 2}; - case "BD": + return new int[] {1, 0, 0, 0, 0, 2}; case "KZ": - return new int[] {2, 1, 2, 2, 2, 2}; + return new int[] {2, 1, 2, 2, 3, 2}; case "LA": return new int[] {1, 2, 1, 3, 2, 2}; - case "BS": case "LB": - return new int[] {3, 2, 1, 2, 2, 2}; - case "LK": - return new int[] {3, 2, 3, 4, 4, 2}; + return new int[] {3, 1, 1, 2, 2, 2}; + case "LC": + return new int[] {2, 2, 1, 1, 2, 2}; + case "DO": case "LR": - return new int[] {3, 4, 3, 4, 2, 2}; + return new int[] {3, 4, 4, 4, 2, 2}; + case "LT": + return new int[] {0, 1, 0, 1, 0, 2}; case "LU": - return new int[] {1, 1, 4, 2, 0, 2}; - case "CY": - case "HR": - case "LV": - return new int[] {1, 0, 0, 0, 0, 2}; + return new int[] {4, 0, 3, 2, 1, 3}; case "MA": - return new int[] {3, 3, 2, 1, 2, 2}; + return new int[] {3, 3, 1, 1, 2, 2}; + case "GL": case "MC": - return new int[] {0, 2, 2, 0, 2, 2}; + return new int[] {1, 2, 2, 0, 2, 2}; case "MD": return new int[] {1, 0, 0, 0, 2, 2}; case "ME": - return new int[] {2, 0, 0, 1, 1, 2}; - case "MH": - return new int[] {4, 2, 1, 3, 2, 2}; - case "MK": return new int[] {2, 0, 0, 1, 3, 2}; + case "MF": + return new int[] {1, 2, 2, 3, 2, 2}; + case "CG": + case "EG": + case "MG": + return new int[] {3, 4, 3, 3, 2, 2}; + case "MK": + return new int[] {1, 0, 0, 1, 3, 2}; + case "CD": + case "ML": + return new int[] {3, 3, 2, 2, 2, 2}; + case "LK": case "MM": - return new int[] {2, 2, 2, 3, 4, 2}; + return new int[] {3, 2, 3, 3, 4, 2}; case "MN": - return new int[] {2, 0, 1, 2, 2, 2}; + return new int[] {2, 0, 2, 2, 2, 2}; case "MO": - return new int[] {0, 2, 4, 4, 4, 2}; - case "KG": + return new int[] {0, 2, 4, 4, 3, 1}; case "MQ": - return new int[] {2, 1, 1, 2, 2, 2}; + return new int[] {2, 1, 2, 3, 2, 2}; + case "CM": case "MR": - return new int[] {4, 2, 3, 4, 2, 2}; - case "DK": - case "EE": - case "HU": - case "LT": - case "MT": - return new int[] {0, 0, 0, 0, 0, 2}; + return new int[] {4, 3, 3, 4, 2, 2}; + case "MU": + return new int[] {3, 1, 0, 2, 2, 2}; case "MV": - return new int[] {3, 4, 1, 3, 3, 2}; + return new int[] {3, 2, 1, 3, 4, 2}; case "MW": - return new int[] {4, 2, 3, 3, 2, 2}; + return new int[] {3, 2, 2, 1, 2, 2}; case "MX": - return new int[] {3, 4, 4, 4, 2, 2}; + return new int[] {2, 4, 4, 4, 3, 2}; case "MY": - return new int[] {1, 0, 4, 1, 2, 2}; + return new int[] {1, 0, 4, 1, 1, 0}; case "NA": return new int[] {3, 4, 3, 2, 2, 2}; - case "NC": - return new int[] {3, 2, 3, 4, 2, 2}; case "NG": return new int[] {3, 4, 2, 1, 2, 2}; + case "CR": case "NI": - return new int[] {2, 3, 4, 3, 2, 2}; + return new int[] {2, 4, 4, 4, 2, 2}; case "NL": - return new int[] {0, 2, 3, 3, 0, 4}; + return new int[] {2, 1, 4, 3, 0, 4}; case "NO": - return new int[] {0, 1, 2, 1, 1, 2}; + return new int[] {0, 0, 3, 0, 0, 2}; case "NP": - return new int[] {2, 1, 4, 3, 2, 2}; - case "NR": - return new int[] {4, 0, 3, 2, 2, 2}; - case "NU": - return new int[] {4, 2, 2, 1, 2, 2}; + return new int[] {2, 2, 4, 3, 2, 2}; case "NZ": - return new int[] {1, 0, 2, 2, 4, 2}; + return new int[] {0, 0, 1, 2, 4, 2}; case "OM": - return new int[] {2, 3, 1, 3, 4, 2}; + return new int[] {2, 3, 1, 2, 4, 2}; + case "AM": case "PA": - return new int[] {2, 3, 3, 3, 2, 2}; + return new int[] {2, 3, 2, 3, 2, 2}; case "PE": return new int[] {1, 2, 4, 4, 3, 2}; - case "AF": + case "PF": + return new int[] {2, 2, 3, 1, 2, 2}; + case "LS": case "PG": return new int[] {4, 3, 3, 3, 2, 2}; case "PH": - return new int[] {2, 1, 3, 2, 2, 0}; + return new int[] {2, 1, 2, 3, 2, 1}; + case "PK": + return new int[] {3, 3, 3, 3, 2, 2}; case "PL": - return new int[] {2, 1, 2, 2, 4, 2}; + return new int[] {1, 0, 2, 2, 4, 4}; case "PR": - return new int[] {2, 0, 2, 0, 2, 1}; + return new int[] {2, 0, 2, 1, 2, 0}; case "PS": - return new int[] {3, 4, 1, 4, 2, 2}; - case "PT": - return new int[] {1, 0, 0, 0, 1, 2}; + return new int[] {3, 4, 1, 3, 2, 2}; case "PW": - return new int[] {2, 2, 4, 2, 2, 2}; + return new int[] {2, 2, 4, 1, 2, 2}; case "BL": - case "MF": + case "MP": case "PY": return new int[] {1, 2, 2, 2, 2, 2}; case "QA": return new int[] {1, 4, 4, 4, 4, 2}; case "RE": - return new int[] {1, 2, 2, 3, 1, 2}; + return new int[] {0, 3, 2, 3, 1, 2}; case "RO": - return new int[] {0, 0, 1, 2, 1, 2}; + return new int[] {0, 0, 1, 1, 3, 2}; case "RS": - return new int[] {2, 0, 0, 0, 2, 2}; + return new int[] {1, 0, 0, 1, 2, 2}; case "RU": - return new int[] {1, 0, 0, 0, 3, 3}; + return new int[] {1, 0, 0, 1, 3, 3}; case "RW": - return new int[] {3, 3, 1, 0, 2, 2}; - case "MU": + return new int[] {3, 3, 2, 0, 2, 2}; case "SA": - return new int[] {3, 1, 1, 2, 2, 2}; - case "CF": - case "SB": - return new int[] {4, 2, 4, 2, 2, 2}; - case "SC": - return new int[] {4, 3, 1, 1, 2, 2}; - case "SD": - return new int[] {4, 3, 4, 2, 2, 2}; + return new int[] {3, 1, 1, 2, 2, 0}; + case "AT": + case "EE": + case "HU": + case "IS": + case "LV": + case "MT": case "SE": - return new int[] {0, 1, 1, 1, 0, 2}; + return new int[] {0, 0, 0, 0, 0, 2}; case "SG": - return new int[] {2, 3, 3, 3, 3, 3}; + return new int[] {2, 3, 3, 3, 1, 1}; case "AQ": case "ER": + case "NU": + case "SC": case "SH": return new int[] {4, 2, 2, 2, 2, 2}; case "BG": - case "ES": - case "GR": + case "PT": case "SI": return new int[] {0, 0, 0, 0, 1, 2}; - case "IQ": + case "FK": + case "NF": case "SJ": return new int[] {3, 2, 2, 2, 2, 2}; case "SK": - return new int[] {1, 1, 1, 1, 3, 2}; - case "GF": - case "PK": + return new int[] {0, 1, 1, 1, 2, 2}; + case "AZ": + case "DJ": + case "LY": case "SL": - return new int[] {3, 2, 3, 3, 2, 2}; - case "ET": + return new int[] {4, 2, 3, 3, 2, 2}; case "SN": return new int[] {4, 4, 3, 2, 2, 2}; case "SO": - return new int[] {3, 2, 2, 4, 4, 2}; + return new int[] {2, 2, 3, 4, 4, 2}; case "SR": - return new int[] {2, 4, 3, 0, 2, 2}; + return new int[] {2, 4, 4, 1, 2, 2}; + case "GM": + case "SS": + return new int[] {4, 3, 2, 4, 2, 2}; case "ST": return new int[] {2, 2, 1, 2, 2, 2}; - case "PF": case "SV": - return new int[] {2, 3, 3, 1, 2, 2}; + return new int[] {2, 3, 2, 1, 2, 2}; + case "AF": case "SZ": return new int[] {4, 4, 3, 4, 2, 2}; case "TC": - return new int[] {2, 2, 1, 3, 2, 2}; - case "GA": + return new int[] {3, 2, 1, 2, 2, 2}; + case "BF": + case "SD": + case "SY": + case "TD": + return new int[] {4, 3, 4, 4, 2, 2}; case "TG": return new int[] {3, 4, 1, 0, 2, 2}; + case "CL": case "TH": - return new int[] {0, 1, 2, 1, 2, 2}; - case "DJ": - case "SY": + return new int[] {0, 1, 2, 2, 2, 2}; + case "DZ": case "TJ": - return new int[] {4, 3, 4, 4, 2, 2}; - case "GL": - case "TK": - return new int[] {2, 2, 2, 4, 2, 2}; + return new int[] {3, 3, 4, 4, 2, 2}; + case "CU": + case "KI": + case "NR": case "TL": return new int[] {4, 2, 4, 4, 2, 2}; - case "SS": - case "TM": - return new int[] {4, 2, 2, 3, 2, 2}; - case "TR": - return new int[] {1, 0, 0, 1, 3, 2}; - case "TT": - return new int[] {1, 4, 0, 0, 2, 2}; - case "TW": - return new int[] {0, 2, 0, 0, 0, 0}; - case "ML": - case "TZ": - return new int[] {3, 4, 2, 2, 2, 2}; - case "UA": - return new int[] {0, 1, 1, 2, 4, 2}; - case "LS": - case "UG": - return new int[] {3, 3, 3, 2, 2, 2}; - case "US": - return new int[] {1, 1, 4, 1, 3, 1}; case "TN": + return new int[] {3, 1, 1, 1, 2, 2}; + case "TO": + return new int[] {3, 2, 4, 3, 2, 2}; + case "BA": + case "JO": + case "TR": + return new int[] {1, 1, 1, 1, 2, 2}; + case "TT": + return new int[] {2, 4, 1, 0, 2, 2}; + case "TW": + return new int[] {0, 0, 0, 0, 0, 0}; + case "TZ": + return new int[] {3, 4, 2, 1, 3, 2}; + case "CA": + case "UA": + return new int[] {0, 2, 1, 2, 3, 3}; + case "UG": + return new int[] {3, 3, 2, 3, 4, 2}; + case "US": + return new int[] {2, 2, 4, 1, 3, 1}; case "UY": - return new int[] {2, 1, 1, 1, 2, 2}; + return new int[] {2, 1, 1, 2, 1, 2}; case "UZ": - return new int[] {2, 2, 3, 4, 3, 2}; + return new int[] {1, 2, 3, 4, 3, 2}; case "AX": case "CX": case "LI": - case "MP": case "MS": case "PM": case "SM": case "VA": return new int[] {0, 2, 2, 2, 2, 2}; - case "GD": + case "AD": + case "AI": + case "BB": + case "BQ": + case "CW": + case "DM": case "KN": case "KY": - case "LC": case "SX": case "VC": return new int[] {1, 2, 0, 0, 2, 2}; case "VG": - return new int[] {2, 2, 0, 1, 2, 2}; + return new int[] {2, 2, 1, 1, 2, 4}; case "VI": return new int[] {0, 2, 1, 2, 2, 2}; case "VN": - return new int[] {0, 0, 1, 2, 2, 1}; + return new int[] {0, 0, 1, 2, 2, 2}; + case "KM": case "VU": - return new int[] {4, 3, 3, 1, 2, 2}; - case "IO": + return new int[] {4, 3, 3, 2, 2, 2}; + case "MH": + case "TM": case "TV": case "WF": return new int[] {4, 2, 2, 4, 2, 2}; - case "BT": case "MZ": case "WS": - return new int[] {3, 1, 2, 1, 2, 2}; + return new int[] {3, 1, 2, 2, 2, 2}; case "XK": return new int[] {1, 2, 1, 1, 2, 2}; case "BI": + case "GQ": case "HT": - case "MG": case "NE": - case "TD": case "VE": case "YE": return new int[] {4, 4, 4, 4, 2, 2}; + case "NC": case "YT": return new int[] {2, 3, 3, 4, 2, 2}; case "ZA": - return new int[] {2, 3, 2, 1, 2, 2}; + return new int[] {2, 4, 2, 1, 1, 2}; case "ZM": - return new int[] {4, 4, 4, 3, 3, 2}; - case "LY": - case "TO": + return new int[] {4, 4, 4, 3, 2, 2}; + case "SB": case "ZW": - return new int[] {3, 2, 4, 3, 2, 2}; + return new int[] {4, 2, 4, 3, 2, 2}; default: return new int[] {2, 2, 2, 2, 2, 2}; }