summaryrefslogtreecommitdiffstats
path: root/third_party/aom/av1/common/scan.c
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/aom/av1/common/scan.c')
-rw-r--r--third_party/aom/av1/common/scan.c1823
1 files changed, 1775 insertions, 48 deletions
diff --git a/third_party/aom/av1/common/scan.c b/third_party/aom/av1/common/scan.c
index 7bdeb6239..3c8f3d7ac 100644
--- a/third_party/aom/av1/common/scan.c
+++ b/third_party/aom/av1/common/scan.c
@@ -1171,6 +1171,328 @@ DECLARE_ALIGNED(16, static const int16_t, qtr_scan_32x32[1024]) = {
};
#if CONFIG_TX64X64
+DECLARE_ALIGNED(16, static const int16_t, default_scan_32x64[2048]) = {
+ 0, 1, 32, 2, 33, 64, 3, 34, 65, 96, 4, 35, 66,
+ 97, 128, 5, 36, 67, 98, 129, 160, 6, 37, 68, 99, 130,
+ 161, 192, 7, 38, 69, 100, 131, 162, 193, 224, 8, 39, 70,
+ 101, 132, 163, 194, 225, 256, 9, 40, 71, 102, 133, 164, 195,
+ 226, 257, 288, 10, 41, 72, 103, 134, 165, 196, 227, 258, 289,
+ 320, 11, 42, 73, 104, 135, 166, 197, 228, 259, 290, 321, 352,
+ 12, 43, 74, 105, 136, 167, 198, 229, 260, 291, 322, 353, 384,
+ 13, 44, 75, 106, 137, 168, 199, 230, 261, 292, 323, 354, 385,
+ 416, 14, 45, 76, 107, 138, 169, 200, 231, 262, 293, 324, 355,
+ 386, 417, 448, 15, 46, 77, 108, 139, 170, 201, 232, 263, 294,
+ 325, 356, 387, 418, 449, 480, 16, 47, 78, 109, 140, 171, 202,
+ 233, 264, 295, 326, 357, 388, 419, 450, 481, 512, 17, 48, 79,
+ 110, 141, 172, 203, 234, 265, 296, 327, 358, 389, 420, 451, 482,
+ 513, 544, 18, 49, 80, 111, 142, 173, 204, 235, 266, 297, 328,
+ 359, 390, 421, 452, 483, 514, 545, 576, 19, 50, 81, 112, 143,
+ 174, 205, 236, 267, 298, 329, 360, 391, 422, 453, 484, 515, 546,
+ 577, 608, 20, 51, 82, 113, 144, 175, 206, 237, 268, 299, 330,
+ 361, 392, 423, 454, 485, 516, 547, 578, 609, 640, 21, 52, 83,
+ 114, 145, 176, 207, 238, 269, 300, 331, 362, 393, 424, 455, 486,
+ 517, 548, 579, 610, 641, 672, 22, 53, 84, 115, 146, 177, 208,
+ 239, 270, 301, 332, 363, 394, 425, 456, 487, 518, 549, 580, 611,
+ 642, 673, 704, 23, 54, 85, 116, 147, 178, 209, 240, 271, 302,
+ 333, 364, 395, 426, 457, 488, 519, 550, 581, 612, 643, 674, 705,
+ 736, 24, 55, 86, 117, 148, 179, 210, 241, 272, 303, 334, 365,
+ 396, 427, 458, 489, 520, 551, 582, 613, 644, 675, 706, 737, 768,
+ 25, 56, 87, 118, 149, 180, 211, 242, 273, 304, 335, 366, 397,
+ 428, 459, 490, 521, 552, 583, 614, 645, 676, 707, 738, 769, 800,
+ 26, 57, 88, 119, 150, 181, 212, 243, 274, 305, 336, 367, 398,
+ 429, 460, 491, 522, 553, 584, 615, 646, 677, 708, 739, 770, 801,
+ 832, 27, 58, 89, 120, 151, 182, 213, 244, 275, 306, 337, 368,
+ 399, 430, 461, 492, 523, 554, 585, 616, 647, 678, 709, 740, 771,
+ 802, 833, 864, 28, 59, 90, 121, 152, 183, 214, 245, 276, 307,
+ 338, 369, 400, 431, 462, 493, 524, 555, 586, 617, 648, 679, 710,
+ 741, 772, 803, 834, 865, 896, 29, 60, 91, 122, 153, 184, 215,
+ 246, 277, 308, 339, 370, 401, 432, 463, 494, 525, 556, 587, 618,
+ 649, 680, 711, 742, 773, 804, 835, 866, 897, 928, 30, 61, 92,
+ 123, 154, 185, 216, 247, 278, 309, 340, 371, 402, 433, 464, 495,
+ 526, 557, 588, 619, 650, 681, 712, 743, 774, 805, 836, 867, 898,
+ 929, 960, 31, 62, 93, 124, 155, 186, 217, 248, 279, 310, 341,
+ 372, 403, 434, 465, 496, 527, 558, 589, 620, 651, 682, 713, 744,
+ 775, 806, 837, 868, 899, 930, 961, 992, 63, 94, 125, 156, 187,
+ 218, 249, 280, 311, 342, 373, 404, 435, 466, 497, 528, 559, 590,
+ 621, 652, 683, 714, 745, 776, 807, 838, 869, 900, 931, 962, 993,
+ 1024, 95, 126, 157, 188, 219, 250, 281, 312, 343, 374, 405, 436,
+ 467, 498, 529, 560, 591, 622, 653, 684, 715, 746, 777, 808, 839,
+ 870, 901, 932, 963, 994, 1025, 1056, 127, 158, 189, 220, 251, 282,
+ 313, 344, 375, 406, 437, 468, 499, 530, 561, 592, 623, 654, 685,
+ 716, 747, 778, 809, 840, 871, 902, 933, 964, 995, 1026, 1057, 1088,
+ 159, 190, 221, 252, 283, 314, 345, 376, 407, 438, 469, 500, 531,
+ 562, 593, 624, 655, 686, 717, 748, 779, 810, 841, 872, 903, 934,
+ 965, 996, 1027, 1058, 1089, 1120, 191, 222, 253, 284, 315, 346, 377,
+ 408, 439, 470, 501, 532, 563, 594, 625, 656, 687, 718, 749, 780,
+ 811, 842, 873, 904, 935, 966, 997, 1028, 1059, 1090, 1121, 1152, 223,
+ 254, 285, 316, 347, 378, 409, 440, 471, 502, 533, 564, 595, 626,
+ 657, 688, 719, 750, 781, 812, 843, 874, 905, 936, 967, 998, 1029,
+ 1060, 1091, 1122, 1153, 1184, 255, 286, 317, 348, 379, 410, 441, 472,
+ 503, 534, 565, 596, 627, 658, 689, 720, 751, 782, 813, 844, 875,
+ 906, 937, 968, 999, 1030, 1061, 1092, 1123, 1154, 1185, 1216, 287, 318,
+ 349, 380, 411, 442, 473, 504, 535, 566, 597, 628, 659, 690, 721,
+ 752, 783, 814, 845, 876, 907, 938, 969, 1000, 1031, 1062, 1093, 1124,
+ 1155, 1186, 1217, 1248, 319, 350, 381, 412, 443, 474, 505, 536, 567,
+ 598, 629, 660, 691, 722, 753, 784, 815, 846, 877, 908, 939, 970,
+ 1001, 1032, 1063, 1094, 1125, 1156, 1187, 1218, 1249, 1280, 351, 382, 413,
+ 444, 475, 506, 537, 568, 599, 630, 661, 692, 723, 754, 785, 816,
+ 847, 878, 909, 940, 971, 1002, 1033, 1064, 1095, 1126, 1157, 1188, 1219,
+ 1250, 1281, 1312, 383, 414, 445, 476, 507, 538, 569, 600, 631, 662,
+ 693, 724, 755, 786, 817, 848, 879, 910, 941, 972, 1003, 1034, 1065,
+ 1096, 1127, 1158, 1189, 1220, 1251, 1282, 1313, 1344, 415, 446, 477, 508,
+ 539, 570, 601, 632, 663, 694, 725, 756, 787, 818, 849, 880, 911,
+ 942, 973, 1004, 1035, 1066, 1097, 1128, 1159, 1190, 1221, 1252, 1283, 1314,
+ 1345, 1376, 447, 478, 509, 540, 571, 602, 633, 664, 695, 726, 757,
+ 788, 819, 850, 881, 912, 943, 974, 1005, 1036, 1067, 1098, 1129, 1160,
+ 1191, 1222, 1253, 1284, 1315, 1346, 1377, 1408, 479, 510, 541, 572, 603,
+ 634, 665, 696, 727, 758, 789, 820, 851, 882, 913, 944, 975, 1006,
+ 1037, 1068, 1099, 1130, 1161, 1192, 1223, 1254, 1285, 1316, 1347, 1378, 1409,
+ 1440, 511, 542, 573, 604, 635, 666, 697, 728, 759, 790, 821, 852,
+ 883, 914, 945, 976, 1007, 1038, 1069, 1100, 1131, 1162, 1193, 1224, 1255,
+ 1286, 1317, 1348, 1379, 1410, 1441, 1472, 543, 574, 605, 636, 667, 698,
+ 729, 760, 791, 822, 853, 884, 915, 946, 977, 1008, 1039, 1070, 1101,
+ 1132, 1163, 1194, 1225, 1256, 1287, 1318, 1349, 1380, 1411, 1442, 1473, 1504,
+ 575, 606, 637, 668, 699, 730, 761, 792, 823, 854, 885, 916, 947,
+ 978, 1009, 1040, 1071, 1102, 1133, 1164, 1195, 1226, 1257, 1288, 1319, 1350,
+ 1381, 1412, 1443, 1474, 1505, 1536, 607, 638, 669, 700, 731, 762, 793,
+ 824, 855, 886, 917, 948, 979, 1010, 1041, 1072, 1103, 1134, 1165, 1196,
+ 1227, 1258, 1289, 1320, 1351, 1382, 1413, 1444, 1475, 1506, 1537, 1568, 639,
+ 670, 701, 732, 763, 794, 825, 856, 887, 918, 949, 980, 1011, 1042,
+ 1073, 1104, 1135, 1166, 1197, 1228, 1259, 1290, 1321, 1352, 1383, 1414, 1445,
+ 1476, 1507, 1538, 1569, 1600, 671, 702, 733, 764, 795, 826, 857, 888,
+ 919, 950, 981, 1012, 1043, 1074, 1105, 1136, 1167, 1198, 1229, 1260, 1291,
+ 1322, 1353, 1384, 1415, 1446, 1477, 1508, 1539, 1570, 1601, 1632, 703, 734,
+ 765, 796, 827, 858, 889, 920, 951, 982, 1013, 1044, 1075, 1106, 1137,
+ 1168, 1199, 1230, 1261, 1292, 1323, 1354, 1385, 1416, 1447, 1478, 1509, 1540,
+ 1571, 1602, 1633, 1664, 735, 766, 797, 828, 859, 890, 921, 952, 983,
+ 1014, 1045, 1076, 1107, 1138, 1169, 1200, 1231, 1262, 1293, 1324, 1355, 1386,
+ 1417, 1448, 1479, 1510, 1541, 1572, 1603, 1634, 1665, 1696, 767, 798, 829,
+ 860, 891, 922, 953, 984, 1015, 1046, 1077, 1108, 1139, 1170, 1201, 1232,
+ 1263, 1294, 1325, 1356, 1387, 1418, 1449, 1480, 1511, 1542, 1573, 1604, 1635,
+ 1666, 1697, 1728, 799, 830, 861, 892, 923, 954, 985, 1016, 1047, 1078,
+ 1109, 1140, 1171, 1202, 1233, 1264, 1295, 1326, 1357, 1388, 1419, 1450, 1481,
+ 1512, 1543, 1574, 1605, 1636, 1667, 1698, 1729, 1760, 831, 862, 893, 924,
+ 955, 986, 1017, 1048, 1079, 1110, 1141, 1172, 1203, 1234, 1265, 1296, 1327,
+ 1358, 1389, 1420, 1451, 1482, 1513, 1544, 1575, 1606, 1637, 1668, 1699, 1730,
+ 1761, 1792, 863, 894, 925, 956, 987, 1018, 1049, 1080, 1111, 1142, 1173,
+ 1204, 1235, 1266, 1297, 1328, 1359, 1390, 1421, 1452, 1483, 1514, 1545, 1576,
+ 1607, 1638, 1669, 1700, 1731, 1762, 1793, 1824, 895, 926, 957, 988, 1019,
+ 1050, 1081, 1112, 1143, 1174, 1205, 1236, 1267, 1298, 1329, 1360, 1391, 1422,
+ 1453, 1484, 1515, 1546, 1577, 1608, 1639, 1670, 1701, 1732, 1763, 1794, 1825,
+ 1856, 927, 958, 989, 1020, 1051, 1082, 1113, 1144, 1175, 1206, 1237, 1268,
+ 1299, 1330, 1361, 1392, 1423, 1454, 1485, 1516, 1547, 1578, 1609, 1640, 1671,
+ 1702, 1733, 1764, 1795, 1826, 1857, 1888, 959, 990, 1021, 1052, 1083, 1114,
+ 1145, 1176, 1207, 1238, 1269, 1300, 1331, 1362, 1393, 1424, 1455, 1486, 1517,
+ 1548, 1579, 1610, 1641, 1672, 1703, 1734, 1765, 1796, 1827, 1858, 1889, 1920,
+ 991, 1022, 1053, 1084, 1115, 1146, 1177, 1208, 1239, 1270, 1301, 1332, 1363,
+ 1394, 1425, 1456, 1487, 1518, 1549, 1580, 1611, 1642, 1673, 1704, 1735, 1766,
+ 1797, 1828, 1859, 1890, 1921, 1952, 1023, 1054, 1085, 1116, 1147, 1178, 1209,
+ 1240, 1271, 1302, 1333, 1364, 1395, 1426, 1457, 1488, 1519, 1550, 1581, 1612,
+ 1643, 1674, 1705, 1736, 1767, 1798, 1829, 1860, 1891, 1922, 1953, 1984, 1055,
+ 1086, 1117, 1148, 1179, 1210, 1241, 1272, 1303, 1334, 1365, 1396, 1427, 1458,
+ 1489, 1520, 1551, 1582, 1613, 1644, 1675, 1706, 1737, 1768, 1799, 1830, 1861,
+ 1892, 1923, 1954, 1985, 2016, 1087, 1118, 1149, 1180, 1211, 1242, 1273, 1304,
+ 1335, 1366, 1397, 1428, 1459, 1490, 1521, 1552, 1583, 1614, 1645, 1676, 1707,
+ 1738, 1769, 1800, 1831, 1862, 1893, 1924, 1955, 1986, 2017, 1119, 1150, 1181,
+ 1212, 1243, 1274, 1305, 1336, 1367, 1398, 1429, 1460, 1491, 1522, 1553, 1584,
+ 1615, 1646, 1677, 1708, 1739, 1770, 1801, 1832, 1863, 1894, 1925, 1956, 1987,
+ 2018, 1151, 1182, 1213, 1244, 1275, 1306, 1337, 1368, 1399, 1430, 1461, 1492,
+ 1523, 1554, 1585, 1616, 1647, 1678, 1709, 1740, 1771, 1802, 1833, 1864, 1895,
+ 1926, 1957, 1988, 2019, 1183, 1214, 1245, 1276, 1307, 1338, 1369, 1400, 1431,
+ 1462, 1493, 1524, 1555, 1586, 1617, 1648, 1679, 1710, 1741, 1772, 1803, 1834,
+ 1865, 1896, 1927, 1958, 1989, 2020, 1215, 1246, 1277, 1308, 1339, 1370, 1401,
+ 1432, 1463, 1494, 1525, 1556, 1587, 1618, 1649, 1680, 1711, 1742, 1773, 1804,
+ 1835, 1866, 1897, 1928, 1959, 1990, 2021, 1247, 1278, 1309, 1340, 1371, 1402,
+ 1433, 1464, 1495, 1526, 1557, 1588, 1619, 1650, 1681, 1712, 1743, 1774, 1805,
+ 1836, 1867, 1898, 1929, 1960, 1991, 2022, 1279, 1310, 1341, 1372, 1403, 1434,
+ 1465, 1496, 1527, 1558, 1589, 1620, 1651, 1682, 1713, 1744, 1775, 1806, 1837,
+ 1868, 1899, 1930, 1961, 1992, 2023, 1311, 1342, 1373, 1404, 1435, 1466, 1497,
+ 1528, 1559, 1590, 1621, 1652, 1683, 1714, 1745, 1776, 1807, 1838, 1869, 1900,
+ 1931, 1962, 1993, 2024, 1343, 1374, 1405, 1436, 1467, 1498, 1529, 1560, 1591,
+ 1622, 1653, 1684, 1715, 1746, 1777, 1808, 1839, 1870, 1901, 1932, 1963, 1994,
+ 2025, 1375, 1406, 1437, 1468, 1499, 1530, 1561, 1592, 1623, 1654, 1685, 1716,
+ 1747, 1778, 1809, 1840, 1871, 1902, 1933, 1964, 1995, 2026, 1407, 1438, 1469,
+ 1500, 1531, 1562, 1593, 1624, 1655, 1686, 1717, 1748, 1779, 1810, 1841, 1872,
+ 1903, 1934, 1965, 1996, 2027, 1439, 1470, 1501, 1532, 1563, 1594, 1625, 1656,
+ 1687, 1718, 1749, 1780, 1811, 1842, 1873, 1904, 1935, 1966, 1997, 2028, 1471,
+ 1502, 1533, 1564, 1595, 1626, 1657, 1688, 1719, 1750, 1781, 1812, 1843, 1874,
+ 1905, 1936, 1967, 1998, 2029, 1503, 1534, 1565, 1596, 1627, 1658, 1689, 1720,
+ 1751, 1782, 1813, 1844, 1875, 1906, 1937, 1968, 1999, 2030, 1535, 1566, 1597,
+ 1628, 1659, 1690, 1721, 1752, 1783, 1814, 1845, 1876, 1907, 1938, 1969, 2000,
+ 2031, 1567, 1598, 1629, 1660, 1691, 1722, 1753, 1784, 1815, 1846, 1877, 1908,
+ 1939, 1970, 2001, 2032, 1599, 1630, 1661, 1692, 1723, 1754, 1785, 1816, 1847,
+ 1878, 1909, 1940, 1971, 2002, 2033, 1631, 1662, 1693, 1724, 1755, 1786, 1817,
+ 1848, 1879, 1910, 1941, 1972, 2003, 2034, 1663, 1694, 1725, 1756, 1787, 1818,
+ 1849, 1880, 1911, 1942, 1973, 2004, 2035, 1695, 1726, 1757, 1788, 1819, 1850,
+ 1881, 1912, 1943, 1974, 2005, 2036, 1727, 1758, 1789, 1820, 1851, 1882, 1913,
+ 1944, 1975, 2006, 2037, 1759, 1790, 1821, 1852, 1883, 1914, 1945, 1976, 2007,
+ 2038, 1791, 1822, 1853, 1884, 1915, 1946, 1977, 2008, 2039, 1823, 1854, 1885,
+ 1916, 1947, 1978, 2009, 2040, 1855, 1886, 1917, 1948, 1979, 2010, 2041, 1887,
+ 1918, 1949, 1980, 2011, 2042, 1919, 1950, 1981, 2012, 2043, 1951, 1982, 2013,
+ 2044, 1983, 2014, 2045, 2015, 2046, 2047,
+};
+
+DECLARE_ALIGNED(16, static const int16_t, default_scan_64x32[2048]) = {
+ 0, 1, 64, 2, 65, 128, 3, 66, 129, 192, 4, 67, 130,
+ 193, 256, 5, 68, 131, 194, 257, 320, 6, 69, 132, 195, 258,
+ 321, 384, 7, 70, 133, 196, 259, 322, 385, 448, 8, 71, 134,
+ 197, 260, 323, 386, 449, 512, 9, 72, 135, 198, 261, 324, 387,
+ 450, 513, 576, 10, 73, 136, 199, 262, 325, 388, 451, 514, 577,
+ 640, 11, 74, 137, 200, 263, 326, 389, 452, 515, 578, 641, 704,
+ 12, 75, 138, 201, 264, 327, 390, 453, 516, 579, 642, 705, 768,
+ 13, 76, 139, 202, 265, 328, 391, 454, 517, 580, 643, 706, 769,
+ 832, 14, 77, 140, 203, 266, 329, 392, 455, 518, 581, 644, 707,
+ 770, 833, 896, 15, 78, 141, 204, 267, 330, 393, 456, 519, 582,
+ 645, 708, 771, 834, 897, 960, 16, 79, 142, 205, 268, 331, 394,
+ 457, 520, 583, 646, 709, 772, 835, 898, 961, 1024, 17, 80, 143,
+ 206, 269, 332, 395, 458, 521, 584, 647, 710, 773, 836, 899, 962,
+ 1025, 1088, 18, 81, 144, 207, 270, 333, 396, 459, 522, 585, 648,
+ 711, 774, 837, 900, 963, 1026, 1089, 1152, 19, 82, 145, 208, 271,
+ 334, 397, 460, 523, 586, 649, 712, 775, 838, 901, 964, 1027, 1090,
+ 1153, 1216, 20, 83, 146, 209, 272, 335, 398, 461, 524, 587, 650,
+ 713, 776, 839, 902, 965, 1028, 1091, 1154, 1217, 1280, 21, 84, 147,
+ 210, 273, 336, 399, 462, 525, 588, 651, 714, 777, 840, 903, 966,
+ 1029, 1092, 1155, 1218, 1281, 1344, 22, 85, 148, 211, 274, 337, 400,
+ 463, 526, 589, 652, 715, 778, 841, 904, 967, 1030, 1093, 1156, 1219,
+ 1282, 1345, 1408, 23, 86, 149, 212, 275, 338, 401, 464, 527, 590,
+ 653, 716, 779, 842, 905, 968, 1031, 1094, 1157, 1220, 1283, 1346, 1409,
+ 1472, 24, 87, 150, 213, 276, 339, 402, 465, 528, 591, 654, 717,
+ 780, 843, 906, 969, 1032, 1095, 1158, 1221, 1284, 1347, 1410, 1473, 1536,
+ 25, 88, 151, 214, 277, 340, 403, 466, 529, 592, 655, 718, 781,
+ 844, 907, 970, 1033, 1096, 1159, 1222, 1285, 1348, 1411, 1474, 1537, 1600,
+ 26, 89, 152, 215, 278, 341, 404, 467, 530, 593, 656, 719, 782,
+ 845, 908, 971, 1034, 1097, 1160, 1223, 1286, 1349, 1412, 1475, 1538, 1601,
+ 1664, 27, 90, 153, 216, 279, 342, 405, 468, 531, 594, 657, 720,
+ 783, 846, 909, 972, 1035, 1098, 1161, 1224, 1287, 1350, 1413, 1476, 1539,
+ 1602, 1665, 1728, 28, 91, 154, 217, 280, 343, 406, 469, 532, 595,
+ 658, 721, 784, 847, 910, 973, 1036, 1099, 1162, 1225, 1288, 1351, 1414,
+ 1477, 1540, 1603, 1666, 1729, 1792, 29, 92, 155, 218, 281, 344, 407,
+ 470, 533, 596, 659, 722, 785, 848, 911, 974, 1037, 1100, 1163, 1226,
+ 1289, 1352, 1415, 1478, 1541, 1604, 1667, 1730, 1793, 1856, 30, 93, 156,
+ 219, 282, 345, 408, 471, 534, 597, 660, 723, 786, 849, 912, 975,
+ 1038, 1101, 1164, 1227, 1290, 1353, 1416, 1479, 1542, 1605, 1668, 1731, 1794,
+ 1857, 1920, 31, 94, 157, 220, 283, 346, 409, 472, 535, 598, 661,
+ 724, 787, 850, 913, 976, 1039, 1102, 1165, 1228, 1291, 1354, 1417, 1480,
+ 1543, 1606, 1669, 1732, 1795, 1858, 1921, 1984, 32, 95, 158, 221, 284,
+ 347, 410, 473, 536, 599, 662, 725, 788, 851, 914, 977, 1040, 1103,
+ 1166, 1229, 1292, 1355, 1418, 1481, 1544, 1607, 1670, 1733, 1796, 1859, 1922,
+ 1985, 33, 96, 159, 222, 285, 348, 411, 474, 537, 600, 663, 726,
+ 789, 852, 915, 978, 1041, 1104, 1167, 1230, 1293, 1356, 1419, 1482, 1545,
+ 1608, 1671, 1734, 1797, 1860, 1923, 1986, 34, 97, 160, 223, 286, 349,
+ 412, 475, 538, 601, 664, 727, 790, 853, 916, 979, 1042, 1105, 1168,
+ 1231, 1294, 1357, 1420, 1483, 1546, 1609, 1672, 1735, 1798, 1861, 1924, 1987,
+ 35, 98, 161, 224, 287, 350, 413, 476, 539, 602, 665, 728, 791,
+ 854, 917, 980, 1043, 1106, 1169, 1232, 1295, 1358, 1421, 1484, 1547, 1610,
+ 1673, 1736, 1799, 1862, 1925, 1988, 36, 99, 162, 225, 288, 351, 414,
+ 477, 540, 603, 666, 729, 792, 855, 918, 981, 1044, 1107, 1170, 1233,
+ 1296, 1359, 1422, 1485, 1548, 1611, 1674, 1737, 1800, 1863, 1926, 1989, 37,
+ 100, 163, 226, 289, 352, 415, 478, 541, 604, 667, 730, 793, 856,
+ 919, 982, 1045, 1108, 1171, 1234, 1297, 1360, 1423, 1486, 1549, 1612, 1675,
+ 1738, 1801, 1864, 1927, 1990, 38, 101, 164, 227, 290, 353, 416, 479,
+ 542, 605, 668, 731, 794, 857, 920, 983, 1046, 1109, 1172, 1235, 1298,
+ 1361, 1424, 1487, 1550, 1613, 1676, 1739, 1802, 1865, 1928, 1991, 39, 102,
+ 165, 228, 291, 354, 417, 480, 543, 606, 669, 732, 795, 858, 921,
+ 984, 1047, 1110, 1173, 1236, 1299, 1362, 1425, 1488, 1551, 1614, 1677, 1740,
+ 1803, 1866, 1929, 1992, 40, 103, 166, 229, 292, 355, 418, 481, 544,
+ 607, 670, 733, 796, 859, 922, 985, 1048, 1111, 1174, 1237, 1300, 1363,
+ 1426, 1489, 1552, 1615, 1678, 1741, 1804, 1867, 1930, 1993, 41, 104, 167,
+ 230, 293, 356, 419, 482, 545, 608, 671, 734, 797, 860, 923, 986,
+ 1049, 1112, 1175, 1238, 1301, 1364, 1427, 1490, 1553, 1616, 1679, 1742, 1805,
+ 1868, 1931, 1994, 42, 105, 168, 231, 294, 357, 420, 483, 546, 609,
+ 672, 735, 798, 861, 924, 987, 1050, 1113, 1176, 1239, 1302, 1365, 1428,
+ 1491, 1554, 1617, 1680, 1743, 1806, 1869, 1932, 1995, 43, 106, 169, 232,
+ 295, 358, 421, 484, 547, 610, 673, 736, 799, 862, 925, 988, 1051,
+ 1114, 1177, 1240, 1303, 1366, 1429, 1492, 1555, 1618, 1681, 1744, 1807, 1870,
+ 1933, 1996, 44, 107, 170, 233, 296, 359, 422, 485, 548, 611, 674,
+ 737, 800, 863, 926, 989, 1052, 1115, 1178, 1241, 1304, 1367, 1430, 1493,
+ 1556, 1619, 1682, 1745, 1808, 1871, 1934, 1997, 45, 108, 171, 234, 297,
+ 360, 423, 486, 549, 612, 675, 738, 801, 864, 927, 990, 1053, 1116,
+ 1179, 1242, 1305, 1368, 1431, 1494, 1557, 1620, 1683, 1746, 1809, 1872, 1935,
+ 1998, 46, 109, 172, 235, 298, 361, 424, 487, 550, 613, 676, 739,
+ 802, 865, 928, 991, 1054, 1117, 1180, 1243, 1306, 1369, 1432, 1495, 1558,
+ 1621, 1684, 1747, 1810, 1873, 1936, 1999, 47, 110, 173, 236, 299, 362,
+ 425, 488, 551, 614, 677, 740, 803, 866, 929, 992, 1055, 1118, 1181,
+ 1244, 1307, 1370, 1433, 1496, 1559, 1622, 1685, 1748, 1811, 1874, 1937, 2000,
+ 48, 111, 174, 237, 300, 363, 426, 489, 552, 615, 678, 741, 804,
+ 867, 930, 993, 1056, 1119, 1182, 1245, 1308, 1371, 1434, 1497, 1560, 1623,
+ 1686, 1749, 1812, 1875, 1938, 2001, 49, 112, 175, 238, 301, 364, 427,
+ 490, 553, 616, 679, 742, 805, 868, 931, 994, 1057, 1120, 1183, 1246,
+ 1309, 1372, 1435, 1498, 1561, 1624, 1687, 1750, 1813, 1876, 1939, 2002, 50,
+ 113, 176, 239, 302, 365, 428, 491, 554, 617, 680, 743, 806, 869,
+ 932, 995, 1058, 1121, 1184, 1247, 1310, 1373, 1436, 1499, 1562, 1625, 1688,
+ 1751, 1814, 1877, 1940, 2003, 51, 114, 177, 240, 303, 366, 429, 492,
+ 555, 618, 681, 744, 807, 870, 933, 996, 1059, 1122, 1185, 1248, 1311,
+ 1374, 1437, 1500, 1563, 1626, 1689, 1752, 1815, 1878, 1941, 2004, 52, 115,
+ 178, 241, 304, 367, 430, 493, 556, 619, 682, 745, 808, 871, 934,
+ 997, 1060, 1123, 1186, 1249, 1312, 1375, 1438, 1501, 1564, 1627, 1690, 1753,
+ 1816, 1879, 1942, 2005, 53, 116, 179, 242, 305, 368, 431, 494, 557,
+ 620, 683, 746, 809, 872, 935, 998, 1061, 1124, 1187, 1250, 1313, 1376,
+ 1439, 1502, 1565, 1628, 1691, 1754, 1817, 1880, 1943, 2006, 54, 117, 180,
+ 243, 306, 369, 432, 495, 558, 621, 684, 747, 810, 873, 936, 999,
+ 1062, 1125, 1188, 1251, 1314, 1377, 1440, 1503, 1566, 1629, 1692, 1755, 1818,
+ 1881, 1944, 2007, 55, 118, 181, 244, 307, 370, 433, 496, 559, 622,
+ 685, 748, 811, 874, 937, 1000, 1063, 1126, 1189, 1252, 1315, 1378, 1441,
+ 1504, 1567, 1630, 1693, 1756, 1819, 1882, 1945, 2008, 56, 119, 182, 245,
+ 308, 371, 434, 497, 560, 623, 686, 749, 812, 875, 938, 1001, 1064,
+ 1127, 1190, 1253, 1316, 1379, 1442, 1505, 1568, 1631, 1694, 1757, 1820, 1883,
+ 1946, 2009, 57, 120, 183, 246, 309, 372, 435, 498, 561, 624, 687,
+ 750, 813, 876, 939, 1002, 1065, 1128, 1191, 1254, 1317, 1380, 1443, 1506,
+ 1569, 1632, 1695, 1758, 1821, 1884, 1947, 2010, 58, 121, 184, 247, 310,
+ 373, 436, 499, 562, 625, 688, 751, 814, 877, 940, 1003, 1066, 1129,
+ 1192, 1255, 1318, 1381, 1444, 1507, 1570, 1633, 1696, 1759, 1822, 1885, 1948,
+ 2011, 59, 122, 185, 248, 311, 374, 437, 500, 563, 626, 689, 752,
+ 815, 878, 941, 1004, 1067, 1130, 1193, 1256, 1319, 1382, 1445, 1508, 1571,
+ 1634, 1697, 1760, 1823, 1886, 1949, 2012, 60, 123, 186, 249, 312, 375,
+ 438, 501, 564, 627, 690, 753, 816, 879, 942, 1005, 1068, 1131, 1194,
+ 1257, 1320, 1383, 1446, 1509, 1572, 1635, 1698, 1761, 1824, 1887, 1950, 2013,
+ 61, 124, 187, 250, 313, 376, 439, 502, 565, 628, 691, 754, 817,
+ 880, 943, 1006, 1069, 1132, 1195, 1258, 1321, 1384, 1447, 1510, 1573, 1636,
+ 1699, 1762, 1825, 1888, 1951, 2014, 62, 125, 188, 251, 314, 377, 440,
+ 503, 566, 629, 692, 755, 818, 881, 944, 1007, 1070, 1133, 1196, 1259,
+ 1322, 1385, 1448, 1511, 1574, 1637, 1700, 1763, 1826, 1889, 1952, 2015, 63,
+ 126, 189, 252, 315, 378, 441, 504, 567, 630, 693, 756, 819, 882,
+ 945, 1008, 1071, 1134, 1197, 1260, 1323, 1386, 1449, 1512, 1575, 1638, 1701,
+ 1764, 1827, 1890, 1953, 2016, 127, 190, 253, 316, 379, 442, 505, 568,
+ 631, 694, 757, 820, 883, 946, 1009, 1072, 1135, 1198, 1261, 1324, 1387,
+ 1450, 1513, 1576, 1639, 1702, 1765, 1828, 1891, 1954, 2017, 191, 254, 317,
+ 380, 443, 506, 569, 632, 695, 758, 821, 884, 947, 1010, 1073, 1136,
+ 1199, 1262, 1325, 1388, 1451, 1514, 1577, 1640, 1703, 1766, 1829, 1892, 1955,
+ 2018, 255, 318, 381, 444, 507, 570, 633, 696, 759, 822, 885, 948,
+ 1011, 1074, 1137, 1200, 1263, 1326, 1389, 1452, 1515, 1578, 1641, 1704, 1767,
+ 1830, 1893, 1956, 2019, 319, 382, 445, 508, 571, 634, 697, 760, 823,
+ 886, 949, 1012, 1075, 1138, 1201, 1264, 1327, 1390, 1453, 1516, 1579, 1642,
+ 1705, 1768, 1831, 1894, 1957, 2020, 383, 446, 509, 572, 635, 698, 761,
+ 824, 887, 950, 1013, 1076, 1139, 1202, 1265, 1328, 1391, 1454, 1517, 1580,
+ 1643, 1706, 1769, 1832, 1895, 1958, 2021, 447, 510, 573, 636, 699, 762,
+ 825, 888, 951, 1014, 1077, 1140, 1203, 1266, 1329, 1392, 1455, 1518, 1581,
+ 1644, 1707, 1770, 1833, 1896, 1959, 2022, 511, 574, 637, 700, 763, 826,
+ 889, 952, 1015, 1078, 1141, 1204, 1267, 1330, 1393, 1456, 1519, 1582, 1645,
+ 1708, 1771, 1834, 1897, 1960, 2023, 575, 638, 701, 764, 827, 890, 953,
+ 1016, 1079, 1142, 1205, 1268, 1331, 1394, 1457, 1520, 1583, 1646, 1709, 1772,
+ 1835, 1898, 1961, 2024, 639, 702, 765, 828, 891, 954, 1017, 1080, 1143,
+ 1206, 1269, 1332, 1395, 1458, 1521, 1584, 1647, 1710, 1773, 1836, 1899, 1962,
+ 2025, 703, 766, 829, 892, 955, 1018, 1081, 1144, 1207, 1270, 1333, 1396,
+ 1459, 1522, 1585, 1648, 1711, 1774, 1837, 1900, 1963, 2026, 767, 830, 893,
+ 956, 1019, 1082, 1145, 1208, 1271, 1334, 1397, 1460, 1523, 1586, 1649, 1712,
+ 1775, 1838, 1901, 1964, 2027, 831, 894, 957, 1020, 1083, 1146, 1209, 1272,
+ 1335, 1398, 1461, 1524, 1587, 1650, 1713, 1776, 1839, 1902, 1965, 2028, 895,
+ 958, 1021, 1084, 1147, 1210, 1273, 1336, 1399, 1462, 1525, 1588, 1651, 1714,
+ 1777, 1840, 1903, 1966, 2029, 959, 1022, 1085, 1148, 1211, 1274, 1337, 1400,
+ 1463, 1526, 1589, 1652, 1715, 1778, 1841, 1904, 1967, 2030, 1023, 1086, 1149,
+ 1212, 1275, 1338, 1401, 1464, 1527, 1590, 1653, 1716, 1779, 1842, 1905, 1968,
+ 2031, 1087, 1150, 1213, 1276, 1339, 1402, 1465, 1528, 1591, 1654, 1717, 1780,
+ 1843, 1906, 1969, 2032, 1151, 1214, 1277, 1340, 1403, 1466, 1529, 1592, 1655,
+ 1718, 1781, 1844, 1907, 1970, 2033, 1215, 1278, 1341, 1404, 1467, 1530, 1593,
+ 1656, 1719, 1782, 1845, 1908, 1971, 2034, 1279, 1342, 1405, 1468, 1531, 1594,
+ 1657, 1720, 1783, 1846, 1909, 1972, 2035, 1343, 1406, 1469, 1532, 1595, 1658,
+ 1721, 1784, 1847, 1910, 1973, 2036, 1407, 1470, 1533, 1596, 1659, 1722, 1785,
+ 1848, 1911, 1974, 2037, 1471, 1534, 1597, 1660, 1723, 1786, 1849, 1912, 1975,
+ 2038, 1535, 1598, 1661, 1724, 1787, 1850, 1913, 1976, 2039, 1599, 1662, 1725,
+ 1788, 1851, 1914, 1977, 2040, 1663, 1726, 1789, 1852, 1915, 1978, 2041, 1727,
+ 1790, 1853, 1916, 1979, 2042, 1791, 1854, 1917, 1980, 2043, 1855, 1918, 1981,
+ 2044, 1919, 1982, 2045, 1983, 2046, 2047,
+};
+
DECLARE_ALIGNED(16, static const int16_t, default_scan_64x64[4096]) = {
0, 1, 64, 65, 2, 128, 66, 129, 130, 3, 192, 67, 193,
131, 194, 4, 256, 68, 257, 195, 132, 258, 5, 196, 259, 320,
@@ -3614,6 +3936,646 @@ DECLARE_ALIGNED(16, static const int16_t,
#if CONFIG_TX64X64
DECLARE_ALIGNED(16, static const int16_t,
+ default_scan_32x64_neighbors[2049 * MAX_NEIGHBORS]) = {
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 32, 32, 32, 2,
+ 2, 2, 33, 33, 64, 64, 64, 3, 3, 3, 34, 34, 65,
+ 65, 96, 96, 96, 4, 4, 4, 35, 35, 66, 66, 97, 97,
+ 128, 128, 128, 5, 5, 5, 36, 36, 67, 67, 98, 98, 129,
+ 129, 160, 160, 160, 6, 6, 6, 37, 37, 68, 68, 99, 99,
+ 130, 130, 161, 161, 192, 192, 192, 7, 7, 7, 38, 38, 69,
+ 69, 100, 100, 131, 131, 162, 162, 193, 193, 224, 224, 224, 8,
+ 8, 8, 39, 39, 70, 70, 101, 101, 132, 132, 163, 163, 194,
+ 194, 225, 225, 256, 256, 256, 9, 9, 9, 40, 40, 71, 71,
+ 102, 102, 133, 133, 164, 164, 195, 195, 226, 226, 257, 257, 288,
+ 288, 288, 10, 10, 10, 41, 41, 72, 72, 103, 103, 134, 134,
+ 165, 165, 196, 196, 227, 227, 258, 258, 289, 289, 320, 320, 320,
+ 11, 11, 11, 42, 42, 73, 73, 104, 104, 135, 135, 166, 166,
+ 197, 197, 228, 228, 259, 259, 290, 290, 321, 321, 352, 352, 352,
+ 12, 12, 12, 43, 43, 74, 74, 105, 105, 136, 136, 167, 167,
+ 198, 198, 229, 229, 260, 260, 291, 291, 322, 322, 353, 353, 384,
+ 384, 384, 13, 13, 13, 44, 44, 75, 75, 106, 106, 137, 137,
+ 168, 168, 199, 199, 230, 230, 261, 261, 292, 292, 323, 323, 354,
+ 354, 385, 385, 416, 416, 416, 14, 14, 14, 45, 45, 76, 76,
+ 107, 107, 138, 138, 169, 169, 200, 200, 231, 231, 262, 262, 293,
+ 293, 324, 324, 355, 355, 386, 386, 417, 417, 448, 448, 448, 15,
+ 15, 15, 46, 46, 77, 77, 108, 108, 139, 139, 170, 170, 201,
+ 201, 232, 232, 263, 263, 294, 294, 325, 325, 356, 356, 387, 387,
+ 418, 418, 449, 449, 480, 480, 480, 16, 16, 16, 47, 47, 78,
+ 78, 109, 109, 140, 140, 171, 171, 202, 202, 233, 233, 264, 264,
+ 295, 295, 326, 326, 357, 357, 388, 388, 419, 419, 450, 450, 481,
+ 481, 512, 512, 512, 17, 17, 17, 48, 48, 79, 79, 110, 110,
+ 141, 141, 172, 172, 203, 203, 234, 234, 265, 265, 296, 296, 327,
+ 327, 358, 358, 389, 389, 420, 420, 451, 451, 482, 482, 513, 513,
+ 544, 544, 544, 18, 18, 18, 49, 49, 80, 80, 111, 111, 142,
+ 142, 173, 173, 204, 204, 235, 235, 266, 266, 297, 297, 328, 328,
+ 359, 359, 390, 390, 421, 421, 452, 452, 483, 483, 514, 514, 545,
+ 545, 576, 576, 576, 19, 19, 19, 50, 50, 81, 81, 112, 112,
+ 143, 143, 174, 174, 205, 205, 236, 236, 267, 267, 298, 298, 329,
+ 329, 360, 360, 391, 391, 422, 422, 453, 453, 484, 484, 515, 515,
+ 546, 546, 577, 577, 608, 608, 608, 20, 20, 20, 51, 51, 82,
+ 82, 113, 113, 144, 144, 175, 175, 206, 206, 237, 237, 268, 268,
+ 299, 299, 330, 330, 361, 361, 392, 392, 423, 423, 454, 454, 485,
+ 485, 516, 516, 547, 547, 578, 578, 609, 609, 640, 640, 640, 21,
+ 21, 21, 52, 52, 83, 83, 114, 114, 145, 145, 176, 176, 207,
+ 207, 238, 238, 269, 269, 300, 300, 331, 331, 362, 362, 393, 393,
+ 424, 424, 455, 455, 486, 486, 517, 517, 548, 548, 579, 579, 610,
+ 610, 641, 641, 672, 672, 672, 22, 22, 22, 53, 53, 84, 84,
+ 115, 115, 146, 146, 177, 177, 208, 208, 239, 239, 270, 270, 301,
+ 301, 332, 332, 363, 363, 394, 394, 425, 425, 456, 456, 487, 487,
+ 518, 518, 549, 549, 580, 580, 611, 611, 642, 642, 673, 673, 704,
+ 704, 704, 23, 23, 23, 54, 54, 85, 85, 116, 116, 147, 147,
+ 178, 178, 209, 209, 240, 240, 271, 271, 302, 302, 333, 333, 364,
+ 364, 395, 395, 426, 426, 457, 457, 488, 488, 519, 519, 550, 550,
+ 581, 581, 612, 612, 643, 643, 674, 674, 705, 705, 736, 736, 736,
+ 24, 24, 24, 55, 55, 86, 86, 117, 117, 148, 148, 179, 179,
+ 210, 210, 241, 241, 272, 272, 303, 303, 334, 334, 365, 365, 396,
+ 396, 427, 427, 458, 458, 489, 489, 520, 520, 551, 551, 582, 582,
+ 613, 613, 644, 644, 675, 675, 706, 706, 737, 737, 768, 768, 768,
+ 25, 25, 25, 56, 56, 87, 87, 118, 118, 149, 149, 180, 180,
+ 211, 211, 242, 242, 273, 273, 304, 304, 335, 335, 366, 366, 397,
+ 397, 428, 428, 459, 459, 490, 490, 521, 521, 552, 552, 583, 583,
+ 614, 614, 645, 645, 676, 676, 707, 707, 738, 738, 769, 769, 800,
+ 800, 800, 26, 26, 26, 57, 57, 88, 88, 119, 119, 150, 150,
+ 181, 181, 212, 212, 243, 243, 274, 274, 305, 305, 336, 336, 367,
+ 367, 398, 398, 429, 429, 460, 460, 491, 491, 522, 522, 553, 553,
+ 584, 584, 615, 615, 646, 646, 677, 677, 708, 708, 739, 739, 770,
+ 770, 801, 801, 832, 832, 832, 27, 27, 27, 58, 58, 89, 89,
+ 120, 120, 151, 151, 182, 182, 213, 213, 244, 244, 275, 275, 306,
+ 306, 337, 337, 368, 368, 399, 399, 430, 430, 461, 461, 492, 492,
+ 523, 523, 554, 554, 585, 585, 616, 616, 647, 647, 678, 678, 709,
+ 709, 740, 740, 771, 771, 802, 802, 833, 833, 864, 864, 864, 28,
+ 28, 28, 59, 59, 90, 90, 121, 121, 152, 152, 183, 183, 214,
+ 214, 245, 245, 276, 276, 307, 307, 338, 338, 369, 369, 400, 400,
+ 431, 431, 462, 462, 493, 493, 524, 524, 555, 555, 586, 586, 617,
+ 617, 648, 648, 679, 679, 710, 710, 741, 741, 772, 772, 803, 803,
+ 834, 834, 865, 865, 896, 896, 896, 29, 29, 29, 60, 60, 91,
+ 91, 122, 122, 153, 153, 184, 184, 215, 215, 246, 246, 277, 277,
+ 308, 308, 339, 339, 370, 370, 401, 401, 432, 432, 463, 463, 494,
+ 494, 525, 525, 556, 556, 587, 587, 618, 618, 649, 649, 680, 680,
+ 711, 711, 742, 742, 773, 773, 804, 804, 835, 835, 866, 866, 897,
+ 897, 928, 928, 928, 30, 30, 30, 61, 61, 92, 92, 123, 123,
+ 154, 154, 185, 185, 216, 216, 247, 247, 278, 278, 309, 309, 340,
+ 340, 371, 371, 402, 402, 433, 433, 464, 464, 495, 495, 526, 526,
+ 557, 557, 588, 588, 619, 619, 650, 650, 681, 681, 712, 712, 743,
+ 743, 774, 774, 805, 805, 836, 836, 867, 867, 898, 898, 929, 929,
+ 960, 960, 960, 31, 62, 62, 93, 93, 124, 124, 155, 155, 186,
+ 186, 217, 217, 248, 248, 279, 279, 310, 310, 341, 341, 372, 372,
+ 403, 403, 434, 434, 465, 465, 496, 496, 527, 527, 558, 558, 589,
+ 589, 620, 620, 651, 651, 682, 682, 713, 713, 744, 744, 775, 775,
+ 806, 806, 837, 837, 868, 868, 899, 899, 930, 930, 961, 961, 992,
+ 992, 992, 63, 94, 94, 125, 125, 156, 156, 187, 187, 218, 218,
+ 249, 249, 280, 280, 311, 311, 342, 342, 373, 373, 404, 404, 435,
+ 435, 466, 466, 497, 497, 528, 528, 559, 559, 590, 590, 621, 621,
+ 652, 652, 683, 683, 714, 714, 745, 745, 776, 776, 807, 807, 838,
+ 838, 869, 869, 900, 900, 931, 931, 962, 962, 993, 993, 1024, 1024,
+ 1024, 95, 126, 126, 157, 157, 188, 188, 219, 219, 250, 250, 281,
+ 281, 312, 312, 343, 343, 374, 374, 405, 405, 436, 436, 467, 467,
+ 498, 498, 529, 529, 560, 560, 591, 591, 622, 622, 653, 653, 684,
+ 684, 715, 715, 746, 746, 777, 777, 808, 808, 839, 839, 870, 870,
+ 901, 901, 932, 932, 963, 963, 994, 994, 1025, 1025, 1056, 1056, 1056,
+ 127, 158, 158, 189, 189, 220, 220, 251, 251, 282, 282, 313, 313,
+ 344, 344, 375, 375, 406, 406, 437, 437, 468, 468, 499, 499, 530,
+ 530, 561, 561, 592, 592, 623, 623, 654, 654, 685, 685, 716, 716,
+ 747, 747, 778, 778, 809, 809, 840, 840, 871, 871, 902, 902, 933,
+ 933, 964, 964, 995, 995, 1026, 1026, 1057, 1057, 1088, 1088, 1088, 159,
+ 190, 190, 221, 221, 252, 252, 283, 283, 314, 314, 345, 345, 376,
+ 376, 407, 407, 438, 438, 469, 469, 500, 500, 531, 531, 562, 562,
+ 593, 593, 624, 624, 655, 655, 686, 686, 717, 717, 748, 748, 779,
+ 779, 810, 810, 841, 841, 872, 872, 903, 903, 934, 934, 965, 965,
+ 996, 996, 1027, 1027, 1058, 1058, 1089, 1089, 1120, 1120, 1120, 191, 222,
+ 222, 253, 253, 284, 284, 315, 315, 346, 346, 377, 377, 408, 408,
+ 439, 439, 470, 470, 501, 501, 532, 532, 563, 563, 594, 594, 625,
+ 625, 656, 656, 687, 687, 718, 718, 749, 749, 780, 780, 811, 811,
+ 842, 842, 873, 873, 904, 904, 935, 935, 966, 966, 997, 997, 1028,
+ 1028, 1059, 1059, 1090, 1090, 1121, 1121, 1152, 1152, 1152, 223, 254, 254,
+ 285, 285, 316, 316, 347, 347, 378, 378, 409, 409, 440, 440, 471,
+ 471, 502, 502, 533, 533, 564, 564, 595, 595, 626, 626, 657, 657,
+ 688, 688, 719, 719, 750, 750, 781, 781, 812, 812, 843, 843, 874,
+ 874, 905, 905, 936, 936, 967, 967, 998, 998, 1029, 1029, 1060, 1060,
+ 1091, 1091, 1122, 1122, 1153, 1153, 1184, 1184, 1184, 255, 286, 286, 317,
+ 317, 348, 348, 379, 379, 410, 410, 441, 441, 472, 472, 503, 503,
+ 534, 534, 565, 565, 596, 596, 627, 627, 658, 658, 689, 689, 720,
+ 720, 751, 751, 782, 782, 813, 813, 844, 844, 875, 875, 906, 906,
+ 937, 937, 968, 968, 999, 999, 1030, 1030, 1061, 1061, 1092, 1092, 1123,
+ 1123, 1154, 1154, 1185, 1185, 1216, 1216, 1216, 287, 318, 318, 349, 349,
+ 380, 380, 411, 411, 442, 442, 473, 473, 504, 504, 535, 535, 566,
+ 566, 597, 597, 628, 628, 659, 659, 690, 690, 721, 721, 752, 752,
+ 783, 783, 814, 814, 845, 845, 876, 876, 907, 907, 938, 938, 969,
+ 969, 1000, 1000, 1031, 1031, 1062, 1062, 1093, 1093, 1124, 1124, 1155, 1155,
+ 1186, 1186, 1217, 1217, 1248, 1248, 1248, 319, 350, 350, 381, 381, 412,
+ 412, 443, 443, 474, 474, 505, 505, 536, 536, 567, 567, 598, 598,
+ 629, 629, 660, 660, 691, 691, 722, 722, 753, 753, 784, 784, 815,
+ 815, 846, 846, 877, 877, 908, 908, 939, 939, 970, 970, 1001, 1001,
+ 1032, 1032, 1063, 1063, 1094, 1094, 1125, 1125, 1156, 1156, 1187, 1187, 1218,
+ 1218, 1249, 1249, 1280, 1280, 1280, 351, 382, 382, 413, 413, 444, 444,
+ 475, 475, 506, 506, 537, 537, 568, 568, 599, 599, 630, 630, 661,
+ 661, 692, 692, 723, 723, 754, 754, 785, 785, 816, 816, 847, 847,
+ 878, 878, 909, 909, 940, 940, 971, 971, 1002, 1002, 1033, 1033, 1064,
+ 1064, 1095, 1095, 1126, 1126, 1157, 1157, 1188, 1188, 1219, 1219, 1250, 1250,
+ 1281, 1281, 1312, 1312, 1312, 383, 414, 414, 445, 445, 476, 476, 507,
+ 507, 538, 538, 569, 569, 600, 600, 631, 631, 662, 662, 693, 693,
+ 724, 724, 755, 755, 786, 786, 817, 817, 848, 848, 879, 879, 910,
+ 910, 941, 941, 972, 972, 1003, 1003, 1034, 1034, 1065, 1065, 1096, 1096,
+ 1127, 1127, 1158, 1158, 1189, 1189, 1220, 1220, 1251, 1251, 1282, 1282, 1313,
+ 1313, 1344, 1344, 1344, 415, 446, 446, 477, 477, 508, 508, 539, 539,
+ 570, 570, 601, 601, 632, 632, 663, 663, 694, 694, 725, 725, 756,
+ 756, 787, 787, 818, 818, 849, 849, 880, 880, 911, 911, 942, 942,
+ 973, 973, 1004, 1004, 1035, 1035, 1066, 1066, 1097, 1097, 1128, 1128, 1159,
+ 1159, 1190, 1190, 1221, 1221, 1252, 1252, 1283, 1283, 1314, 1314, 1345, 1345,
+ 1376, 1376, 1376, 447, 478, 478, 509, 509, 540, 540, 571, 571, 602,
+ 602, 633, 633, 664, 664, 695, 695, 726, 726, 757, 757, 788, 788,
+ 819, 819, 850, 850, 881, 881, 912, 912, 943, 943, 974, 974, 1005,
+ 1005, 1036, 1036, 1067, 1067, 1098, 1098, 1129, 1129, 1160, 1160, 1191, 1191,
+ 1222, 1222, 1253, 1253, 1284, 1284, 1315, 1315, 1346, 1346, 1377, 1377, 1408,
+ 1408, 1408, 479, 510, 510, 541, 541, 572, 572, 603, 603, 634, 634,
+ 665, 665, 696, 696, 727, 727, 758, 758, 789, 789, 820, 820, 851,
+ 851, 882, 882, 913, 913, 944, 944, 975, 975, 1006, 1006, 1037, 1037,
+ 1068, 1068, 1099, 1099, 1130, 1130, 1161, 1161, 1192, 1192, 1223, 1223, 1254,
+ 1254, 1285, 1285, 1316, 1316, 1347, 1347, 1378, 1378, 1409, 1409, 1440, 1440,
+ 1440, 511, 542, 542, 573, 573, 604, 604, 635, 635, 666, 666, 697,
+ 697, 728, 728, 759, 759, 790, 790, 821, 821, 852, 852, 883, 883,
+ 914, 914, 945, 945, 976, 976, 1007, 1007, 1038, 1038, 1069, 1069, 1100,
+ 1100, 1131, 1131, 1162, 1162, 1193, 1193, 1224, 1224, 1255, 1255, 1286, 1286,
+ 1317, 1317, 1348, 1348, 1379, 1379, 1410, 1410, 1441, 1441, 1472, 1472, 1472,
+ 543, 574, 574, 605, 605, 636, 636, 667, 667, 698, 698, 729, 729,
+ 760, 760, 791, 791, 822, 822, 853, 853, 884, 884, 915, 915, 946,
+ 946, 977, 977, 1008, 1008, 1039, 1039, 1070, 1070, 1101, 1101, 1132, 1132,
+ 1163, 1163, 1194, 1194, 1225, 1225, 1256, 1256, 1287, 1287, 1318, 1318, 1349,
+ 1349, 1380, 1380, 1411, 1411, 1442, 1442, 1473, 1473, 1504, 1504, 1504, 575,
+ 606, 606, 637, 637, 668, 668, 699, 699, 730, 730, 761, 761, 792,
+ 792, 823, 823, 854, 854, 885, 885, 916, 916, 947, 947, 978, 978,
+ 1009, 1009, 1040, 1040, 1071, 1071, 1102, 1102, 1133, 1133, 1164, 1164, 1195,
+ 1195, 1226, 1226, 1257, 1257, 1288, 1288, 1319, 1319, 1350, 1350, 1381, 1381,
+ 1412, 1412, 1443, 1443, 1474, 1474, 1505, 1505, 1536, 1536, 1536, 607, 638,
+ 638, 669, 669, 700, 700, 731, 731, 762, 762, 793, 793, 824, 824,
+ 855, 855, 886, 886, 917, 917, 948, 948, 979, 979, 1010, 1010, 1041,
+ 1041, 1072, 1072, 1103, 1103, 1134, 1134, 1165, 1165, 1196, 1196, 1227, 1227,
+ 1258, 1258, 1289, 1289, 1320, 1320, 1351, 1351, 1382, 1382, 1413, 1413, 1444,
+ 1444, 1475, 1475, 1506, 1506, 1537, 1537, 1568, 1568, 1568, 639, 670, 670,
+ 701, 701, 732, 732, 763, 763, 794, 794, 825, 825, 856, 856, 887,
+ 887, 918, 918, 949, 949, 980, 980, 1011, 1011, 1042, 1042, 1073, 1073,
+ 1104, 1104, 1135, 1135, 1166, 1166, 1197, 1197, 1228, 1228, 1259, 1259, 1290,
+ 1290, 1321, 1321, 1352, 1352, 1383, 1383, 1414, 1414, 1445, 1445, 1476, 1476,
+ 1507, 1507, 1538, 1538, 1569, 1569, 1600, 1600, 1600, 671, 702, 702, 733,
+ 733, 764, 764, 795, 795, 826, 826, 857, 857, 888, 888, 919, 919,
+ 950, 950, 981, 981, 1012, 1012, 1043, 1043, 1074, 1074, 1105, 1105, 1136,
+ 1136, 1167, 1167, 1198, 1198, 1229, 1229, 1260, 1260, 1291, 1291, 1322, 1322,
+ 1353, 1353, 1384, 1384, 1415, 1415, 1446, 1446, 1477, 1477, 1508, 1508, 1539,
+ 1539, 1570, 1570, 1601, 1601, 1632, 1632, 1632, 703, 734, 734, 765, 765,
+ 796, 796, 827, 827, 858, 858, 889, 889, 920, 920, 951, 951, 982,
+ 982, 1013, 1013, 1044, 1044, 1075, 1075, 1106, 1106, 1137, 1137, 1168, 1168,
+ 1199, 1199, 1230, 1230, 1261, 1261, 1292, 1292, 1323, 1323, 1354, 1354, 1385,
+ 1385, 1416, 1416, 1447, 1447, 1478, 1478, 1509, 1509, 1540, 1540, 1571, 1571,
+ 1602, 1602, 1633, 1633, 1664, 1664, 1664, 735, 766, 766, 797, 797, 828,
+ 828, 859, 859, 890, 890, 921, 921, 952, 952, 983, 983, 1014, 1014,
+ 1045, 1045, 1076, 1076, 1107, 1107, 1138, 1138, 1169, 1169, 1200, 1200, 1231,
+ 1231, 1262, 1262, 1293, 1293, 1324, 1324, 1355, 1355, 1386, 1386, 1417, 1417,
+ 1448, 1448, 1479, 1479, 1510, 1510, 1541, 1541, 1572, 1572, 1603, 1603, 1634,
+ 1634, 1665, 1665, 1696, 1696, 1696, 767, 798, 798, 829, 829, 860, 860,
+ 891, 891, 922, 922, 953, 953, 984, 984, 1015, 1015, 1046, 1046, 1077,
+ 1077, 1108, 1108, 1139, 1139, 1170, 1170, 1201, 1201, 1232, 1232, 1263, 1263,
+ 1294, 1294, 1325, 1325, 1356, 1356, 1387, 1387, 1418, 1418, 1449, 1449, 1480,
+ 1480, 1511, 1511, 1542, 1542, 1573, 1573, 1604, 1604, 1635, 1635, 1666, 1666,
+ 1697, 1697, 1728, 1728, 1728, 799, 830, 830, 861, 861, 892, 892, 923,
+ 923, 954, 954, 985, 985, 1016, 1016, 1047, 1047, 1078, 1078, 1109, 1109,
+ 1140, 1140, 1171, 1171, 1202, 1202, 1233, 1233, 1264, 1264, 1295, 1295, 1326,
+ 1326, 1357, 1357, 1388, 1388, 1419, 1419, 1450, 1450, 1481, 1481, 1512, 1512,
+ 1543, 1543, 1574, 1574, 1605, 1605, 1636, 1636, 1667, 1667, 1698, 1698, 1729,
+ 1729, 1760, 1760, 1760, 831, 862, 862, 893, 893, 924, 924, 955, 955,
+ 986, 986, 1017, 1017, 1048, 1048, 1079, 1079, 1110, 1110, 1141, 1141, 1172,
+ 1172, 1203, 1203, 1234, 1234, 1265, 1265, 1296, 1296, 1327, 1327, 1358, 1358,
+ 1389, 1389, 1420, 1420, 1451, 1451, 1482, 1482, 1513, 1513, 1544, 1544, 1575,
+ 1575, 1606, 1606, 1637, 1637, 1668, 1668, 1699, 1699, 1730, 1730, 1761, 1761,
+ 1792, 1792, 1792, 863, 894, 894, 925, 925, 956, 956, 987, 987, 1018,
+ 1018, 1049, 1049, 1080, 1080, 1111, 1111, 1142, 1142, 1173, 1173, 1204, 1204,
+ 1235, 1235, 1266, 1266, 1297, 1297, 1328, 1328, 1359, 1359, 1390, 1390, 1421,
+ 1421, 1452, 1452, 1483, 1483, 1514, 1514, 1545, 1545, 1576, 1576, 1607, 1607,
+ 1638, 1638, 1669, 1669, 1700, 1700, 1731, 1731, 1762, 1762, 1793, 1793, 1824,
+ 1824, 1824, 895, 926, 926, 957, 957, 988, 988, 1019, 1019, 1050, 1050,
+ 1081, 1081, 1112, 1112, 1143, 1143, 1174, 1174, 1205, 1205, 1236, 1236, 1267,
+ 1267, 1298, 1298, 1329, 1329, 1360, 1360, 1391, 1391, 1422, 1422, 1453, 1453,
+ 1484, 1484, 1515, 1515, 1546, 1546, 1577, 1577, 1608, 1608, 1639, 1639, 1670,
+ 1670, 1701, 1701, 1732, 1732, 1763, 1763, 1794, 1794, 1825, 1825, 1856, 1856,
+ 1856, 927, 958, 958, 989, 989, 1020, 1020, 1051, 1051, 1082, 1082, 1113,
+ 1113, 1144, 1144, 1175, 1175, 1206, 1206, 1237, 1237, 1268, 1268, 1299, 1299,
+ 1330, 1330, 1361, 1361, 1392, 1392, 1423, 1423, 1454, 1454, 1485, 1485, 1516,
+ 1516, 1547, 1547, 1578, 1578, 1609, 1609, 1640, 1640, 1671, 1671, 1702, 1702,
+ 1733, 1733, 1764, 1764, 1795, 1795, 1826, 1826, 1857, 1857, 1888, 1888, 1888,
+ 959, 990, 990, 1021, 1021, 1052, 1052, 1083, 1083, 1114, 1114, 1145, 1145,
+ 1176, 1176, 1207, 1207, 1238, 1238, 1269, 1269, 1300, 1300, 1331, 1331, 1362,
+ 1362, 1393, 1393, 1424, 1424, 1455, 1455, 1486, 1486, 1517, 1517, 1548, 1548,
+ 1579, 1579, 1610, 1610, 1641, 1641, 1672, 1672, 1703, 1703, 1734, 1734, 1765,
+ 1765, 1796, 1796, 1827, 1827, 1858, 1858, 1889, 1889, 1920, 1920, 1920, 991,
+ 1022, 1022, 1053, 1053, 1084, 1084, 1115, 1115, 1146, 1146, 1177, 1177, 1208,
+ 1208, 1239, 1239, 1270, 1270, 1301, 1301, 1332, 1332, 1363, 1363, 1394, 1394,
+ 1425, 1425, 1456, 1456, 1487, 1487, 1518, 1518, 1549, 1549, 1580, 1580, 1611,
+ 1611, 1642, 1642, 1673, 1673, 1704, 1704, 1735, 1735, 1766, 1766, 1797, 1797,
+ 1828, 1828, 1859, 1859, 1890, 1890, 1921, 1921, 1952, 1952, 1952, 1023, 1054,
+ 1054, 1085, 1085, 1116, 1116, 1147, 1147, 1178, 1178, 1209, 1209, 1240, 1240,
+ 1271, 1271, 1302, 1302, 1333, 1333, 1364, 1364, 1395, 1395, 1426, 1426, 1457,
+ 1457, 1488, 1488, 1519, 1519, 1550, 1550, 1581, 1581, 1612, 1612, 1643, 1643,
+ 1674, 1674, 1705, 1705, 1736, 1736, 1767, 1767, 1798, 1798, 1829, 1829, 1860,
+ 1860, 1891, 1891, 1922, 1922, 1953, 1953, 1984, 1984, 1984, 1055, 1086, 1086,
+ 1117, 1117, 1148, 1148, 1179, 1179, 1210, 1210, 1241, 1241, 1272, 1272, 1303,
+ 1303, 1334, 1334, 1365, 1365, 1396, 1396, 1427, 1427, 1458, 1458, 1489, 1489,
+ 1520, 1520, 1551, 1551, 1582, 1582, 1613, 1613, 1644, 1644, 1675, 1675, 1706,
+ 1706, 1737, 1737, 1768, 1768, 1799, 1799, 1830, 1830, 1861, 1861, 1892, 1892,
+ 1923, 1923, 1954, 1954, 1985, 1985, 2016, 1087, 1118, 1118, 1149, 1149, 1180,
+ 1180, 1211, 1211, 1242, 1242, 1273, 1273, 1304, 1304, 1335, 1335, 1366, 1366,
+ 1397, 1397, 1428, 1428, 1459, 1459, 1490, 1490, 1521, 1521, 1552, 1552, 1583,
+ 1583, 1614, 1614, 1645, 1645, 1676, 1676, 1707, 1707, 1738, 1738, 1769, 1769,
+ 1800, 1800, 1831, 1831, 1862, 1862, 1893, 1893, 1924, 1924, 1955, 1955, 1986,
+ 1986, 2017, 1119, 1150, 1150, 1181, 1181, 1212, 1212, 1243, 1243, 1274, 1274,
+ 1305, 1305, 1336, 1336, 1367, 1367, 1398, 1398, 1429, 1429, 1460, 1460, 1491,
+ 1491, 1522, 1522, 1553, 1553, 1584, 1584, 1615, 1615, 1646, 1646, 1677, 1677,
+ 1708, 1708, 1739, 1739, 1770, 1770, 1801, 1801, 1832, 1832, 1863, 1863, 1894,
+ 1894, 1925, 1925, 1956, 1956, 1987, 1987, 2018, 1151, 1182, 1182, 1213, 1213,
+ 1244, 1244, 1275, 1275, 1306, 1306, 1337, 1337, 1368, 1368, 1399, 1399, 1430,
+ 1430, 1461, 1461, 1492, 1492, 1523, 1523, 1554, 1554, 1585, 1585, 1616, 1616,
+ 1647, 1647, 1678, 1678, 1709, 1709, 1740, 1740, 1771, 1771, 1802, 1802, 1833,
+ 1833, 1864, 1864, 1895, 1895, 1926, 1926, 1957, 1957, 1988, 1988, 2019, 1183,
+ 1214, 1214, 1245, 1245, 1276, 1276, 1307, 1307, 1338, 1338, 1369, 1369, 1400,
+ 1400, 1431, 1431, 1462, 1462, 1493, 1493, 1524, 1524, 1555, 1555, 1586, 1586,
+ 1617, 1617, 1648, 1648, 1679, 1679, 1710, 1710, 1741, 1741, 1772, 1772, 1803,
+ 1803, 1834, 1834, 1865, 1865, 1896, 1896, 1927, 1927, 1958, 1958, 1989, 1989,
+ 2020, 1215, 1246, 1246, 1277, 1277, 1308, 1308, 1339, 1339, 1370, 1370, 1401,
+ 1401, 1432, 1432, 1463, 1463, 1494, 1494, 1525, 1525, 1556, 1556, 1587, 1587,
+ 1618, 1618, 1649, 1649, 1680, 1680, 1711, 1711, 1742, 1742, 1773, 1773, 1804,
+ 1804, 1835, 1835, 1866, 1866, 1897, 1897, 1928, 1928, 1959, 1959, 1990, 1990,
+ 2021, 1247, 1278, 1278, 1309, 1309, 1340, 1340, 1371, 1371, 1402, 1402, 1433,
+ 1433, 1464, 1464, 1495, 1495, 1526, 1526, 1557, 1557, 1588, 1588, 1619, 1619,
+ 1650, 1650, 1681, 1681, 1712, 1712, 1743, 1743, 1774, 1774, 1805, 1805, 1836,
+ 1836, 1867, 1867, 1898, 1898, 1929, 1929, 1960, 1960, 1991, 1991, 2022, 1279,
+ 1310, 1310, 1341, 1341, 1372, 1372, 1403, 1403, 1434, 1434, 1465, 1465, 1496,
+ 1496, 1527, 1527, 1558, 1558, 1589, 1589, 1620, 1620, 1651, 1651, 1682, 1682,
+ 1713, 1713, 1744, 1744, 1775, 1775, 1806, 1806, 1837, 1837, 1868, 1868, 1899,
+ 1899, 1930, 1930, 1961, 1961, 1992, 1992, 2023, 1311, 1342, 1342, 1373, 1373,
+ 1404, 1404, 1435, 1435, 1466, 1466, 1497, 1497, 1528, 1528, 1559, 1559, 1590,
+ 1590, 1621, 1621, 1652, 1652, 1683, 1683, 1714, 1714, 1745, 1745, 1776, 1776,
+ 1807, 1807, 1838, 1838, 1869, 1869, 1900, 1900, 1931, 1931, 1962, 1962, 1993,
+ 1993, 2024, 1343, 1374, 1374, 1405, 1405, 1436, 1436, 1467, 1467, 1498, 1498,
+ 1529, 1529, 1560, 1560, 1591, 1591, 1622, 1622, 1653, 1653, 1684, 1684, 1715,
+ 1715, 1746, 1746, 1777, 1777, 1808, 1808, 1839, 1839, 1870, 1870, 1901, 1901,
+ 1932, 1932, 1963, 1963, 1994, 1994, 2025, 1375, 1406, 1406, 1437, 1437, 1468,
+ 1468, 1499, 1499, 1530, 1530, 1561, 1561, 1592, 1592, 1623, 1623, 1654, 1654,
+ 1685, 1685, 1716, 1716, 1747, 1747, 1778, 1778, 1809, 1809, 1840, 1840, 1871,
+ 1871, 1902, 1902, 1933, 1933, 1964, 1964, 1995, 1995, 2026, 1407, 1438, 1438,
+ 1469, 1469, 1500, 1500, 1531, 1531, 1562, 1562, 1593, 1593, 1624, 1624, 1655,
+ 1655, 1686, 1686, 1717, 1717, 1748, 1748, 1779, 1779, 1810, 1810, 1841, 1841,
+ 1872, 1872, 1903, 1903, 1934, 1934, 1965, 1965, 1996, 1996, 2027, 1439, 1470,
+ 1470, 1501, 1501, 1532, 1532, 1563, 1563, 1594, 1594, 1625, 1625, 1656, 1656,
+ 1687, 1687, 1718, 1718, 1749, 1749, 1780, 1780, 1811, 1811, 1842, 1842, 1873,
+ 1873, 1904, 1904, 1935, 1935, 1966, 1966, 1997, 1997, 2028, 1471, 1502, 1502,
+ 1533, 1533, 1564, 1564, 1595, 1595, 1626, 1626, 1657, 1657, 1688, 1688, 1719,
+ 1719, 1750, 1750, 1781, 1781, 1812, 1812, 1843, 1843, 1874, 1874, 1905, 1905,
+ 1936, 1936, 1967, 1967, 1998, 1998, 2029, 1503, 1534, 1534, 1565, 1565, 1596,
+ 1596, 1627, 1627, 1658, 1658, 1689, 1689, 1720, 1720, 1751, 1751, 1782, 1782,
+ 1813, 1813, 1844, 1844, 1875, 1875, 1906, 1906, 1937, 1937, 1968, 1968, 1999,
+ 1999, 2030, 1535, 1566, 1566, 1597, 1597, 1628, 1628, 1659, 1659, 1690, 1690,
+ 1721, 1721, 1752, 1752, 1783, 1783, 1814, 1814, 1845, 1845, 1876, 1876, 1907,
+ 1907, 1938, 1938, 1969, 1969, 2000, 2000, 2031, 1567, 1598, 1598, 1629, 1629,
+ 1660, 1660, 1691, 1691, 1722, 1722, 1753, 1753, 1784, 1784, 1815, 1815, 1846,
+ 1846, 1877, 1877, 1908, 1908, 1939, 1939, 1970, 1970, 2001, 2001, 2032, 1599,
+ 1630, 1630, 1661, 1661, 1692, 1692, 1723, 1723, 1754, 1754, 1785, 1785, 1816,
+ 1816, 1847, 1847, 1878, 1878, 1909, 1909, 1940, 1940, 1971, 1971, 2002, 2002,
+ 2033, 1631, 1662, 1662, 1693, 1693, 1724, 1724, 1755, 1755, 1786, 1786, 1817,
+ 1817, 1848, 1848, 1879, 1879, 1910, 1910, 1941, 1941, 1972, 1972, 2003, 2003,
+ 2034, 1663, 1694, 1694, 1725, 1725, 1756, 1756, 1787, 1787, 1818, 1818, 1849,
+ 1849, 1880, 1880, 1911, 1911, 1942, 1942, 1973, 1973, 2004, 2004, 2035, 1695,
+ 1726, 1726, 1757, 1757, 1788, 1788, 1819, 1819, 1850, 1850, 1881, 1881, 1912,
+ 1912, 1943, 1943, 1974, 1974, 2005, 2005, 2036, 1727, 1758, 1758, 1789, 1789,
+ 1820, 1820, 1851, 1851, 1882, 1882, 1913, 1913, 1944, 1944, 1975, 1975, 2006,
+ 2006, 2037, 1759, 1790, 1790, 1821, 1821, 1852, 1852, 1883, 1883, 1914, 1914,
+ 1945, 1945, 1976, 1976, 2007, 2007, 2038, 1791, 1822, 1822, 1853, 1853, 1884,
+ 1884, 1915, 1915, 1946, 1946, 1977, 1977, 2008, 2008, 2039, 1823, 1854, 1854,
+ 1885, 1885, 1916, 1916, 1947, 1947, 1978, 1978, 2009, 2009, 2040, 1855, 1886,
+ 1886, 1917, 1917, 1948, 1948, 1979, 1979, 2010, 2010, 2041, 1887, 1918, 1918,
+ 1949, 1949, 1980, 1980, 2011, 2011, 2042, 1919, 1950, 1950, 1981, 1981, 2012,
+ 2012, 2043, 1951, 1982, 1982, 2013, 2013, 2044, 1983, 2014, 2014, 2045, 2015,
+ 2046, 0, 0
+};
+
+DECLARE_ALIGNED(16, static const int16_t,
+ default_scan_64x32_neighbors[2049 * MAX_NEIGHBORS]) = {
+ 0, 0, 0, 0, 0, 0, 1, 1, 1, 64, 64, 64, 2,
+ 2, 2, 65, 65, 128, 128, 128, 3, 3, 3, 66, 66, 129,
+ 129, 192, 192, 192, 4, 4, 4, 67, 67, 130, 130, 193, 193,
+ 256, 256, 256, 5, 5, 5, 68, 68, 131, 131, 194, 194, 257,
+ 257, 320, 320, 320, 6, 6, 6, 69, 69, 132, 132, 195, 195,
+ 258, 258, 321, 321, 384, 384, 384, 7, 7, 7, 70, 70, 133,
+ 133, 196, 196, 259, 259, 322, 322, 385, 385, 448, 448, 448, 8,
+ 8, 8, 71, 71, 134, 134, 197, 197, 260, 260, 323, 323, 386,
+ 386, 449, 449, 512, 512, 512, 9, 9, 9, 72, 72, 135, 135,
+ 198, 198, 261, 261, 324, 324, 387, 387, 450, 450, 513, 513, 576,
+ 576, 576, 10, 10, 10, 73, 73, 136, 136, 199, 199, 262, 262,
+ 325, 325, 388, 388, 451, 451, 514, 514, 577, 577, 640, 640, 640,
+ 11, 11, 11, 74, 74, 137, 137, 200, 200, 263, 263, 326, 326,
+ 389, 389, 452, 452, 515, 515, 578, 578, 641, 641, 704, 704, 704,
+ 12, 12, 12, 75, 75, 138, 138, 201, 201, 264, 264, 327, 327,
+ 390, 390, 453, 453, 516, 516, 579, 579, 642, 642, 705, 705, 768,
+ 768, 768, 13, 13, 13, 76, 76, 139, 139, 202, 202, 265, 265,
+ 328, 328, 391, 391, 454, 454, 517, 517, 580, 580, 643, 643, 706,
+ 706, 769, 769, 832, 832, 832, 14, 14, 14, 77, 77, 140, 140,
+ 203, 203, 266, 266, 329, 329, 392, 392, 455, 455, 518, 518, 581,
+ 581, 644, 644, 707, 707, 770, 770, 833, 833, 896, 896, 896, 15,
+ 15, 15, 78, 78, 141, 141, 204, 204, 267, 267, 330, 330, 393,
+ 393, 456, 456, 519, 519, 582, 582, 645, 645, 708, 708, 771, 771,
+ 834, 834, 897, 897, 960, 960, 960, 16, 16, 16, 79, 79, 142,
+ 142, 205, 205, 268, 268, 331, 331, 394, 394, 457, 457, 520, 520,
+ 583, 583, 646, 646, 709, 709, 772, 772, 835, 835, 898, 898, 961,
+ 961, 1024, 1024, 1024, 17, 17, 17, 80, 80, 143, 143, 206, 206,
+ 269, 269, 332, 332, 395, 395, 458, 458, 521, 521, 584, 584, 647,
+ 647, 710, 710, 773, 773, 836, 836, 899, 899, 962, 962, 1025, 1025,
+ 1088, 1088, 1088, 18, 18, 18, 81, 81, 144, 144, 207, 207, 270,
+ 270, 333, 333, 396, 396, 459, 459, 522, 522, 585, 585, 648, 648,
+ 711, 711, 774, 774, 837, 837, 900, 900, 963, 963, 1026, 1026, 1089,
+ 1089, 1152, 1152, 1152, 19, 19, 19, 82, 82, 145, 145, 208, 208,
+ 271, 271, 334, 334, 397, 397, 460, 460, 523, 523, 586, 586, 649,
+ 649, 712, 712, 775, 775, 838, 838, 901, 901, 964, 964, 1027, 1027,
+ 1090, 1090, 1153, 1153, 1216, 1216, 1216, 20, 20, 20, 83, 83, 146,
+ 146, 209, 209, 272, 272, 335, 335, 398, 398, 461, 461, 524, 524,
+ 587, 587, 650, 650, 713, 713, 776, 776, 839, 839, 902, 902, 965,
+ 965, 1028, 1028, 1091, 1091, 1154, 1154, 1217, 1217, 1280, 1280, 1280, 21,
+ 21, 21, 84, 84, 147, 147, 210, 210, 273, 273, 336, 336, 399,
+ 399, 462, 462, 525, 525, 588, 588, 651, 651, 714, 714, 777, 777,
+ 840, 840, 903, 903, 966, 966, 1029, 1029, 1092, 1092, 1155, 1155, 1218,
+ 1218, 1281, 1281, 1344, 1344, 1344, 22, 22, 22, 85, 85, 148, 148,
+ 211, 211, 274, 274, 337, 337, 400, 400, 463, 463, 526, 526, 589,
+ 589, 652, 652, 715, 715, 778, 778, 841, 841, 904, 904, 967, 967,
+ 1030, 1030, 1093, 1093, 1156, 1156, 1219, 1219, 1282, 1282, 1345, 1345, 1408,
+ 1408, 1408, 23, 23, 23, 86, 86, 149, 149, 212, 212, 275, 275,
+ 338, 338, 401, 401, 464, 464, 527, 527, 590, 590, 653, 653, 716,
+ 716, 779, 779, 842, 842, 905, 905, 968, 968, 1031, 1031, 1094, 1094,
+ 1157, 1157, 1220, 1220, 1283, 1283, 1346, 1346, 1409, 1409, 1472, 1472, 1472,
+ 24, 24, 24, 87, 87, 150, 150, 213, 213, 276, 276, 339, 339,
+ 402, 402, 465, 465, 528, 528, 591, 591, 654, 654, 717, 717, 780,
+ 780, 843, 843, 906, 906, 969, 969, 1032, 1032, 1095, 1095, 1158, 1158,
+ 1221, 1221, 1284, 1284, 1347, 1347, 1410, 1410, 1473, 1473, 1536, 1536, 1536,
+ 25, 25, 25, 88, 88, 151, 151, 214, 214, 277, 277, 340, 340,
+ 403, 403, 466, 466, 529, 529, 592, 592, 655, 655, 718, 718, 781,
+ 781, 844, 844, 907, 907, 970, 970, 1033, 1033, 1096, 1096, 1159, 1159,
+ 1222, 1222, 1285, 1285, 1348, 1348, 1411, 1411, 1474, 1474, 1537, 1537, 1600,
+ 1600, 1600, 26, 26, 26, 89, 89, 152, 152, 215, 215, 278, 278,
+ 341, 341, 404, 404, 467, 467, 530, 530, 593, 593, 656, 656, 719,
+ 719, 782, 782, 845, 845, 908, 908, 971, 971, 1034, 1034, 1097, 1097,
+ 1160, 1160, 1223, 1223, 1286, 1286, 1349, 1349, 1412, 1412, 1475, 1475, 1538,
+ 1538, 1601, 1601, 1664, 1664, 1664, 27, 27, 27, 90, 90, 153, 153,
+ 216, 216, 279, 279, 342, 342, 405, 405, 468, 468, 531, 531, 594,
+ 594, 657, 657, 720, 720, 783, 783, 846, 846, 909, 909, 972, 972,
+ 1035, 1035, 1098, 1098, 1161, 1161, 1224, 1224, 1287, 1287, 1350, 1350, 1413,
+ 1413, 1476, 1476, 1539, 1539, 1602, 1602, 1665, 1665, 1728, 1728, 1728, 28,
+ 28, 28, 91, 91, 154, 154, 217, 217, 280, 280, 343, 343, 406,
+ 406, 469, 469, 532, 532, 595, 595, 658, 658, 721, 721, 784, 784,
+ 847, 847, 910, 910, 973, 973, 1036, 1036, 1099, 1099, 1162, 1162, 1225,
+ 1225, 1288, 1288, 1351, 1351, 1414, 1414, 1477, 1477, 1540, 1540, 1603, 1603,
+ 1666, 1666, 1729, 1729, 1792, 1792, 1792, 29, 29, 29, 92, 92, 155,
+ 155, 218, 218, 281, 281, 344, 344, 407, 407, 470, 470, 533, 533,
+ 596, 596, 659, 659, 722, 722, 785, 785, 848, 848, 911, 911, 974,
+ 974, 1037, 1037, 1100, 1100, 1163, 1163, 1226, 1226, 1289, 1289, 1352, 1352,
+ 1415, 1415, 1478, 1478, 1541, 1541, 1604, 1604, 1667, 1667, 1730, 1730, 1793,
+ 1793, 1856, 1856, 1856, 30, 30, 30, 93, 93, 156, 156, 219, 219,
+ 282, 282, 345, 345, 408, 408, 471, 471, 534, 534, 597, 597, 660,
+ 660, 723, 723, 786, 786, 849, 849, 912, 912, 975, 975, 1038, 1038,
+ 1101, 1101, 1164, 1164, 1227, 1227, 1290, 1290, 1353, 1353, 1416, 1416, 1479,
+ 1479, 1542, 1542, 1605, 1605, 1668, 1668, 1731, 1731, 1794, 1794, 1857, 1857,
+ 1920, 1920, 1920, 31, 31, 31, 94, 94, 157, 157, 220, 220, 283,
+ 283, 346, 346, 409, 409, 472, 472, 535, 535, 598, 598, 661, 661,
+ 724, 724, 787, 787, 850, 850, 913, 913, 976, 976, 1039, 1039, 1102,
+ 1102, 1165, 1165, 1228, 1228, 1291, 1291, 1354, 1354, 1417, 1417, 1480, 1480,
+ 1543, 1543, 1606, 1606, 1669, 1669, 1732, 1732, 1795, 1795, 1858, 1858, 1921,
+ 1921, 1984, 32, 32, 32, 95, 95, 158, 158, 221, 221, 284, 284,
+ 347, 347, 410, 410, 473, 473, 536, 536, 599, 599, 662, 662, 725,
+ 725, 788, 788, 851, 851, 914, 914, 977, 977, 1040, 1040, 1103, 1103,
+ 1166, 1166, 1229, 1229, 1292, 1292, 1355, 1355, 1418, 1418, 1481, 1481, 1544,
+ 1544, 1607, 1607, 1670, 1670, 1733, 1733, 1796, 1796, 1859, 1859, 1922, 1922,
+ 1985, 33, 33, 33, 96, 96, 159, 159, 222, 222, 285, 285, 348,
+ 348, 411, 411, 474, 474, 537, 537, 600, 600, 663, 663, 726, 726,
+ 789, 789, 852, 852, 915, 915, 978, 978, 1041, 1041, 1104, 1104, 1167,
+ 1167, 1230, 1230, 1293, 1293, 1356, 1356, 1419, 1419, 1482, 1482, 1545, 1545,
+ 1608, 1608, 1671, 1671, 1734, 1734, 1797, 1797, 1860, 1860, 1923, 1923, 1986,
+ 34, 34, 34, 97, 97, 160, 160, 223, 223, 286, 286, 349, 349,
+ 412, 412, 475, 475, 538, 538, 601, 601, 664, 664, 727, 727, 790,
+ 790, 853, 853, 916, 916, 979, 979, 1042, 1042, 1105, 1105, 1168, 1168,
+ 1231, 1231, 1294, 1294, 1357, 1357, 1420, 1420, 1483, 1483, 1546, 1546, 1609,
+ 1609, 1672, 1672, 1735, 1735, 1798, 1798, 1861, 1861, 1924, 1924, 1987, 35,
+ 35, 35, 98, 98, 161, 161, 224, 224, 287, 287, 350, 350, 413,
+ 413, 476, 476, 539, 539, 602, 602, 665, 665, 728, 728, 791, 791,
+ 854, 854, 917, 917, 980, 980, 1043, 1043, 1106, 1106, 1169, 1169, 1232,
+ 1232, 1295, 1295, 1358, 1358, 1421, 1421, 1484, 1484, 1547, 1547, 1610, 1610,
+ 1673, 1673, 1736, 1736, 1799, 1799, 1862, 1862, 1925, 1925, 1988, 36, 36,
+ 36, 99, 99, 162, 162, 225, 225, 288, 288, 351, 351, 414, 414,
+ 477, 477, 540, 540, 603, 603, 666, 666, 729, 729, 792, 792, 855,
+ 855, 918, 918, 981, 981, 1044, 1044, 1107, 1107, 1170, 1170, 1233, 1233,
+ 1296, 1296, 1359, 1359, 1422, 1422, 1485, 1485, 1548, 1548, 1611, 1611, 1674,
+ 1674, 1737, 1737, 1800, 1800, 1863, 1863, 1926, 1926, 1989, 37, 37, 37,
+ 100, 100, 163, 163, 226, 226, 289, 289, 352, 352, 415, 415, 478,
+ 478, 541, 541, 604, 604, 667, 667, 730, 730, 793, 793, 856, 856,
+ 919, 919, 982, 982, 1045, 1045, 1108, 1108, 1171, 1171, 1234, 1234, 1297,
+ 1297, 1360, 1360, 1423, 1423, 1486, 1486, 1549, 1549, 1612, 1612, 1675, 1675,
+ 1738, 1738, 1801, 1801, 1864, 1864, 1927, 1927, 1990, 38, 38, 38, 101,
+ 101, 164, 164, 227, 227, 290, 290, 353, 353, 416, 416, 479, 479,
+ 542, 542, 605, 605, 668, 668, 731, 731, 794, 794, 857, 857, 920,
+ 920, 983, 983, 1046, 1046, 1109, 1109, 1172, 1172, 1235, 1235, 1298, 1298,
+ 1361, 1361, 1424, 1424, 1487, 1487, 1550, 1550, 1613, 1613, 1676, 1676, 1739,
+ 1739, 1802, 1802, 1865, 1865, 1928, 1928, 1991, 39, 39, 39, 102, 102,
+ 165, 165, 228, 228, 291, 291, 354, 354, 417, 417, 480, 480, 543,
+ 543, 606, 606, 669, 669, 732, 732, 795, 795, 858, 858, 921, 921,
+ 984, 984, 1047, 1047, 1110, 1110, 1173, 1173, 1236, 1236, 1299, 1299, 1362,
+ 1362, 1425, 1425, 1488, 1488, 1551, 1551, 1614, 1614, 1677, 1677, 1740, 1740,
+ 1803, 1803, 1866, 1866, 1929, 1929, 1992, 40, 40, 40, 103, 103, 166,
+ 166, 229, 229, 292, 292, 355, 355, 418, 418, 481, 481, 544, 544,
+ 607, 607, 670, 670, 733, 733, 796, 796, 859, 859, 922, 922, 985,
+ 985, 1048, 1048, 1111, 1111, 1174, 1174, 1237, 1237, 1300, 1300, 1363, 1363,
+ 1426, 1426, 1489, 1489, 1552, 1552, 1615, 1615, 1678, 1678, 1741, 1741, 1804,
+ 1804, 1867, 1867, 1930, 1930, 1993, 41, 41, 41, 104, 104, 167, 167,
+ 230, 230, 293, 293, 356, 356, 419, 419, 482, 482, 545, 545, 608,
+ 608, 671, 671, 734, 734, 797, 797, 860, 860, 923, 923, 986, 986,
+ 1049, 1049, 1112, 1112, 1175, 1175, 1238, 1238, 1301, 1301, 1364, 1364, 1427,
+ 1427, 1490, 1490, 1553, 1553, 1616, 1616, 1679, 1679, 1742, 1742, 1805, 1805,
+ 1868, 1868, 1931, 1931, 1994, 42, 42, 42, 105, 105, 168, 168, 231,
+ 231, 294, 294, 357, 357, 420, 420, 483, 483, 546, 546, 609, 609,
+ 672, 672, 735, 735, 798, 798, 861, 861, 924, 924, 987, 987, 1050,
+ 1050, 1113, 1113, 1176, 1176, 1239, 1239, 1302, 1302, 1365, 1365, 1428, 1428,
+ 1491, 1491, 1554, 1554, 1617, 1617, 1680, 1680, 1743, 1743, 1806, 1806, 1869,
+ 1869, 1932, 1932, 1995, 43, 43, 43, 106, 106, 169, 169, 232, 232,
+ 295, 295, 358, 358, 421, 421, 484, 484, 547, 547, 610, 610, 673,
+ 673, 736, 736, 799, 799, 862, 862, 925, 925, 988, 988, 1051, 1051,
+ 1114, 1114, 1177, 1177, 1240, 1240, 1303, 1303, 1366, 1366, 1429, 1429, 1492,
+ 1492, 1555, 1555, 1618, 1618, 1681, 1681, 1744, 1744, 1807, 1807, 1870, 1870,
+ 1933, 1933, 1996, 44, 44, 44, 107, 107, 170, 170, 233, 233, 296,
+ 296, 359, 359, 422, 422, 485, 485, 548, 548, 611, 611, 674, 674,
+ 737, 737, 800, 800, 863, 863, 926, 926, 989, 989, 1052, 1052, 1115,
+ 1115, 1178, 1178, 1241, 1241, 1304, 1304, 1367, 1367, 1430, 1430, 1493, 1493,
+ 1556, 1556, 1619, 1619, 1682, 1682, 1745, 1745, 1808, 1808, 1871, 1871, 1934,
+ 1934, 1997, 45, 45, 45, 108, 108, 171, 171, 234, 234, 297, 297,
+ 360, 360, 423, 423, 486, 486, 549, 549, 612, 612, 675, 675, 738,
+ 738, 801, 801, 864, 864, 927, 927, 990, 990, 1053, 1053, 1116, 1116,
+ 1179, 1179, 1242, 1242, 1305, 1305, 1368, 1368, 1431, 1431, 1494, 1494, 1557,
+ 1557, 1620, 1620, 1683, 1683, 1746, 1746, 1809, 1809, 1872, 1872, 1935, 1935,
+ 1998, 46, 46, 46, 109, 109, 172, 172, 235, 235, 298, 298, 361,
+ 361, 424, 424, 487, 487, 550, 550, 613, 613, 676, 676, 739, 739,
+ 802, 802, 865, 865, 928, 928, 991, 991, 1054, 1054, 1117, 1117, 1180,
+ 1180, 1243, 1243, 1306, 1306, 1369, 1369, 1432, 1432, 1495, 1495, 1558, 1558,
+ 1621, 1621, 1684, 1684, 1747, 1747, 1810, 1810, 1873, 1873, 1936, 1936, 1999,
+ 47, 47, 47, 110, 110, 173, 173, 236, 236, 299, 299, 362, 362,
+ 425, 425, 488, 488, 551, 551, 614, 614, 677, 677, 740, 740, 803,
+ 803, 866, 866, 929, 929, 992, 992, 1055, 1055, 1118, 1118, 1181, 1181,
+ 1244, 1244, 1307, 1307, 1370, 1370, 1433, 1433, 1496, 1496, 1559, 1559, 1622,
+ 1622, 1685, 1685, 1748, 1748, 1811, 1811, 1874, 1874, 1937, 1937, 2000, 48,
+ 48, 48, 111, 111, 174, 174, 237, 237, 300, 300, 363, 363, 426,
+ 426, 489, 489, 552, 552, 615, 615, 678, 678, 741, 741, 804, 804,
+ 867, 867, 930, 930, 993, 993, 1056, 1056, 1119, 1119, 1182, 1182, 1245,
+ 1245, 1308, 1308, 1371, 1371, 1434, 1434, 1497, 1497, 1560, 1560, 1623, 1623,
+ 1686, 1686, 1749, 1749, 1812, 1812, 1875, 1875, 1938, 1938, 2001, 49, 49,
+ 49, 112, 112, 175, 175, 238, 238, 301, 301, 364, 364, 427, 427,
+ 490, 490, 553, 553, 616, 616, 679, 679, 742, 742, 805, 805, 868,
+ 868, 931, 931, 994, 994, 1057, 1057, 1120, 1120, 1183, 1183, 1246, 1246,
+ 1309, 1309, 1372, 1372, 1435, 1435, 1498, 1498, 1561, 1561, 1624, 1624, 1687,
+ 1687, 1750, 1750, 1813, 1813, 1876, 1876, 1939, 1939, 2002, 50, 50, 50,
+ 113, 113, 176, 176, 239, 239, 302, 302, 365, 365, 428, 428, 491,
+ 491, 554, 554, 617, 617, 680, 680, 743, 743, 806, 806, 869, 869,
+ 932, 932, 995, 995, 1058, 1058, 1121, 1121, 1184, 1184, 1247, 1247, 1310,
+ 1310, 1373, 1373, 1436, 1436, 1499, 1499, 1562, 1562, 1625, 1625, 1688, 1688,
+ 1751, 1751, 1814, 1814, 1877, 1877, 1940, 1940, 2003, 51, 51, 51, 114,
+ 114, 177, 177, 240, 240, 303, 303, 366, 366, 429, 429, 492, 492,
+ 555, 555, 618, 618, 681, 681, 744, 744, 807, 807, 870, 870, 933,
+ 933, 996, 996, 1059, 1059, 1122, 1122, 1185, 1185, 1248, 1248, 1311, 1311,
+ 1374, 1374, 1437, 1437, 1500, 1500, 1563, 1563, 1626, 1626, 1689, 1689, 1752,
+ 1752, 1815, 1815, 1878, 1878, 1941, 1941, 2004, 52, 52, 52, 115, 115,
+ 178, 178, 241, 241, 304, 304, 367, 367, 430, 430, 493, 493, 556,
+ 556, 619, 619, 682, 682, 745, 745, 808, 808, 871, 871, 934, 934,
+ 997, 997, 1060, 1060, 1123, 1123, 1186, 1186, 1249, 1249, 1312, 1312, 1375,
+ 1375, 1438, 1438, 1501, 1501, 1564, 1564, 1627, 1627, 1690, 1690, 1753, 1753,
+ 1816, 1816, 1879, 1879, 1942, 1942, 2005, 53, 53, 53, 116, 116, 179,
+ 179, 242, 242, 305, 305, 368, 368, 431, 431, 494, 494, 557, 557,
+ 620, 620, 683, 683, 746, 746, 809, 809, 872, 872, 935, 935, 998,
+ 998, 1061, 1061, 1124, 1124, 1187, 1187, 1250, 1250, 1313, 1313, 1376, 1376,
+ 1439, 1439, 1502, 1502, 1565, 1565, 1628, 1628, 1691, 1691, 1754, 1754, 1817,
+ 1817, 1880, 1880, 1943, 1943, 2006, 54, 54, 54, 117, 117, 180, 180,
+ 243, 243, 306, 306, 369, 369, 432, 432, 495, 495, 558, 558, 621,
+ 621, 684, 684, 747, 747, 810, 810, 873, 873, 936, 936, 999, 999,
+ 1062, 1062, 1125, 1125, 1188, 1188, 1251, 1251, 1314, 1314, 1377, 1377, 1440,
+ 1440, 1503, 1503, 1566, 1566, 1629, 1629, 1692, 1692, 1755, 1755, 1818, 1818,
+ 1881, 1881, 1944, 1944, 2007, 55, 55, 55, 118, 118, 181, 181, 244,
+ 244, 307, 307, 370, 370, 433, 433, 496, 496, 559, 559, 622, 622,
+ 685, 685, 748, 748, 811, 811, 874, 874, 937, 937, 1000, 1000, 1063,
+ 1063, 1126, 1126, 1189, 1189, 1252, 1252, 1315, 1315, 1378, 1378, 1441, 1441,
+ 1504, 1504, 1567, 1567, 1630, 1630, 1693, 1693, 1756, 1756, 1819, 1819, 1882,
+ 1882, 1945, 1945, 2008, 56, 56, 56, 119, 119, 182, 182, 245, 245,
+ 308, 308, 371, 371, 434, 434, 497, 497, 560, 560, 623, 623, 686,
+ 686, 749, 749, 812, 812, 875, 875, 938, 938, 1001, 1001, 1064, 1064,
+ 1127, 1127, 1190, 1190, 1253, 1253, 1316, 1316, 1379, 1379, 1442, 1442, 1505,
+ 1505, 1568, 1568, 1631, 1631, 1694, 1694, 1757, 1757, 1820, 1820, 1883, 1883,
+ 1946, 1946, 2009, 57, 57, 57, 120, 120, 183, 183, 246, 246, 309,
+ 309, 372, 372, 435, 435, 498, 498, 561, 561, 624, 624, 687, 687,
+ 750, 750, 813, 813, 876, 876, 939, 939, 1002, 1002, 1065, 1065, 1128,
+ 1128, 1191, 1191, 1254, 1254, 1317, 1317, 1380, 1380, 1443, 1443, 1506, 1506,
+ 1569, 1569, 1632, 1632, 1695, 1695, 1758, 1758, 1821, 1821, 1884, 1884, 1947,
+ 1947, 2010, 58, 58, 58, 121, 121, 184, 184, 247, 247, 310, 310,
+ 373, 373, 436, 436, 499, 499, 562, 562, 625, 625, 688, 688, 751,
+ 751, 814, 814, 877, 877, 940, 940, 1003, 1003, 1066, 1066, 1129, 1129,
+ 1192, 1192, 1255, 1255, 1318, 1318, 1381, 1381, 1444, 1444, 1507, 1507, 1570,
+ 1570, 1633, 1633, 1696, 1696, 1759, 1759, 1822, 1822, 1885, 1885, 1948, 1948,
+ 2011, 59, 59, 59, 122, 122, 185, 185, 248, 248, 311, 311, 374,
+ 374, 437, 437, 500, 500, 563, 563, 626, 626, 689, 689, 752, 752,
+ 815, 815, 878, 878, 941, 941, 1004, 1004, 1067, 1067, 1130, 1130, 1193,
+ 1193, 1256, 1256, 1319, 1319, 1382, 1382, 1445, 1445, 1508, 1508, 1571, 1571,
+ 1634, 1634, 1697, 1697, 1760, 1760, 1823, 1823, 1886, 1886, 1949, 1949, 2012,
+ 60, 60, 60, 123, 123, 186, 186, 249, 249, 312, 312, 375, 375,
+ 438, 438, 501, 501, 564, 564, 627, 627, 690, 690, 753, 753, 816,
+ 816, 879, 879, 942, 942, 1005, 1005, 1068, 1068, 1131, 1131, 1194, 1194,
+ 1257, 1257, 1320, 1320, 1383, 1383, 1446, 1446, 1509, 1509, 1572, 1572, 1635,
+ 1635, 1698, 1698, 1761, 1761, 1824, 1824, 1887, 1887, 1950, 1950, 2013, 61,
+ 61, 61, 124, 124, 187, 187, 250, 250, 313, 313, 376, 376, 439,
+ 439, 502, 502, 565, 565, 628, 628, 691, 691, 754, 754, 817, 817,
+ 880, 880, 943, 943, 1006, 1006, 1069, 1069, 1132, 1132, 1195, 1195, 1258,
+ 1258, 1321, 1321, 1384, 1384, 1447, 1447, 1510, 1510, 1573, 1573, 1636, 1636,
+ 1699, 1699, 1762, 1762, 1825, 1825, 1888, 1888, 1951, 1951, 2014, 62, 62,
+ 62, 125, 125, 188, 188, 251, 251, 314, 314, 377, 377, 440, 440,
+ 503, 503, 566, 566, 629, 629, 692, 692, 755, 755, 818, 818, 881,
+ 881, 944, 944, 1007, 1007, 1070, 1070, 1133, 1133, 1196, 1196, 1259, 1259,
+ 1322, 1322, 1385, 1385, 1448, 1448, 1511, 1511, 1574, 1574, 1637, 1637, 1700,
+ 1700, 1763, 1763, 1826, 1826, 1889, 1889, 1952, 1952, 2015, 63, 126, 126,
+ 189, 189, 252, 252, 315, 315, 378, 378, 441, 441, 504, 504, 567,
+ 567, 630, 630, 693, 693, 756, 756, 819, 819, 882, 882, 945, 945,
+ 1008, 1008, 1071, 1071, 1134, 1134, 1197, 1197, 1260, 1260, 1323, 1323, 1386,
+ 1386, 1449, 1449, 1512, 1512, 1575, 1575, 1638, 1638, 1701, 1701, 1764, 1764,
+ 1827, 1827, 1890, 1890, 1953, 1953, 2016, 127, 190, 190, 253, 253, 316,
+ 316, 379, 379, 442, 442, 505, 505, 568, 568, 631, 631, 694, 694,
+ 757, 757, 820, 820, 883, 883, 946, 946, 1009, 1009, 1072, 1072, 1135,
+ 1135, 1198, 1198, 1261, 1261, 1324, 1324, 1387, 1387, 1450, 1450, 1513, 1513,
+ 1576, 1576, 1639, 1639, 1702, 1702, 1765, 1765, 1828, 1828, 1891, 1891, 1954,
+ 1954, 2017, 191, 254, 254, 317, 317, 380, 380, 443, 443, 506, 506,
+ 569, 569, 632, 632, 695, 695, 758, 758, 821, 821, 884, 884, 947,
+ 947, 1010, 1010, 1073, 1073, 1136, 1136, 1199, 1199, 1262, 1262, 1325, 1325,
+ 1388, 1388, 1451, 1451, 1514, 1514, 1577, 1577, 1640, 1640, 1703, 1703, 1766,
+ 1766, 1829, 1829, 1892, 1892, 1955, 1955, 2018, 255, 318, 318, 381, 381,
+ 444, 444, 507, 507, 570, 570, 633, 633, 696, 696, 759, 759, 822,
+ 822, 885, 885, 948, 948, 1011, 1011, 1074, 1074, 1137, 1137, 1200, 1200,
+ 1263, 1263, 1326, 1326, 1389, 1389, 1452, 1452, 1515, 1515, 1578, 1578, 1641,
+ 1641, 1704, 1704, 1767, 1767, 1830, 1830, 1893, 1893, 1956, 1956, 2019, 319,
+ 382, 382, 445, 445, 508, 508, 571, 571, 634, 634, 697, 697, 760,
+ 760, 823, 823, 886, 886, 949, 949, 1012, 1012, 1075, 1075, 1138, 1138,
+ 1201, 1201, 1264, 1264, 1327, 1327, 1390, 1390, 1453, 1453, 1516, 1516, 1579,
+ 1579, 1642, 1642, 1705, 1705, 1768, 1768, 1831, 1831, 1894, 1894, 1957, 1957,
+ 2020, 383, 446, 446, 509, 509, 572, 572, 635, 635, 698, 698, 761,
+ 761, 824, 824, 887, 887, 950, 950, 1013, 1013, 1076, 1076, 1139, 1139,
+ 1202, 1202, 1265, 1265, 1328, 1328, 1391, 1391, 1454, 1454, 1517, 1517, 1580,
+ 1580, 1643, 1643, 1706, 1706, 1769, 1769, 1832, 1832, 1895, 1895, 1958, 1958,
+ 2021, 447, 510, 510, 573, 573, 636, 636, 699, 699, 762, 762, 825,
+ 825, 888, 888, 951, 951, 1014, 1014, 1077, 1077, 1140, 1140, 1203, 1203,
+ 1266, 1266, 1329, 1329, 1392, 1392, 1455, 1455, 1518, 1518, 1581, 1581, 1644,
+ 1644, 1707, 1707, 1770, 1770, 1833, 1833, 1896, 1896, 1959, 1959, 2022, 511,
+ 574, 574, 637, 637, 700, 700, 763, 763, 826, 826, 889, 889, 952,
+ 952, 1015, 1015, 1078, 1078, 1141, 1141, 1204, 1204, 1267, 1267, 1330, 1330,
+ 1393, 1393, 1456, 1456, 1519, 1519, 1582, 1582, 1645, 1645, 1708, 1708, 1771,
+ 1771, 1834, 1834, 1897, 1897, 1960, 1960, 2023, 575, 638, 638, 701, 701,
+ 764, 764, 827, 827, 890, 890, 953, 953, 1016, 1016, 1079, 1079, 1142,
+ 1142, 1205, 1205, 1268, 1268, 1331, 1331, 1394, 1394, 1457, 1457, 1520, 1520,
+ 1583, 1583, 1646, 1646, 1709, 1709, 1772, 1772, 1835, 1835, 1898, 1898, 1961,
+ 1961, 2024, 639, 702, 702, 765, 765, 828, 828, 891, 891, 954, 954,
+ 1017, 1017, 1080, 1080, 1143, 1143, 1206, 1206, 1269, 1269, 1332, 1332, 1395,
+ 1395, 1458, 1458, 1521, 1521, 1584, 1584, 1647, 1647, 1710, 1710, 1773, 1773,
+ 1836, 1836, 1899, 1899, 1962, 1962, 2025, 703, 766, 766, 829, 829, 892,
+ 892, 955, 955, 1018, 1018, 1081, 1081, 1144, 1144, 1207, 1207, 1270, 1270,
+ 1333, 1333, 1396, 1396, 1459, 1459, 1522, 1522, 1585, 1585, 1648, 1648, 1711,
+ 1711, 1774, 1774, 1837, 1837, 1900, 1900, 1963, 1963, 2026, 767, 830, 830,
+ 893, 893, 956, 956, 1019, 1019, 1082, 1082, 1145, 1145, 1208, 1208, 1271,
+ 1271, 1334, 1334, 1397, 1397, 1460, 1460, 1523, 1523, 1586, 1586, 1649, 1649,
+ 1712, 1712, 1775, 1775, 1838, 1838, 1901, 1901, 1964, 1964, 2027, 831, 894,
+ 894, 957, 957, 1020, 1020, 1083, 1083, 1146, 1146, 1209, 1209, 1272, 1272,
+ 1335, 1335, 1398, 1398, 1461, 1461, 1524, 1524, 1587, 1587, 1650, 1650, 1713,
+ 1713, 1776, 1776, 1839, 1839, 1902, 1902, 1965, 1965, 2028, 895, 958, 958,
+ 1021, 1021, 1084, 1084, 1147, 1147, 1210, 1210, 1273, 1273, 1336, 1336, 1399,
+ 1399, 1462, 1462, 1525, 1525, 1588, 1588, 1651, 1651, 1714, 1714, 1777, 1777,
+ 1840, 1840, 1903, 1903, 1966, 1966, 2029, 959, 1022, 1022, 1085, 1085, 1148,
+ 1148, 1211, 1211, 1274, 1274, 1337, 1337, 1400, 1400, 1463, 1463, 1526, 1526,
+ 1589, 1589, 1652, 1652, 1715, 1715, 1778, 1778, 1841, 1841, 1904, 1904, 1967,
+ 1967, 2030, 1023, 1086, 1086, 1149, 1149, 1212, 1212, 1275, 1275, 1338, 1338,
+ 1401, 1401, 1464, 1464, 1527, 1527, 1590, 1590, 1653, 1653, 1716, 1716, 1779,
+ 1779, 1842, 1842, 1905, 1905, 1968, 1968, 2031, 1087, 1150, 1150, 1213, 1213,
+ 1276, 1276, 1339, 1339, 1402, 1402, 1465, 1465, 1528, 1528, 1591, 1591, 1654,
+ 1654, 1717, 1717, 1780, 1780, 1843, 1843, 1906, 1906, 1969, 1969, 2032, 1151,
+ 1214, 1214, 1277, 1277, 1340, 1340, 1403, 1403, 1466, 1466, 1529, 1529, 1592,
+ 1592, 1655, 1655, 1718, 1718, 1781, 1781, 1844, 1844, 1907, 1907, 1970, 1970,
+ 2033, 1215, 1278, 1278, 1341, 1341, 1404, 1404, 1467, 1467, 1530, 1530, 1593,
+ 1593, 1656, 1656, 1719, 1719, 1782, 1782, 1845, 1845, 1908, 1908, 1971, 1971,
+ 2034, 1279, 1342, 1342, 1405, 1405, 1468, 1468, 1531, 1531, 1594, 1594, 1657,
+ 1657, 1720, 1720, 1783, 1783, 1846, 1846, 1909, 1909, 1972, 1972, 2035, 1343,
+ 1406, 1406, 1469, 1469, 1532, 1532, 1595, 1595, 1658, 1658, 1721, 1721, 1784,
+ 1784, 1847, 1847, 1910, 1910, 1973, 1973, 2036, 1407, 1470, 1470, 1533, 1533,
+ 1596, 1596, 1659, 1659, 1722, 1722, 1785, 1785, 1848, 1848, 1911, 1911, 1974,
+ 1974, 2037, 1471, 1534, 1534, 1597, 1597, 1660, 1660, 1723, 1723, 1786, 1786,
+ 1849, 1849, 1912, 1912, 1975, 1975, 2038, 1535, 1598, 1598, 1661, 1661, 1724,
+ 1724, 1787, 1787, 1850, 1850, 1913, 1913, 1976, 1976, 2039, 1599, 1662, 1662,
+ 1725, 1725, 1788, 1788, 1851, 1851, 1914, 1914, 1977, 1977, 2040, 1663, 1726,
+ 1726, 1789, 1789, 1852, 1852, 1915, 1915, 1978, 1978, 2041, 1727, 1790, 1790,
+ 1853, 1853, 1916, 1916, 1979, 1979, 2042, 1791, 1854, 1854, 1917, 1917, 1980,
+ 1980, 2043, 1855, 1918, 1918, 1981, 1981, 2044, 1919, 1982, 1982, 2045, 1983,
+ 2046, 0, 0
+};
+
+DECLARE_ALIGNED(16, static const int16_t,
default_scan_64x64_neighbors[4097 * MAX_NEIGHBORS]) = {
0, 0, 0, 0, 0, 0, 1, 64, 1, 1, 64, 64, 2,
65, 65, 128, 66, 129, 2, 2, 128, 128, 3, 66, 129, 192,
@@ -5398,6 +6360,328 @@ DECLARE_ALIGNED(16, static const int16_t, av1_qtr_iscan_32x32[1024]) = {
};
#if CONFIG_TX64X64
+DECLARE_ALIGNED(16, static const int16_t, av1_default_iscan_32x64[2048]) = {
+ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,
+ 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325,
+ 351, 378, 406, 435, 465, 496, 2, 4, 7, 11, 16, 22, 29,
+ 37, 46, 56, 67, 79, 92, 106, 121, 137, 154, 172, 191, 211,
+ 232, 254, 277, 301, 326, 352, 379, 407, 436, 466, 497, 528, 5,
+ 8, 12, 17, 23, 30, 38, 47, 57, 68, 80, 93, 107, 122,
+ 138, 155, 173, 192, 212, 233, 255, 278, 302, 327, 353, 380, 408,
+ 437, 467, 498, 529, 560, 9, 13, 18, 24, 31, 39, 48, 58,
+ 69, 81, 94, 108, 123, 139, 156, 174, 193, 213, 234, 256, 279,
+ 303, 328, 354, 381, 409, 438, 468, 499, 530, 561, 592, 14, 19,
+ 25, 32, 40, 49, 59, 70, 82, 95, 109, 124, 140, 157, 175,
+ 194, 214, 235, 257, 280, 304, 329, 355, 382, 410, 439, 469, 500,
+ 531, 562, 593, 624, 20, 26, 33, 41, 50, 60, 71, 83, 96,
+ 110, 125, 141, 158, 176, 195, 215, 236, 258, 281, 305, 330, 356,
+ 383, 411, 440, 470, 501, 532, 563, 594, 625, 656, 27, 34, 42,
+ 51, 61, 72, 84, 97, 111, 126, 142, 159, 177, 196, 216, 237,
+ 259, 282, 306, 331, 357, 384, 412, 441, 471, 502, 533, 564, 595,
+ 626, 657, 688, 35, 43, 52, 62, 73, 85, 98, 112, 127, 143,
+ 160, 178, 197, 217, 238, 260, 283, 307, 332, 358, 385, 413, 442,
+ 472, 503, 534, 565, 596, 627, 658, 689, 720, 44, 53, 63, 74,
+ 86, 99, 113, 128, 144, 161, 179, 198, 218, 239, 261, 284, 308,
+ 333, 359, 386, 414, 443, 473, 504, 535, 566, 597, 628, 659, 690,
+ 721, 752, 54, 64, 75, 87, 100, 114, 129, 145, 162, 180, 199,
+ 219, 240, 262, 285, 309, 334, 360, 387, 415, 444, 474, 505, 536,
+ 567, 598, 629, 660, 691, 722, 753, 784, 65, 76, 88, 101, 115,
+ 130, 146, 163, 181, 200, 220, 241, 263, 286, 310, 335, 361, 388,
+ 416, 445, 475, 506, 537, 568, 599, 630, 661, 692, 723, 754, 785,
+ 816, 77, 89, 102, 116, 131, 147, 164, 182, 201, 221, 242, 264,
+ 287, 311, 336, 362, 389, 417, 446, 476, 507, 538, 569, 600, 631,
+ 662, 693, 724, 755, 786, 817, 848, 90, 103, 117, 132, 148, 165,
+ 183, 202, 222, 243, 265, 288, 312, 337, 363, 390, 418, 447, 477,
+ 508, 539, 570, 601, 632, 663, 694, 725, 756, 787, 818, 849, 880,
+ 104, 118, 133, 149, 166, 184, 203, 223, 244, 266, 289, 313, 338,
+ 364, 391, 419, 448, 478, 509, 540, 571, 602, 633, 664, 695, 726,
+ 757, 788, 819, 850, 881, 912, 119, 134, 150, 167, 185, 204, 224,
+ 245, 267, 290, 314, 339, 365, 392, 420, 449, 479, 510, 541, 572,
+ 603, 634, 665, 696, 727, 758, 789, 820, 851, 882, 913, 944, 135,
+ 151, 168, 186, 205, 225, 246, 268, 291, 315, 340, 366, 393, 421,
+ 450, 480, 511, 542, 573, 604, 635, 666, 697, 728, 759, 790, 821,
+ 852, 883, 914, 945, 976, 152, 169, 187, 206, 226, 247, 269, 292,
+ 316, 341, 367, 394, 422, 451, 481, 512, 543, 574, 605, 636, 667,
+ 698, 729, 760, 791, 822, 853, 884, 915, 946, 977, 1008, 170, 188,
+ 207, 227, 248, 270, 293, 317, 342, 368, 395, 423, 452, 482, 513,
+ 544, 575, 606, 637, 668, 699, 730, 761, 792, 823, 854, 885, 916,
+ 947, 978, 1009, 1040, 189, 208, 228, 249, 271, 294, 318, 343, 369,
+ 396, 424, 453, 483, 514, 545, 576, 607, 638, 669, 700, 731, 762,
+ 793, 824, 855, 886, 917, 948, 979, 1010, 1041, 1072, 209, 229, 250,
+ 272, 295, 319, 344, 370, 397, 425, 454, 484, 515, 546, 577, 608,
+ 639, 670, 701, 732, 763, 794, 825, 856, 887, 918, 949, 980, 1011,
+ 1042, 1073, 1104, 230, 251, 273, 296, 320, 345, 371, 398, 426, 455,
+ 485, 516, 547, 578, 609, 640, 671, 702, 733, 764, 795, 826, 857,
+ 888, 919, 950, 981, 1012, 1043, 1074, 1105, 1136, 252, 274, 297, 321,
+ 346, 372, 399, 427, 456, 486, 517, 548, 579, 610, 641, 672, 703,
+ 734, 765, 796, 827, 858, 889, 920, 951, 982, 1013, 1044, 1075, 1106,
+ 1137, 1168, 275, 298, 322, 347, 373, 400, 428, 457, 487, 518, 549,
+ 580, 611, 642, 673, 704, 735, 766, 797, 828, 859, 890, 921, 952,
+ 983, 1014, 1045, 1076, 1107, 1138, 1169, 1200, 299, 323, 348, 374, 401,
+ 429, 458, 488, 519, 550, 581, 612, 643, 674, 705, 736, 767, 798,
+ 829, 860, 891, 922, 953, 984, 1015, 1046, 1077, 1108, 1139, 1170, 1201,
+ 1232, 324, 349, 375, 402, 430, 459, 489, 520, 551, 582, 613, 644,
+ 675, 706, 737, 768, 799, 830, 861, 892, 923, 954, 985, 1016, 1047,
+ 1078, 1109, 1140, 1171, 1202, 1233, 1264, 350, 376, 403, 431, 460, 490,
+ 521, 552, 583, 614, 645, 676, 707, 738, 769, 800, 831, 862, 893,
+ 924, 955, 986, 1017, 1048, 1079, 1110, 1141, 1172, 1203, 1234, 1265, 1296,
+ 377, 404, 432, 461, 491, 522, 553, 584, 615, 646, 677, 708, 739,
+ 770, 801, 832, 863, 894, 925, 956, 987, 1018, 1049, 1080, 1111, 1142,
+ 1173, 1204, 1235, 1266, 1297, 1328, 405, 433, 462, 492, 523, 554, 585,
+ 616, 647, 678, 709, 740, 771, 802, 833, 864, 895, 926, 957, 988,
+ 1019, 1050, 1081, 1112, 1143, 1174, 1205, 1236, 1267, 1298, 1329, 1360, 434,
+ 463, 493, 524, 555, 586, 617, 648, 679, 710, 741, 772, 803, 834,
+ 865, 896, 927, 958, 989, 1020, 1051, 1082, 1113, 1144, 1175, 1206, 1237,
+ 1268, 1299, 1330, 1361, 1392, 464, 494, 525, 556, 587, 618, 649, 680,
+ 711, 742, 773, 804, 835, 866, 897, 928, 959, 990, 1021, 1052, 1083,
+ 1114, 1145, 1176, 1207, 1238, 1269, 1300, 1331, 1362, 1393, 1424, 495, 526,
+ 557, 588, 619, 650, 681, 712, 743, 774, 805, 836, 867, 898, 929,
+ 960, 991, 1022, 1053, 1084, 1115, 1146, 1177, 1208, 1239, 1270, 1301, 1332,
+ 1363, 1394, 1425, 1456, 527, 558, 589, 620, 651, 682, 713, 744, 775,
+ 806, 837, 868, 899, 930, 961, 992, 1023, 1054, 1085, 1116, 1147, 1178,
+ 1209, 1240, 1271, 1302, 1333, 1364, 1395, 1426, 1457, 1488, 559, 590, 621,
+ 652, 683, 714, 745, 776, 807, 838, 869, 900, 931, 962, 993, 1024,
+ 1055, 1086, 1117, 1148, 1179, 1210, 1241, 1272, 1303, 1334, 1365, 1396, 1427,
+ 1458, 1489, 1520, 591, 622, 653, 684, 715, 746, 777, 808, 839, 870,
+ 901, 932, 963, 994, 1025, 1056, 1087, 1118, 1149, 1180, 1211, 1242, 1273,
+ 1304, 1335, 1366, 1397, 1428, 1459, 1490, 1521, 1552, 623, 654, 685, 716,
+ 747, 778, 809, 840, 871, 902, 933, 964, 995, 1026, 1057, 1088, 1119,
+ 1150, 1181, 1212, 1243, 1274, 1305, 1336, 1367, 1398, 1429, 1460, 1491, 1522,
+ 1553, 1583, 655, 686, 717, 748, 779, 810, 841, 872, 903, 934, 965,
+ 996, 1027, 1058, 1089, 1120, 1151, 1182, 1213, 1244, 1275, 1306, 1337, 1368,
+ 1399, 1430, 1461, 1492, 1523, 1554, 1584, 1613, 687, 718, 749, 780, 811,
+ 842, 873, 904, 935, 966, 997, 1028, 1059, 1090, 1121, 1152, 1183, 1214,
+ 1245, 1276, 1307, 1338, 1369, 1400, 1431, 1462, 1493, 1524, 1555, 1585, 1614,
+ 1642, 719, 750, 781, 812, 843, 874, 905, 936, 967, 998, 1029, 1060,
+ 1091, 1122, 1153, 1184, 1215, 1246, 1277, 1308, 1339, 1370, 1401, 1432, 1463,
+ 1494, 1525, 1556, 1586, 1615, 1643, 1670, 751, 782, 813, 844, 875, 906,
+ 937, 968, 999, 1030, 1061, 1092, 1123, 1154, 1185, 1216, 1247, 1278, 1309,
+ 1340, 1371, 1402, 1433, 1464, 1495, 1526, 1557, 1587, 1616, 1644, 1671, 1697,
+ 783, 814, 845, 876, 907, 938, 969, 1000, 1031, 1062, 1093, 1124, 1155,
+ 1186, 1217, 1248, 1279, 1310, 1341, 1372, 1403, 1434, 1465, 1496, 1527, 1558,
+ 1588, 1617, 1645, 1672, 1698, 1723, 815, 846, 877, 908, 939, 970, 1001,
+ 1032, 1063, 1094, 1125, 1156, 1187, 1218, 1249, 1280, 1311, 1342, 1373, 1404,
+ 1435, 1466, 1497, 1528, 1559, 1589, 1618, 1646, 1673, 1699, 1724, 1748, 847,
+ 878, 909, 940, 971, 1002, 1033, 1064, 1095, 1126, 1157, 1188, 1219, 1250,
+ 1281, 1312, 1343, 1374, 1405, 1436, 1467, 1498, 1529, 1560, 1590, 1619, 1647,
+ 1674, 1700, 1725, 1749, 1772, 879, 910, 941, 972, 1003, 1034, 1065, 1096,
+ 1127, 1158, 1189, 1220, 1251, 1282, 1313, 1344, 1375, 1406, 1437, 1468, 1499,
+ 1530, 1561, 1591, 1620, 1648, 1675, 1701, 1726, 1750, 1773, 1795, 911, 942,
+ 973, 1004, 1035, 1066, 1097, 1128, 1159, 1190, 1221, 1252, 1283, 1314, 1345,
+ 1376, 1407, 1438, 1469, 1500, 1531, 1562, 1592, 1621, 1649, 1676, 1702, 1727,
+ 1751, 1774, 1796, 1817, 943, 974, 1005, 1036, 1067, 1098, 1129, 1160, 1191,
+ 1222, 1253, 1284, 1315, 1346, 1377, 1408, 1439, 1470, 1501, 1532, 1563, 1593,
+ 1622, 1650, 1677, 1703, 1728, 1752, 1775, 1797, 1818, 1838, 975, 1006, 1037,
+ 1068, 1099, 1130, 1161, 1192, 1223, 1254, 1285, 1316, 1347, 1378, 1409, 1440,
+ 1471, 1502, 1533, 1564, 1594, 1623, 1651, 1678, 1704, 1729, 1753, 1776, 1798,
+ 1819, 1839, 1858, 1007, 1038, 1069, 1100, 1131, 1162, 1193, 1224, 1255, 1286,
+ 1317, 1348, 1379, 1410, 1441, 1472, 1503, 1534, 1565, 1595, 1624, 1652, 1679,
+ 1705, 1730, 1754, 1777, 1799, 1820, 1840, 1859, 1877, 1039, 1070, 1101, 1132,
+ 1163, 1194, 1225, 1256, 1287, 1318, 1349, 1380, 1411, 1442, 1473, 1504, 1535,
+ 1566, 1596, 1625, 1653, 1680, 1706, 1731, 1755, 1778, 1800, 1821, 1841, 1860,
+ 1878, 1895, 1071, 1102, 1133, 1164, 1195, 1226, 1257, 1288, 1319, 1350, 1381,
+ 1412, 1443, 1474, 1505, 1536, 1567, 1597, 1626, 1654, 1681, 1707, 1732, 1756,
+ 1779, 1801, 1822, 1842, 1861, 1879, 1896, 1912, 1103, 1134, 1165, 1196, 1227,
+ 1258, 1289, 1320, 1351, 1382, 1413, 1444, 1475, 1506, 1537, 1568, 1598, 1627,
+ 1655, 1682, 1708, 1733, 1757, 1780, 1802, 1823, 1843, 1862, 1880, 1897, 1913,
+ 1928, 1135, 1166, 1197, 1228, 1259, 1290, 1321, 1352, 1383, 1414, 1445, 1476,
+ 1507, 1538, 1569, 1599, 1628, 1656, 1683, 1709, 1734, 1758, 1781, 1803, 1824,
+ 1844, 1863, 1881, 1898, 1914, 1929, 1943, 1167, 1198, 1229, 1260, 1291, 1322,
+ 1353, 1384, 1415, 1446, 1477, 1508, 1539, 1570, 1600, 1629, 1657, 1684, 1710,
+ 1735, 1759, 1782, 1804, 1825, 1845, 1864, 1882, 1899, 1915, 1930, 1944, 1957,
+ 1199, 1230, 1261, 1292, 1323, 1354, 1385, 1416, 1447, 1478, 1509, 1540, 1571,
+ 1601, 1630, 1658, 1685, 1711, 1736, 1760, 1783, 1805, 1826, 1846, 1865, 1883,
+ 1900, 1916, 1931, 1945, 1958, 1970, 1231, 1262, 1293, 1324, 1355, 1386, 1417,
+ 1448, 1479, 1510, 1541, 1572, 1602, 1631, 1659, 1686, 1712, 1737, 1761, 1784,
+ 1806, 1827, 1847, 1866, 1884, 1901, 1917, 1932, 1946, 1959, 1971, 1982, 1263,
+ 1294, 1325, 1356, 1387, 1418, 1449, 1480, 1511, 1542, 1573, 1603, 1632, 1660,
+ 1687, 1713, 1738, 1762, 1785, 1807, 1828, 1848, 1867, 1885, 1902, 1918, 1933,
+ 1947, 1960, 1972, 1983, 1993, 1295, 1326, 1357, 1388, 1419, 1450, 1481, 1512,
+ 1543, 1574, 1604, 1633, 1661, 1688, 1714, 1739, 1763, 1786, 1808, 1829, 1849,
+ 1868, 1886, 1903, 1919, 1934, 1948, 1961, 1973, 1984, 1994, 2003, 1327, 1358,
+ 1389, 1420, 1451, 1482, 1513, 1544, 1575, 1605, 1634, 1662, 1689, 1715, 1740,
+ 1764, 1787, 1809, 1830, 1850, 1869, 1887, 1904, 1920, 1935, 1949, 1962, 1974,
+ 1985, 1995, 2004, 2012, 1359, 1390, 1421, 1452, 1483, 1514, 1545, 1576, 1606,
+ 1635, 1663, 1690, 1716, 1741, 1765, 1788, 1810, 1831, 1851, 1870, 1888, 1905,
+ 1921, 1936, 1950, 1963, 1975, 1986, 1996, 2005, 2013, 2020, 1391, 1422, 1453,
+ 1484, 1515, 1546, 1577, 1607, 1636, 1664, 1691, 1717, 1742, 1766, 1789, 1811,
+ 1832, 1852, 1871, 1889, 1906, 1922, 1937, 1951, 1964, 1976, 1987, 1997, 2006,
+ 2014, 2021, 2027, 1423, 1454, 1485, 1516, 1547, 1578, 1608, 1637, 1665, 1692,
+ 1718, 1743, 1767, 1790, 1812, 1833, 1853, 1872, 1890, 1907, 1923, 1938, 1952,
+ 1965, 1977, 1988, 1998, 2007, 2015, 2022, 2028, 2033, 1455, 1486, 1517, 1548,
+ 1579, 1609, 1638, 1666, 1693, 1719, 1744, 1768, 1791, 1813, 1834, 1854, 1873,
+ 1891, 1908, 1924, 1939, 1953, 1966, 1978, 1989, 1999, 2008, 2016, 2023, 2029,
+ 2034, 2038, 1487, 1518, 1549, 1580, 1610, 1639, 1667, 1694, 1720, 1745, 1769,
+ 1792, 1814, 1835, 1855, 1874, 1892, 1909, 1925, 1940, 1954, 1967, 1979, 1990,
+ 2000, 2009, 2017, 2024, 2030, 2035, 2039, 2042, 1519, 1550, 1581, 1611, 1640,
+ 1668, 1695, 1721, 1746, 1770, 1793, 1815, 1836, 1856, 1875, 1893, 1910, 1926,
+ 1941, 1955, 1968, 1980, 1991, 2001, 2010, 2018, 2025, 2031, 2036, 2040, 2043,
+ 2045, 1551, 1582, 1612, 1641, 1669, 1696, 1722, 1747, 1771, 1794, 1816, 1837,
+ 1857, 1876, 1894, 1911, 1927, 1942, 1956, 1969, 1981, 1992, 2002, 2011, 2019,
+ 2026, 2032, 2037, 2041, 2044, 2046, 2047,
+};
+
+DECLARE_ALIGNED(16, static const int16_t, av1_default_iscan_64x32[2048]) = {
+ 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,
+ 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325,
+ 351, 378, 406, 435, 465, 496, 528, 560, 592, 624, 656, 688, 720,
+ 752, 784, 816, 848, 880, 912, 944, 976, 1008, 1040, 1072, 1104, 1136,
+ 1168, 1200, 1232, 1264, 1296, 1328, 1360, 1392, 1424, 1456, 1488, 1520, 2,
+ 4, 7, 11, 16, 22, 29, 37, 46, 56, 67, 79, 92, 106,
+ 121, 137, 154, 172, 191, 211, 232, 254, 277, 301, 326, 352, 379,
+ 407, 436, 466, 497, 529, 561, 593, 625, 657, 689, 721, 753, 785,
+ 817, 849, 881, 913, 945, 977, 1009, 1041, 1073, 1105, 1137, 1169, 1201,
+ 1233, 1265, 1297, 1329, 1361, 1393, 1425, 1457, 1489, 1521, 1552, 5, 8,
+ 12, 17, 23, 30, 38, 47, 57, 68, 80, 93, 107, 122, 138,
+ 155, 173, 192, 212, 233, 255, 278, 302, 327, 353, 380, 408, 437,
+ 467, 498, 530, 562, 594, 626, 658, 690, 722, 754, 786, 818, 850,
+ 882, 914, 946, 978, 1010, 1042, 1074, 1106, 1138, 1170, 1202, 1234, 1266,
+ 1298, 1330, 1362, 1394, 1426, 1458, 1490, 1522, 1553, 1583, 9, 13, 18,
+ 24, 31, 39, 48, 58, 69, 81, 94, 108, 123, 139, 156, 174,
+ 193, 213, 234, 256, 279, 303, 328, 354, 381, 409, 438, 468, 499,
+ 531, 563, 595, 627, 659, 691, 723, 755, 787, 819, 851, 883, 915,
+ 947, 979, 1011, 1043, 1075, 1107, 1139, 1171, 1203, 1235, 1267, 1299, 1331,
+ 1363, 1395, 1427, 1459, 1491, 1523, 1554, 1584, 1613, 14, 19, 25, 32,
+ 40, 49, 59, 70, 82, 95, 109, 124, 140, 157, 175, 194, 214,
+ 235, 257, 280, 304, 329, 355, 382, 410, 439, 469, 500, 532, 564,
+ 596, 628, 660, 692, 724, 756, 788, 820, 852, 884, 916, 948, 980,
+ 1012, 1044, 1076, 1108, 1140, 1172, 1204, 1236, 1268, 1300, 1332, 1364, 1396,
+ 1428, 1460, 1492, 1524, 1555, 1585, 1614, 1642, 20, 26, 33, 41, 50,
+ 60, 71, 83, 96, 110, 125, 141, 158, 176, 195, 215, 236, 258,
+ 281, 305, 330, 356, 383, 411, 440, 470, 501, 533, 565, 597, 629,
+ 661, 693, 725, 757, 789, 821, 853, 885, 917, 949, 981, 1013, 1045,
+ 1077, 1109, 1141, 1173, 1205, 1237, 1269, 1301, 1333, 1365, 1397, 1429, 1461,
+ 1493, 1525, 1556, 1586, 1615, 1643, 1670, 27, 34, 42, 51, 61, 72,
+ 84, 97, 111, 126, 142, 159, 177, 196, 216, 237, 259, 282, 306,
+ 331, 357, 384, 412, 441, 471, 502, 534, 566, 598, 630, 662, 694,
+ 726, 758, 790, 822, 854, 886, 918, 950, 982, 1014, 1046, 1078, 1110,
+ 1142, 1174, 1206, 1238, 1270, 1302, 1334, 1366, 1398, 1430, 1462, 1494, 1526,
+ 1557, 1587, 1616, 1644, 1671, 1697, 35, 43, 52, 62, 73, 85, 98,
+ 112, 127, 143, 160, 178, 197, 217, 238, 260, 283, 307, 332, 358,
+ 385, 413, 442, 472, 503, 535, 567, 599, 631, 663, 695, 727, 759,
+ 791, 823, 855, 887, 919, 951, 983, 1015, 1047, 1079, 1111, 1143, 1175,
+ 1207, 1239, 1271, 1303, 1335, 1367, 1399, 1431, 1463, 1495, 1527, 1558, 1588,
+ 1617, 1645, 1672, 1698, 1723, 44, 53, 63, 74, 86, 99, 113, 128,
+ 144, 161, 179, 198, 218, 239, 261, 284, 308, 333, 359, 386, 414,
+ 443, 473, 504, 536, 568, 600, 632, 664, 696, 728, 760, 792, 824,
+ 856, 888, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240,
+ 1272, 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528, 1559, 1589, 1618, 1646,
+ 1673, 1699, 1724, 1748, 54, 64, 75, 87, 100, 114, 129, 145, 162,
+ 180, 199, 219, 240, 262, 285, 309, 334, 360, 387, 415, 444, 474,
+ 505, 537, 569, 601, 633, 665, 697, 729, 761, 793, 825, 857, 889,
+ 921, 953, 985, 1017, 1049, 1081, 1113, 1145, 1177, 1209, 1241, 1273, 1305,
+ 1337, 1369, 1401, 1433, 1465, 1497, 1529, 1560, 1590, 1619, 1647, 1674, 1700,
+ 1725, 1749, 1772, 65, 76, 88, 101, 115, 130, 146, 163, 181, 200,
+ 220, 241, 263, 286, 310, 335, 361, 388, 416, 445, 475, 506, 538,
+ 570, 602, 634, 666, 698, 730, 762, 794, 826, 858, 890, 922, 954,
+ 986, 1018, 1050, 1082, 1114, 1146, 1178, 1210, 1242, 1274, 1306, 1338, 1370,
+ 1402, 1434, 1466, 1498, 1530, 1561, 1591, 1620, 1648, 1675, 1701, 1726, 1750,
+ 1773, 1795, 77, 89, 102, 116, 131, 147, 164, 182, 201, 221, 242,
+ 264, 287, 311, 336, 362, 389, 417, 446, 476, 507, 539, 571, 603,
+ 635, 667, 699, 731, 763, 795, 827, 859, 891, 923, 955, 987, 1019,
+ 1051, 1083, 1115, 1147, 1179, 1211, 1243, 1275, 1307, 1339, 1371, 1403, 1435,
+ 1467, 1499, 1531, 1562, 1592, 1621, 1649, 1676, 1702, 1727, 1751, 1774, 1796,
+ 1817, 90, 103, 117, 132, 148, 165, 183, 202, 222, 243, 265, 288,
+ 312, 337, 363, 390, 418, 447, 477, 508, 540, 572, 604, 636, 668,
+ 700, 732, 764, 796, 828, 860, 892, 924, 956, 988, 1020, 1052, 1084,
+ 1116, 1148, 1180, 1212, 1244, 1276, 1308, 1340, 1372, 1404, 1436, 1468, 1500,
+ 1532, 1563, 1593, 1622, 1650, 1677, 1703, 1728, 1752, 1775, 1797, 1818, 1838,
+ 104, 118, 133, 149, 166, 184, 203, 223, 244, 266, 289, 313, 338,
+ 364, 391, 419, 448, 478, 509, 541, 573, 605, 637, 669, 701, 733,
+ 765, 797, 829, 861, 893, 925, 957, 989, 1021, 1053, 1085, 1117, 1149,
+ 1181, 1213, 1245, 1277, 1309, 1341, 1373, 1405, 1437, 1469, 1501, 1533, 1564,
+ 1594, 1623, 1651, 1678, 1704, 1729, 1753, 1776, 1798, 1819, 1839, 1858, 119,
+ 134, 150, 167, 185, 204, 224, 245, 267, 290, 314, 339, 365, 392,
+ 420, 449, 479, 510, 542, 574, 606, 638, 670, 702, 734, 766, 798,
+ 830, 862, 894, 926, 958, 990, 1022, 1054, 1086, 1118, 1150, 1182, 1214,
+ 1246, 1278, 1310, 1342, 1374, 1406, 1438, 1470, 1502, 1534, 1565, 1595, 1624,
+ 1652, 1679, 1705, 1730, 1754, 1777, 1799, 1820, 1840, 1859, 1877, 135, 151,
+ 168, 186, 205, 225, 246, 268, 291, 315, 340, 366, 393, 421, 450,
+ 480, 511, 543, 575, 607, 639, 671, 703, 735, 767, 799, 831, 863,
+ 895, 927, 959, 991, 1023, 1055, 1087, 1119, 1151, 1183, 1215, 1247, 1279,
+ 1311, 1343, 1375, 1407, 1439, 1471, 1503, 1535, 1566, 1596, 1625, 1653, 1680,
+ 1706, 1731, 1755, 1778, 1800, 1821, 1841, 1860, 1878, 1895, 152, 169, 187,
+ 206, 226, 247, 269, 292, 316, 341, 367, 394, 422, 451, 481, 512,
+ 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928,
+ 960, 992, 1024, 1056, 1088, 1120, 1152, 1184, 1216, 1248, 1280, 1312, 1344,
+ 1376, 1408, 1440, 1472, 1504, 1536, 1567, 1597, 1626, 1654, 1681, 1707, 1732,
+ 1756, 1779, 1801, 1822, 1842, 1861, 1879, 1896, 1912, 170, 188, 207, 227,
+ 248, 270, 293, 317, 342, 368, 395, 423, 452, 482, 513, 545, 577,
+ 609, 641, 673, 705, 737, 769, 801, 833, 865, 897, 929, 961, 993,
+ 1025, 1057, 1089, 1121, 1153, 1185, 1217, 1249, 1281, 1313, 1345, 1377, 1409,
+ 1441, 1473, 1505, 1537, 1568, 1598, 1627, 1655, 1682, 1708, 1733, 1757, 1780,
+ 1802, 1823, 1843, 1862, 1880, 1897, 1913, 1928, 189, 208, 228, 249, 271,
+ 294, 318, 343, 369, 396, 424, 453, 483, 514, 546, 578, 610, 642,
+ 674, 706, 738, 770, 802, 834, 866, 898, 930, 962, 994, 1026, 1058,
+ 1090, 1122, 1154, 1186, 1218, 1250, 1282, 1314, 1346, 1378, 1410, 1442, 1474,
+ 1506, 1538, 1569, 1599, 1628, 1656, 1683, 1709, 1734, 1758, 1781, 1803, 1824,
+ 1844, 1863, 1881, 1898, 1914, 1929, 1943, 209, 229, 250, 272, 295, 319,
+ 344, 370, 397, 425, 454, 484, 515, 547, 579, 611, 643, 675, 707,
+ 739, 771, 803, 835, 867, 899, 931, 963, 995, 1027, 1059, 1091, 1123,
+ 1155, 1187, 1219, 1251, 1283, 1315, 1347, 1379, 1411, 1443, 1475, 1507, 1539,
+ 1570, 1600, 1629, 1657, 1684, 1710, 1735, 1759, 1782, 1804, 1825, 1845, 1864,
+ 1882, 1899, 1915, 1930, 1944, 1957, 230, 251, 273, 296, 320, 345, 371,
+ 398, 426, 455, 485, 516, 548, 580, 612, 644, 676, 708, 740, 772,
+ 804, 836, 868, 900, 932, 964, 996, 1028, 1060, 1092, 1124, 1156, 1188,
+ 1220, 1252, 1284, 1316, 1348, 1380, 1412, 1444, 1476, 1508, 1540, 1571, 1601,
+ 1630, 1658, 1685, 1711, 1736, 1760, 1783, 1805, 1826, 1846, 1865, 1883, 1900,
+ 1916, 1931, 1945, 1958, 1970, 252, 274, 297, 321, 346, 372, 399, 427,
+ 456, 486, 517, 549, 581, 613, 645, 677, 709, 741, 773, 805, 837,
+ 869, 901, 933, 965, 997, 1029, 1061, 1093, 1125, 1157, 1189, 1221, 1253,
+ 1285, 1317, 1349, 1381, 1413, 1445, 1477, 1509, 1541, 1572, 1602, 1631, 1659,
+ 1686, 1712, 1737, 1761, 1784, 1806, 1827, 1847, 1866, 1884, 1901, 1917, 1932,
+ 1946, 1959, 1971, 1982, 275, 298, 322, 347, 373, 400, 428, 457, 487,
+ 518, 550, 582, 614, 646, 678, 710, 742, 774, 806, 838, 870, 902,
+ 934, 966, 998, 1030, 1062, 1094, 1126, 1158, 1190, 1222, 1254, 1286, 1318,
+ 1350, 1382, 1414, 1446, 1478, 1510, 1542, 1573, 1603, 1632, 1660, 1687, 1713,
+ 1738, 1762, 1785, 1807, 1828, 1848, 1867, 1885, 1902, 1918, 1933, 1947, 1960,
+ 1972, 1983, 1993, 299, 323, 348, 374, 401, 429, 458, 488, 519, 551,
+ 583, 615, 647, 679, 711, 743, 775, 807, 839, 871, 903, 935, 967,
+ 999, 1031, 1063, 1095, 1127, 1159, 1191, 1223, 1255, 1287, 1319, 1351, 1383,
+ 1415, 1447, 1479, 1511, 1543, 1574, 1604, 1633, 1661, 1688, 1714, 1739, 1763,
+ 1786, 1808, 1829, 1849, 1868, 1886, 1903, 1919, 1934, 1948, 1961, 1973, 1984,
+ 1994, 2003, 324, 349, 375, 402, 430, 459, 489, 520, 552, 584, 616,
+ 648, 680, 712, 744, 776, 808, 840, 872, 904, 936, 968, 1000, 1032,
+ 1064, 1096, 1128, 1160, 1192, 1224, 1256, 1288, 1320, 1352, 1384, 1416, 1448,
+ 1480, 1512, 1544, 1575, 1605, 1634, 1662, 1689, 1715, 1740, 1764, 1787, 1809,
+ 1830, 1850, 1869, 1887, 1904, 1920, 1935, 1949, 1962, 1974, 1985, 1995, 2004,
+ 2012, 350, 376, 403, 431, 460, 490, 521, 553, 585, 617, 649, 681,
+ 713, 745, 777, 809, 841, 873, 905, 937, 969, 1001, 1033, 1065, 1097,
+ 1129, 1161, 1193, 1225, 1257, 1289, 1321, 1353, 1385, 1417, 1449, 1481, 1513,
+ 1545, 1576, 1606, 1635, 1663, 1690, 1716, 1741, 1765, 1788, 1810, 1831, 1851,
+ 1870, 1888, 1905, 1921, 1936, 1950, 1963, 1975, 1986, 1996, 2005, 2013, 2020,
+ 377, 404, 432, 461, 491, 522, 554, 586, 618, 650, 682, 714, 746,
+ 778, 810, 842, 874, 906, 938, 970, 1002, 1034, 1066, 1098, 1130, 1162,
+ 1194, 1226, 1258, 1290, 1322, 1354, 1386, 1418, 1450, 1482, 1514, 1546, 1577,
+ 1607, 1636, 1664, 1691, 1717, 1742, 1766, 1789, 1811, 1832, 1852, 1871, 1889,
+ 1906, 1922, 1937, 1951, 1964, 1976, 1987, 1997, 2006, 2014, 2021, 2027, 405,
+ 433, 462, 492, 523, 555, 587, 619, 651, 683, 715, 747, 779, 811,
+ 843, 875, 907, 939, 971, 1003, 1035, 1067, 1099, 1131, 1163, 1195, 1227,
+ 1259, 1291, 1323, 1355, 1387, 1419, 1451, 1483, 1515, 1547, 1578, 1608, 1637,
+ 1665, 1692, 1718, 1743, 1767, 1790, 1812, 1833, 1853, 1872, 1890, 1907, 1923,
+ 1938, 1952, 1965, 1977, 1988, 1998, 2007, 2015, 2022, 2028, 2033, 434, 463,
+ 493, 524, 556, 588, 620, 652, 684, 716, 748, 780, 812, 844, 876,
+ 908, 940, 972, 1004, 1036, 1068, 1100, 1132, 1164, 1196, 1228, 1260, 1292,
+ 1324, 1356, 1388, 1420, 1452, 1484, 1516, 1548, 1579, 1609, 1638, 1666, 1693,
+ 1719, 1744, 1768, 1791, 1813, 1834, 1854, 1873, 1891, 1908, 1924, 1939, 1953,
+ 1966, 1978, 1989, 1999, 2008, 2016, 2023, 2029, 2034, 2038, 464, 494, 525,
+ 557, 589, 621, 653, 685, 717, 749, 781, 813, 845, 877, 909, 941,
+ 973, 1005, 1037, 1069, 1101, 1133, 1165, 1197, 1229, 1261, 1293, 1325, 1357,
+ 1389, 1421, 1453, 1485, 1517, 1549, 1580, 1610, 1639, 1667, 1694, 1720, 1745,
+ 1769, 1792, 1814, 1835, 1855, 1874, 1892, 1909, 1925, 1940, 1954, 1967, 1979,
+ 1990, 2000, 2009, 2017, 2024, 2030, 2035, 2039, 2042, 495, 526, 558, 590,
+ 622, 654, 686, 718, 750, 782, 814, 846, 878, 910, 942, 974, 1006,
+ 1038, 1070, 1102, 1134, 1166, 1198, 1230, 1262, 1294, 1326, 1358, 1390, 1422,
+ 1454, 1486, 1518, 1550, 1581, 1611, 1640, 1668, 1695, 1721, 1746, 1770, 1793,
+ 1815, 1836, 1856, 1875, 1893, 1910, 1926, 1941, 1955, 1968, 1980, 1991, 2001,
+ 2010, 2018, 2025, 2031, 2036, 2040, 2043, 2045, 527, 559, 591, 623, 655,
+ 687, 719, 751, 783, 815, 847, 879, 911, 943, 975, 1007, 1039, 1071,
+ 1103, 1135, 1167, 1199, 1231, 1263, 1295, 1327, 1359, 1391, 1423, 1455, 1487,
+ 1519, 1551, 1582, 1612, 1641, 1669, 1696, 1722, 1747, 1771, 1794, 1816, 1837,
+ 1857, 1876, 1894, 1911, 1927, 1942, 1956, 1969, 1981, 1992, 2002, 2011, 2019,
+ 2026, 2032, 2037, 2041, 2044, 2046, 2047,
+};
+
DECLARE_ALIGNED(16, static const int16_t, av1_default_iscan_64x64[4096]) = {
0, 1, 4, 9, 15, 22, 33, 43, 56, 71, 86, 104, 121,
142, 166, 189, 214, 239, 269, 300, 331, 363, 400, 435, 471, 510,
@@ -6040,6 +7324,82 @@ const SCAN_ORDER av1_intra_scan_orders[TX_SIZES_ALL][TX_TYPES] = {
{ mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
#endif // CONFIG_EXT_TX
},
+#if CONFIG_TX64X64
+ {
+ // TX_32X64
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+#if CONFIG_EXT_TX
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+#endif // CONFIG_EXT_TX
+ },
+ {
+ // TX_64X32
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+#if CONFIG_EXT_TX
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+#endif // CONFIG_EXT_TX
+ }
+#endif // CONFIG_TX64X64
};
const SCAN_ORDER av1_inter_scan_orders[TX_SIZES_ALL][TX_TYPES] = {
@@ -6361,6 +7721,82 @@ const SCAN_ORDER av1_inter_scan_orders[TX_SIZES_ALL][TX_TYPES] = {
{ mcol_scan_32x16, av1_mcol_iscan_32x16, mcol_scan_32x16_neighbors },
#endif // CONFIG_EXT_TX
},
+#if CONFIG_TX64X64
+ {
+ // TX_32X64
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+#if CONFIG_EXT_TX
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+ { default_scan_32x64, av1_default_iscan_32x64,
+ default_scan_32x64_neighbors },
+#endif // CONFIG_EXT_TX
+ },
+ {
+ // TX_64X32
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+#if CONFIG_EXT_TX
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+ { default_scan_64x32, av1_default_iscan_64x32,
+ default_scan_64x32_neighbors },
+#endif // CONFIG_EXT_TX
+ },
+#endif // CONFIG_TX64X64
{
// TX_4X16
{ default_scan_4x16, av1_default_iscan_4x16,
@@ -6604,6 +8040,151 @@ static INLINE int clamp_64(int64_t value, int low, int high) {
return value < low ? low : (value > high ? high : (int)value);
}
+#if USE_2X2_PROB
+static int do_down_sample(TX_SIZE tx_size) {
+ const int tx_w = tx_size_wide[tx_size];
+ const int tx_h = tx_size_high[tx_size];
+ if (tx_w > 8 || tx_h > 8) {
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+void av1_down_sample_scan_count(uint32_t *non_zero_count_ds,
+ const uint32_t *non_zero_count,
+ TX_SIZE tx_size) {
+ const int tx_w = tx_size_wide[tx_size];
+ const int tx_h = tx_size_high[tx_size];
+ if (tx_w > 8 && tx_h > 8) {
+ const int tx_w_ds = tx_w >> 1;
+ const int tx_h_ds = tx_h >> 1;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds << 1;
+ const int c = c_ds << 1;
+ const int ci = r * tx_w + c;
+ non_zero_count_ds[ci_ds] = non_zero_count[ci];
+ }
+ }
+ } else if (tx_w > 8 && tx_h <= 8) {
+ const int tx_w_ds = tx_w >> 1;
+ const int tx_h_ds = tx_h;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds;
+ const int c = c_ds << 1;
+ const int ci = r * tx_w + c;
+ non_zero_count_ds[ci_ds] = non_zero_count[ci];
+ }
+ }
+ } else if (tx_w <= 8 && tx_h > 8) {
+ const int tx_w_ds = tx_w;
+ const int tx_h_ds = tx_h >> 1;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds << 1;
+ const int c = c_ds;
+ const int ci = r * tx_w + c;
+ non_zero_count_ds[ci_ds] = non_zero_count[ci];
+ }
+ }
+ } else {
+ assert(0);
+ }
+}
+
+void av1_up_sample_scan_count(uint32_t *non_zero_count,
+ const uint32_t *non_zero_count_ds,
+ TX_SIZE tx_size, unsigned int block_num) {
+ const int tx_w = tx_size_wide[tx_size];
+ const int tx_h = tx_size_high[tx_size];
+ if (tx_w > 8 && tx_h > 8) {
+ const int tx_w_ds = tx_w >> 1;
+ const int tx_h_ds = tx_h >> 1;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds << 1;
+ const int c = c_ds << 1;
+ const int ci = r * tx_w + c;
+ non_zero_count[ci] = non_zero_count_ds[ci_ds];
+ if (c_ds + 1 < tx_w_ds) {
+ uint32_t count =
+ non_zero_count_ds[ci_ds] + non_zero_count_ds[ci_ds + 1];
+ count = ROUND_POWER_OF_TWO(count, 1);
+ count = clamp32u(count, 0, block_num);
+ non_zero_count[ci + 1] = count;
+ } else {
+ non_zero_count[ci + 1] = non_zero_count_ds[ci_ds];
+ }
+ }
+ }
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c = 0; c < tx_w; ++c) {
+ const int r = r_ds << 1;
+ const int ci = r * tx_w + c;
+ if (r + 2 < tx_h) {
+ uint32_t count = non_zero_count[ci] + non_zero_count[ci + 2 * tx_w];
+ count = ROUND_POWER_OF_TWO(count, 1);
+ count = clamp32u(count, 0, block_num);
+ non_zero_count[ci + tx_w] = count;
+ } else {
+ non_zero_count[ci + tx_w] = non_zero_count[ci];
+ }
+ }
+ }
+ } else if (tx_w > 8 && tx_h <= 8) {
+ const int tx_w_ds = tx_w >> 1;
+ const int tx_h_ds = tx_h;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds;
+ const int c = c_ds << 1;
+ const int ci = r * tx_w + c;
+ non_zero_count[ci] = non_zero_count_ds[ci_ds];
+ if (c_ds + 1 < tx_w_ds) {
+ uint32_t count =
+ non_zero_count_ds[ci_ds] + non_zero_count_ds[ci_ds + 1];
+ count = ROUND_POWER_OF_TWO(count, 1);
+ count = clamp32u(count, 0, block_num);
+ non_zero_count[ci + 1] = count;
+ } else {
+ non_zero_count[ci + 1] = non_zero_count_ds[ci_ds];
+ }
+ }
+ }
+ } else if (tx_w <= 8 && tx_h > 8) {
+ const int tx_w_ds = tx_w;
+ const int tx_h_ds = tx_h >> 1;
+ for (int r_ds = 0; r_ds < tx_h_ds; ++r_ds) {
+ for (int c_ds = 0; c_ds < tx_w_ds; ++c_ds) {
+ const int ci_ds = r_ds * tx_w_ds + c_ds;
+ const int r = r_ds << 1;
+ const int c = c_ds;
+ const int ci = r * tx_w + c;
+ non_zero_count[ci] = non_zero_count_ds[ci_ds];
+ if (r_ds + 1 < tx_h_ds) {
+ uint32_t count =
+ non_zero_count_ds[ci_ds] + non_zero_count_ds[ci_ds + tx_w_ds];
+ count = ROUND_POWER_OF_TWO(count, 1);
+ count = clamp32u(count, 0, block_num);
+ non_zero_count[ci + tx_w] = count;
+ } else {
+ non_zero_count[ci + tx_w] = non_zero_count_ds[ci_ds];
+ }
+ }
+ }
+ } else {
+ assert(0);
+ }
+}
+#endif
+
static void update_scan_prob(AV1_COMMON *cm, TX_SIZE tx_size, TX_TYPE tx_type,
int rate) {
FRAME_CONTEXT *pre_fc = cm->pre_fc;
@@ -6612,12 +8193,27 @@ static void update_scan_prob(AV1_COMMON *cm, TX_SIZE tx_size, TX_TYPE tx_type,
uint32_t *non_zero_count = get_non_zero_counts(&cm->counts, tx_size, tx_type);
const int tx2d_size = tx_size_2d[tx_size];
unsigned int block_num = cm->counts.txb_count[tx_size][tx_type];
+#if USE_2X2_PROB
+#if CONFIG_TX64X64
+ DECLARE_ALIGNED(16, uint32_t, non_zero_count_ds[1024]);
+ assert((tx2d_size >> 2) <= 1024);
+#else // CONFIG_TX64X64
+ DECLARE_ALIGNED(16, uint32_t, non_zero_count_ds[256]);
+ assert((tx2d_size >> 2) <= 256);
+#endif // CONFIG_TX64X64
+ if (do_down_sample(tx_size)) {
+ av1_down_sample_scan_count(non_zero_count_ds, non_zero_count, tx_size);
+ av1_up_sample_scan_count(non_zero_count, non_zero_count_ds, tx_size,
+ block_num);
+ }
+#endif
int i;
+ const int inv_precision = 30;
+ int32_t inv_block_num = block_num == 0 ? 0 : (1 << inv_precision) / block_num;
for (i = 0; i < tx2d_size; i++) {
int64_t curr_prob =
- block_num == 0
- ? 0
- : (non_zero_count[i] << ADAPT_SCAN_PROB_PRECISION) / block_num;
+ block_num == 0 ? 0 : ((non_zero_count[i] * inv_block_num) >>
+ (inv_precision - ADAPT_SCAN_PROB_PRECISION));
int64_t prev_prob = prev_non_zero_prob[i];
int64_t pred_prob =
(curr_prob * rate +
@@ -6643,10 +8239,12 @@ static void update_scan_count(int16_t *scan, int max_scan,
void av1_update_scan_count_facade(AV1_COMMON *cm, FRAME_COUNTS *counts,
TX_SIZE tx_size, TX_TYPE tx_type,
const tran_low_t *dqcoeffs, int max_scan) {
- int16_t *scan = get_adapt_scan(cm->fc, tx_size, tx_type);
- uint32_t *non_zero_count = get_non_zero_counts(counts, tx_size, tx_type);
- update_scan_count(scan, max_scan, dqcoeffs, non_zero_count);
- ++counts->txb_count[tx_size][tx_type];
+ if (cm->use_adapt_scan && do_adapt_scan(tx_size, tx_type)) {
+ int16_t *scan = get_adapt_scan(cm->fc, tx_size, tx_type);
+ uint32_t *non_zero_count = get_non_zero_counts(counts, tx_size, tx_type);
+ update_scan_count(scan, max_scan, dqcoeffs, non_zero_count);
+ ++counts->txb_count[tx_size][tx_type];
+ }
}
static int cmp_prob(const void *a, const void *b) {
@@ -6670,24 +8268,7 @@ void av1_augment_prob(TX_SIZE tx_size, TX_TYPE tx_type, uint32_t *prob) {
}
}
-// topological sort
-static void dfs_scan(int tx1d_size, int *scan_idx, int coeff_idx, int16_t *scan,
- int16_t *iscan) {
- const int r = coeff_idx / tx1d_size;
- const int c = coeff_idx % tx1d_size;
-
- if (iscan[coeff_idx] != -1) return;
-
- if (r > 0) dfs_scan(tx1d_size, scan_idx, coeff_idx - tx1d_size, scan, iscan);
-
- if (c > 0) dfs_scan(tx1d_size, scan_idx, coeff_idx - 1, scan, iscan);
-
- scan[*scan_idx] = coeff_idx;
- iscan[coeff_idx] = *scan_idx;
- ++(*scan_idx);
-}
-
-void av1_update_neighbors(int tx_size, const int16_t *scan,
+void av1_update_neighbors(TX_SIZE tx_size, const int16_t *scan,
const int16_t *iscan, int16_t *neighbors) {
const int tx1d_wide = tx_size_wide[tx_size];
const int tx1d_high = tx_size_high[tx_size];
@@ -6731,6 +8312,74 @@ void av1_update_neighbors(int tx_size, const int16_t *scan,
neighbors[tx2d_size * MAX_NEIGHBORS + 1] = scan[0];
}
+#if USE_LIMIT_SCAN_DISTANCE
+typedef struct SCAN_NB_QUEUE {
+ int nb_ci_queue[COEFF_IDX_SIZE + 1];
+ int pr_si_queue[COEFF_IDX_SIZE + 1];
+ int size;
+ int start;
+ int end;
+} SCAN_NB_QUEUE;
+
+static void assign_scan_idx(int16_t coeff_idx, int16_t *scan_idx, int tx_width,
+ int tx_height, int16_t *scan, int16_t *iscan,
+ int16_t *visit, SCAN_NB_QUEUE *queue) {
+ if (visit[coeff_idx] != 2) {
+ assert(*scan_idx < tx_width * tx_height);
+ scan[*scan_idx] = coeff_idx;
+ iscan[coeff_idx] = *scan_idx;
+ visit[coeff_idx] = 2;
+ int row = coeff_idx / tx_width;
+ int col = coeff_idx % tx_width;
+ int right_ci = coeff_idx + 1;
+ if (col + 1 < tx_width && visit[right_ci] == 0) {
+ visit[right_ci] = 1;
+ queue->pr_si_queue[queue->end] = *scan_idx;
+ queue->nb_ci_queue[queue->end] = right_ci;
+ queue->end = (queue->end + 1) % queue->size;
+ }
+ int down_ci = coeff_idx + tx_width;
+ if (row + 1 < tx_height && visit[down_ci] == 0) {
+ visit[down_ci] = 1;
+ queue->pr_si_queue[queue->end] = *scan_idx;
+ queue->nb_ci_queue[queue->end] = down_ci;
+ queue->end = (queue->end + 1) % queue->size;
+ }
+ ++(*scan_idx);
+ }
+}
+static void limit_nb_scan_distance(TX_SIZE tx_size, int16_t *scan,
+ int16_t *iscan) {
+ const int tx2d_size = tx_size_2d[tx_size];
+ int16_t visit[COEFF_IDX_SIZE] = { 0 };
+ int16_t org_scan[COEFF_IDX_SIZE];
+ memcpy(org_scan, scan, tx2d_size * sizeof(*scan));
+ const int tx_width = tx_size_wide[tx_size];
+ const int tx_height = tx_size_high[tx_size];
+ const int limit = 2 * AOMMAX(tx_width, tx_height);
+ SCAN_NB_QUEUE queue;
+ queue.size = tx2d_size;
+ queue.start = 0;
+ queue.end = 0;
+ int16_t new_si = 0;
+ for (int16_t si = 0; si < tx2d_size; ++si) {
+ while (queue.start != queue.end &&
+ queue.pr_si_queue[queue.start] + limit <= new_si) {
+ int nb_ci = queue.nb_ci_queue[queue.start];
+ assign_scan_idx(nb_ci, &new_si, tx_width, tx_height, scan, iscan, visit,
+ &queue);
+ queue.start = (queue.start + 1) % queue.size;
+ }
+
+ int16_t ci = org_scan[si];
+ assign_scan_idx(ci, &new_si, tx_width, tx_height, scan, iscan, visit,
+ &queue);
+ }
+ assert(new_si == tx2d_size);
+}
+#endif // USE_LIMIT_SCAN_DISTANCE
+
+#if USE_TOPOLOGICAL_SORT
void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type,
const uint32_t *non_zero_prob, int16_t *sort_order) {
const SCAN_ORDER *sc = get_default_scan(tx_size, tx_type, 0);
@@ -6749,6 +8398,23 @@ void av1_update_sort_order(TX_SIZE tx_size, TX_TYPE tx_type,
}
}
+// topological sort
+static void dfs_scan(int tx1d_size, int *scan_idx, int coeff_idx, int16_t *scan,
+ int16_t *iscan) {
+ const int r = coeff_idx / tx1d_size;
+ const int c = coeff_idx % tx1d_size;
+
+ if (iscan[coeff_idx] != -1) return;
+
+ if (r > 0) dfs_scan(tx1d_size, scan_idx, coeff_idx - tx1d_size, scan, iscan);
+
+ if (c > 0) dfs_scan(tx1d_size, scan_idx, coeff_idx - 1, scan, iscan);
+
+ scan[*scan_idx] = coeff_idx;
+ iscan[coeff_idx] = *scan_idx;
+ ++(*scan_idx);
+}
+
void av1_update_scan_order(TX_SIZE tx_size, int16_t *sort_order, int16_t *scan,
int16_t *iscan) {
int coeff_idx;
@@ -6767,17 +8433,66 @@ void av1_update_scan_order(TX_SIZE tx_size, int16_t *sort_order, int16_t *scan,
dfs_scan(tx1d_size, &scan_idx, coeff_idx, scan, iscan);
}
}
+#else
+
+static void filter_prob(TX_SIZE tx_size, uint32_t *prob) {
+ const int tx1d_wide = tx_size_wide[tx_size];
+ const int tx1d_high = tx_size_high[tx_size];
+ for (int r = tx1d_high - 1; r >= 0; --r) {
+ for (int c = tx1d_wide - 1; c >= 0; --c) {
+ int idx = r * tx1d_wide + c;
+ uint32_t v = prob[idx];
+ if (r > 0 && prob[idx - tx1d_wide] < v) prob[idx - tx1d_wide] = v;
+ if (c > 0 && prob[idx - 1] < v) prob[idx - 1] = v;
+ }
+ }
+}
+
+void av1_update_scan_order(TX_SIZE tx_size, TX_TYPE tx_type,
+ uint32_t *non_zero_prob, int16_t *scan,
+ int16_t *iscan) {
+ const SCAN_ORDER *sc = get_default_scan(tx_size, tx_type, 0);
+ uint32_t temp[COEFF_IDX_SIZE];
+ const int tx2d_size = tx_size_2d[tx_size];
+ int scan_idx;
+ assert(tx2d_size <= COEFF_IDX_SIZE);
+ memcpy(temp, non_zero_prob, tx2d_size * sizeof(*non_zero_prob));
+ filter_prob(tx_size, temp);
+ av1_augment_prob(tx_size, tx_type, temp);
+ qsort(temp, tx2d_size, sizeof(*temp), cmp_prob);
+ for (scan_idx = 0; scan_idx < tx2d_size; ++scan_idx) {
+ const int default_scan_idx =
+ (temp[scan_idx] & COEFF_IDX_MASK) ^ COEFF_IDX_MASK;
+ const int coeff_idx = sc->scan[default_scan_idx];
+ scan[scan_idx] = coeff_idx;
+ iscan[coeff_idx] = scan_idx;
+ }
+}
+#endif
static void update_scan_order_facade(AV1_COMMON *cm, TX_SIZE tx_size,
- TX_TYPE tx_type) {
+ TX_TYPE tx_type, int use_curr_frame) {
+#if USE_TOPOLOGICAL_SORT
int16_t sort_order[COEFF_IDX_SIZE];
- uint32_t *non_zero_prob = get_non_zero_prob(cm->fc, tx_size, tx_type);
+#endif
+ uint32_t *non_zero_prob;
+ if (use_curr_frame)
+ non_zero_prob = get_non_zero_prob(cm->fc, tx_size, tx_type);
+ else
+ non_zero_prob = get_non_zero_prob(cm->pre_fc, tx_size, tx_type);
int16_t *scan = get_adapt_scan(cm->fc, tx_size, tx_type);
int16_t *iscan = get_adapt_iscan(cm->fc, tx_size, tx_type);
int16_t *nb = get_adapt_nb(cm->fc, tx_size, tx_type);
assert(tx_size_2d[tx_size] <= COEFF_IDX_SIZE);
+#if USE_TOPOLOGICAL_SORT
av1_update_sort_order(tx_size, tx_type, non_zero_prob, sort_order);
av1_update_scan_order(tx_size, sort_order, scan, iscan);
+#else
+ av1_update_scan_order(tx_size, tx_type, non_zero_prob, scan, iscan);
+#endif
+#if USE_LIMIT_SCAN_DISTANCE
+ limit_nb_scan_distance(tx_size, scan, iscan);
+#endif // USE_LIMIT_SCAN_DISTANCE
av1_update_neighbors(tx_size, scan, iscan, nb);
}
@@ -6819,36 +8534,48 @@ void av1_init_scan_order(AV1_COMMON *cm) {
if (tx_size >= TX_SIZES) continue;
#endif // CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
for (tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) {
- uint32_t *non_zero_prob = get_non_zero_prob(cm->fc, tx_size, tx_type);
- const int tx2d_size = tx_size_2d[tx_size];
- int i;
- SCAN_ORDER *sc = &cm->fc->sc[tx_size][tx_type];
- for (i = 0; i < tx2d_size; ++i) {
- non_zero_prob[i] =
- (1 << ADAPT_SCAN_PROB_PRECISION) / 2; // init non_zero_prob to 0.5
+ if (do_adapt_scan(tx_size, tx_type)) {
+ uint32_t *non_zero_prob = get_non_zero_prob(cm->fc, tx_size, tx_type);
+ const int tx2d_size = tx_size_2d[tx_size];
+ int i;
+ SCAN_ORDER *sc = &cm->fc->sc[tx_size][tx_type];
+ for (i = 0; i < tx2d_size; ++i) {
+ non_zero_prob[i] = (1 << ADAPT_SCAN_PROB_PRECISION) /
+ 2; // init non_zero_prob to 0.5
+ }
+ update_scan_order_facade(cm, tx_size, tx_type, 1);
+ sc->scan = get_adapt_scan(cm->fc, tx_size, tx_type);
+ sc->iscan = get_adapt_iscan(cm->fc, tx_size, tx_type);
+ sc->neighbors = get_adapt_nb(cm->fc, tx_size, tx_type);
+ update_eob_threshold(cm, tx_size, tx_type);
}
- update_scan_order_facade(cm, tx_size, tx_type);
- sc->scan = get_adapt_scan(cm->fc, tx_size, tx_type);
- sc->iscan = get_adapt_iscan(cm->fc, tx_size, tx_type);
- sc->neighbors = get_adapt_nb(cm->fc, tx_size, tx_type);
- update_eob_threshold(cm, tx_size, tx_type);
}
}
}
void av1_adapt_scan_order(AV1_COMMON *cm) {
- TX_SIZE tx_size;
- for (tx_size = 0; tx_size < TX_SIZES_ALL; ++tx_size) {
+ if (cm->use_adapt_scan) {
+ TX_SIZE tx_size;
+#if CACHE_SCAN_PROB
+ int use_curr_frame = 0;
+#else // CACHE_SCAN_PROB
+ int use_curr_frame = 1;
+#endif // CACHE_SCAN_PROB
+
+ for (tx_size = 0; tx_size < TX_SIZES_ALL; ++tx_size) {
#if CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
- if (tx_size > TX_32X16) continue;
+ if (tx_size > TX_32X16) continue;
#else
- if (tx_size >= TX_SIZES) continue;
+ if (tx_size >= TX_SIZES) continue;
#endif // CONFIG_RECT_TX && (CONFIG_EXT_TX || CONFIG_VAR_TX)
- TX_TYPE tx_type;
- for (tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) {
- update_scan_prob(cm, tx_size, tx_type, ADAPT_SCAN_UPDATE_RATE);
- update_scan_order_facade(cm, tx_size, tx_type);
- update_eob_threshold(cm, tx_size, tx_type);
+ TX_TYPE tx_type;
+ for (tx_type = DCT_DCT; tx_type < TX_TYPES; ++tx_type) {
+ if (do_adapt_scan(tx_size, tx_type)) {
+ update_scan_prob(cm, tx_size, tx_type, ADAPT_SCAN_UPDATE_RATE);
+ update_scan_order_facade(cm, tx_size, tx_type, use_curr_frame);
+ update_eob_threshold(cm, tx_size, tx_type);
+ }
+ }
}
}
}