1 /* 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include <assert.h> 12 13 #include "vp9/common/vp9_scan.h" 14 15 DECLARE_ALIGNED(16, static const int16_t, default_scan_4x4[16]) = { 16 0, 4, 1, 5, 8, 2, 12, 9, 3, 6, 13, 10, 7, 14, 11, 15, 17 }; 18 19 DECLARE_ALIGNED(16, static const int16_t, col_scan_4x4[16]) = { 20 0, 4, 8, 1, 12, 5, 9, 2, 13, 6, 10, 3, 7, 14, 11, 15, 21 }; 22 23 DECLARE_ALIGNED(16, static const int16_t, row_scan_4x4[16]) = { 24 0, 1, 4, 2, 5, 3, 6, 8, 9, 7, 12, 10, 13, 11, 14, 15, 25 }; 26 27 DECLARE_ALIGNED(16, static const int16_t, default_scan_8x8[64]) = { 28 0, 8, 1, 16, 9, 2, 17, 24, 10, 3, 18, 25, 32, 11, 4, 26, 29 33, 19, 40, 12, 34, 27, 5, 41, 20, 48, 13, 35, 42, 28, 21, 6, 30 49, 56, 36, 43, 29, 7, 14, 50, 57, 44, 22, 37, 15, 51, 58, 30, 31 45, 23, 52, 59, 38, 31, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63, 32 }; 33 34 DECLARE_ALIGNED(16, static const int16_t, col_scan_8x8[64]) = { 35 0, 8, 16, 1, 24, 9, 32, 17, 2, 40, 25, 10, 33, 18, 48, 3, 36 26, 41, 11, 56, 19, 34, 4, 49, 27, 42, 12, 35, 20, 57, 50, 28, 37 5, 43, 13, 36, 58, 51, 21, 44, 6, 29, 59, 37, 14, 52, 22, 7, 38 45, 60, 30, 15, 38, 53, 23, 46, 31, 61, 39, 54, 47, 62, 55, 63, 39 }; 40 41 DECLARE_ALIGNED(16, static const int16_t, row_scan_8x8[64]) = { 42 0, 1, 2, 8, 9, 3, 16, 10, 4, 17, 11, 24, 5, 18, 25, 12, 43 19, 26, 32, 6, 13, 20, 33, 27, 7, 34, 40, 21, 28, 41, 14, 35, 44 48, 42, 29, 36, 49, 22, 43, 15, 56, 37, 50, 44, 30, 57, 23, 51, 45 58, 45, 38, 52, 31, 59, 53, 46, 60, 39, 61, 47, 54, 55, 62, 63, 46 }; 47 48 DECLARE_ALIGNED(16, static const int16_t, default_scan_16x16[256]) = { 49 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 64, 34, 49, 19, 65, 50 80, 50, 4, 35, 66, 20, 81, 96, 51, 5, 36, 82, 97, 67, 112, 51 21, 52, 98, 37, 83, 113, 6, 68, 128, 53, 22, 99, 114, 84, 7, 52 129, 38, 69, 100, 115, 144, 130, 85, 54, 23, 8, 145, 39, 70, 116, 53 101, 131, 160, 146, 55, 86, 24, 71, 132, 117, 161, 40, 9, 102, 147, 54 176, 162, 87, 56, 25, 133, 118, 177, 148, 72, 103, 41, 163, 10, 192, 55 178, 88, 57, 134, 149, 119, 26, 164, 73, 104, 193, 42, 179, 208, 11, 56 135, 89, 165, 120, 150, 58, 194, 180, 27, 74, 209, 105, 151, 136, 43, 57 90, 224, 166, 195, 181, 121, 210, 59, 12, 152, 106, 167, 196, 75, 137, 58 225, 211, 240, 182, 122, 91, 28, 197, 13, 226, 168, 183, 153, 44, 212, 59 138, 107, 241, 60, 29, 123, 198, 184, 227, 169, 242, 76, 213, 154, 45, 60 92, 14, 199, 139, 61, 228, 214, 170, 185, 243, 108, 77, 155, 30, 15, 61 200, 229, 124, 215, 244, 93, 46, 186, 171, 201, 109, 140, 230, 62, 216, 62 245, 31, 125, 78, 156, 231, 47, 187, 202, 217, 94, 246, 141, 63, 232, 63 172, 110, 247, 157, 79, 218, 203, 126, 233, 188, 248, 95, 173, 142, 219, 64 111, 249, 234, 158, 127, 189, 204, 250, 235, 143, 174, 220, 205, 159, 251, 65 190, 221, 175, 236, 237, 191, 206, 252, 222, 253, 207, 238, 223, 254, 239, 66 255, 67 }; 68 69 DECLARE_ALIGNED(16, static const int16_t, col_scan_16x16[256]) = { 70 0, 16, 32, 48, 1, 64, 17, 80, 33, 96, 49, 2, 65, 112, 18, 71 81, 34, 128, 50, 97, 3, 66, 144, 19, 113, 35, 82, 160, 98, 51, 72 129, 4, 67, 176, 20, 114, 145, 83, 36, 99, 130, 52, 192, 5, 161, 73 68, 115, 21, 146, 84, 208, 177, 37, 131, 100, 53, 162, 224, 69, 6, 74 116, 193, 147, 85, 22, 240, 132, 38, 178, 101, 163, 54, 209, 117, 70, 75 7, 148, 194, 86, 179, 225, 23, 133, 39, 164, 8, 102, 210, 241, 55, 76 195, 118, 149, 71, 180, 24, 87, 226, 134, 165, 211, 40, 103, 56, 72, 77 150, 196, 242, 119, 9, 181, 227, 88, 166, 25, 135, 41, 104, 212, 57, 78 151, 197, 120, 73, 243, 182, 136, 167, 213, 89, 10, 228, 105, 152, 198, 79 26, 42, 121, 183, 244, 168, 58, 137, 229, 74, 214, 90, 153, 199, 184, 80 11, 106, 245, 27, 122, 230, 169, 43, 215, 59, 200, 138, 185, 246, 75, 81 12, 91, 154, 216, 231, 107, 28, 44, 201, 123, 170, 60, 247, 232, 76, 82 139, 13, 92, 217, 186, 248, 155, 108, 29, 124, 45, 202, 233, 171, 61, 83 14, 77, 140, 15, 249, 93, 30, 187, 156, 218, 46, 109, 125, 62, 172, 84 78, 203, 31, 141, 234, 94, 47, 188, 63, 157, 110, 250, 219, 79, 126, 85 204, 173, 142, 95, 189, 111, 235, 158, 220, 251, 127, 174, 143, 205, 236, 86 159, 190, 221, 252, 175, 206, 237, 191, 253, 222, 238, 207, 254, 223, 239, 87 255, 88 }; 89 90 DECLARE_ALIGNED(16, static const int16_t, row_scan_16x16[256]) = { 91 0, 1, 2, 16, 3, 17, 4, 18, 32, 5, 33, 19, 6, 34, 48, 92 20, 49, 7, 35, 21, 50, 64, 8, 36, 65, 22, 51, 37, 80, 9, 93 66, 52, 23, 38, 81, 67, 10, 53, 24, 82, 68, 96, 39, 11, 54, 94 83, 97, 69, 25, 98, 84, 40, 112, 55, 12, 70, 99, 113, 85, 26, 95 41, 56, 114, 100, 13, 71, 128, 86, 27, 115, 101, 129, 42, 57, 72, 96 116, 14, 87, 130, 102, 144, 73, 131, 117, 28, 58, 15, 88, 43, 145, 97 103, 132, 146, 118, 74, 160, 89, 133, 104, 29, 59, 147, 119, 44, 161, 98 148, 90, 105, 134, 162, 120, 176, 75, 135, 149, 30, 60, 163, 177, 45, 99 121, 91, 106, 164, 178, 150, 192, 136, 165, 179, 31, 151, 193, 76, 122, 100 61, 137, 194, 107, 152, 180, 208, 46, 166, 167, 195, 92, 181, 138, 209, 101 123, 153, 224, 196, 77, 168, 210, 182, 240, 108, 197, 62, 154, 225, 183, 102 169, 211, 47, 139, 93, 184, 226, 212, 241, 198, 170, 124, 155, 199, 78, 103 213, 185, 109, 227, 200, 63, 228, 242, 140, 214, 171, 186, 156, 229, 243, 104 125, 94, 201, 244, 215, 216, 230, 141, 187, 202, 79, 172, 110, 157, 245, 105 217, 231, 95, 246, 232, 126, 203, 247, 233, 173, 218, 142, 111, 158, 188, 106 248, 127, 234, 219, 249, 189, 204, 143, 174, 159, 250, 235, 205, 220, 175, 107 190, 251, 221, 191, 206, 236, 207, 237, 252, 222, 253, 223, 238, 239, 254, 108 255, 109 }; 110 111 DECLARE_ALIGNED(16, static const int16_t, default_scan_32x32[1024]) = { 112 0, 32, 1, 64, 33, 2, 96, 65, 34, 128, 3, 97, 66, 113 160, 129, 35, 98, 4, 67, 130, 161, 192, 36, 99, 224, 5, 114 162, 193, 68, 131, 37, 100, 225, 194, 256, 163, 69, 132, 6, 115 226, 257, 288, 195, 101, 164, 38, 258, 7, 227, 289, 133, 320, 116 70, 196, 165, 290, 259, 228, 39, 321, 102, 352, 8, 197, 71, 117 134, 322, 291, 260, 353, 384, 229, 166, 103, 40, 354, 323, 292, 118 135, 385, 198, 261, 72, 9, 416, 167, 386, 355, 230, 324, 104, 119 293, 41, 417, 199, 136, 262, 387, 448, 325, 356, 10, 73, 418, 120 231, 168, 449, 294, 388, 105, 419, 263, 42, 200, 357, 450, 137, 121 480, 74, 326, 232, 11, 389, 169, 295, 420, 106, 451, 481, 358, 122 264, 327, 201, 43, 138, 512, 482, 390, 296, 233, 170, 421, 75, 123 452, 359, 12, 513, 265, 483, 328, 107, 202, 514, 544, 422, 391, 124 453, 139, 44, 234, 484, 297, 360, 171, 76, 515, 545, 266, 329, 125 454, 13, 423, 203, 108, 546, 485, 576, 298, 235, 140, 361, 330, 126 172, 547, 45, 455, 267, 577, 486, 77, 204, 362, 608, 14, 299, 127 578, 109, 236, 487, 609, 331, 141, 579, 46, 15, 173, 610, 363, 128 78, 205, 16, 110, 237, 611, 142, 47, 174, 79, 206, 17, 111, 129 238, 48, 143, 80, 175, 112, 207, 49, 18, 239, 81, 113, 19, 130 50, 82, 114, 51, 83, 115, 640, 516, 392, 268, 144, 20, 672, 131 641, 548, 517, 424, 393, 300, 269, 176, 145, 52, 21, 704, 673, 132 642, 580, 549, 518, 456, 425, 394, 332, 301, 270, 208, 177, 146, 133 84, 53, 22, 736, 705, 674, 643, 612, 581, 550, 519, 488, 457, 134 426, 395, 364, 333, 302, 271, 240, 209, 178, 147, 116, 85, 54, 135 23, 737, 706, 675, 613, 582, 551, 489, 458, 427, 365, 334, 303, 136 241, 210, 179, 117, 86, 55, 738, 707, 614, 583, 490, 459, 366, 137 335, 242, 211, 118, 87, 739, 615, 491, 367, 243, 119, 768, 644, 138 520, 396, 272, 148, 24, 800, 769, 676, 645, 552, 521, 428, 397, 139 304, 273, 180, 149, 56, 25, 832, 801, 770, 708, 677, 646, 584, 140 553, 522, 460, 429, 398, 336, 305, 274, 212, 181, 150, 88, 57, 141 26, 864, 833, 802, 771, 740, 709, 678, 647, 616, 585, 554, 523, 142 492, 461, 430, 399, 368, 337, 306, 275, 244, 213, 182, 151, 120, 143 89, 58, 27, 865, 834, 803, 741, 710, 679, 617, 586, 555, 493, 144 462, 431, 369, 338, 307, 245, 214, 183, 121, 90, 59, 866, 835, 145 742, 711, 618, 587, 494, 463, 370, 339, 246, 215, 122, 91, 867, 146 743, 619, 495, 371, 247, 123, 896, 772, 648, 524, 400, 276, 152, 147 28, 928, 897, 804, 773, 680, 649, 556, 525, 432, 401, 308, 277, 148 184, 153, 60, 29, 960, 929, 898, 836, 805, 774, 712, 681, 650, 149 588, 557, 526, 464, 433, 402, 340, 309, 278, 216, 185, 154, 92, 150 61, 30, 992, 961, 930, 899, 868, 837, 806, 775, 744, 713, 682, 151 651, 620, 589, 558, 527, 496, 465, 434, 403, 372, 341, 310, 279, 152 248, 217, 186, 155, 124, 93, 62, 31, 993, 962, 931, 869, 838, 153 807, 745, 714, 683, 621, 590, 559, 497, 466, 435, 373, 342, 311, 154 249, 218, 187, 125, 94, 63, 994, 963, 870, 839, 746, 715, 622, 155 591, 498, 467, 374, 343, 250, 219, 126, 95, 995, 871, 747, 623, 156 499, 375, 251, 127, 900, 776, 652, 528, 404, 280, 156, 932, 901, 157 808, 777, 684, 653, 560, 529, 436, 405, 312, 281, 188, 157, 964, 158 933, 902, 840, 809, 778, 716, 685, 654, 592, 561, 530, 468, 437, 159 406, 344, 313, 282, 220, 189, 158, 996, 965, 934, 903, 872, 841, 160 810, 779, 748, 717, 686, 655, 624, 593, 562, 531, 500, 469, 438, 161 407, 376, 345, 314, 283, 252, 221, 190, 159, 997, 966, 935, 873, 162 842, 811, 749, 718, 687, 625, 594, 563, 501, 470, 439, 377, 346, 163 315, 253, 222, 191, 998, 967, 874, 843, 750, 719, 626, 595, 502, 164 471, 378, 347, 254, 223, 999, 875, 751, 627, 503, 379, 255, 904, 165 780, 656, 532, 408, 284, 936, 905, 812, 781, 688, 657, 564, 533, 166 440, 409, 316, 285, 968, 937, 906, 844, 813, 782, 720, 689, 658, 167 596, 565, 534, 472, 441, 410, 348, 317, 286, 1000, 969, 938, 907, 168 876, 845, 814, 783, 752, 721, 690, 659, 628, 597, 566, 535, 504, 169 473, 442, 411, 380, 349, 318, 287, 1001, 970, 939, 877, 846, 815, 170 753, 722, 691, 629, 598, 567, 505, 474, 443, 381, 350, 319, 1002, 171 971, 878, 847, 754, 723, 630, 599, 506, 475, 382, 351, 1003, 879, 172 755, 631, 507, 383, 908, 784, 660, 536, 412, 940, 909, 816, 785, 173 692, 661, 568, 537, 444, 413, 972, 941, 910, 848, 817, 786, 724, 174 693, 662, 600, 569, 538, 476, 445, 414, 1004, 973, 942, 911, 880, 175 849, 818, 787, 756, 725, 694, 663, 632, 601, 570, 539, 508, 477, 176 446, 415, 1005, 974, 943, 881, 850, 819, 757, 726, 695, 633, 602, 177 571, 509, 478, 447, 1006, 975, 882, 851, 758, 727, 634, 603, 510, 178 479, 1007, 883, 759, 635, 511, 912, 788, 664, 540, 944, 913, 820, 179 789, 696, 665, 572, 541, 976, 945, 914, 852, 821, 790, 728, 697, 180 666, 604, 573, 542, 1008, 977, 946, 915, 884, 853, 822, 791, 760, 181 729, 698, 667, 636, 605, 574, 543, 1009, 978, 947, 885, 854, 823, 182 761, 730, 699, 637, 606, 575, 1010, 979, 886, 855, 762, 731, 638, 183 607, 1011, 887, 763, 639, 916, 792, 668, 948, 917, 824, 793, 700, 184 669, 980, 949, 918, 856, 825, 794, 732, 701, 670, 1012, 981, 950, 185 919, 888, 857, 826, 795, 764, 733, 702, 671, 1013, 982, 951, 889, 186 858, 827, 765, 734, 703, 1014, 983, 890, 859, 766, 735, 1015, 891, 187 767, 920, 796, 952, 921, 828, 797, 984, 953, 922, 860, 829, 798, 188 1016, 985, 954, 923, 892, 861, 830, 799, 1017, 986, 955, 893, 862, 189 831, 1018, 987, 894, 863, 1019, 895, 924, 956, 925, 988, 957, 926, 190 1020, 989, 958, 927, 1021, 990, 959, 1022, 991, 1023, 191 }; 192 193 // Neighborhood 2-tuples for various scans and blocksizes, 194 // in {top, left} order for each position in corresponding scan order. 195 DECLARE_ALIGNED(16, static const int16_t, 196 default_scan_4x4_neighbors[17 * MAX_NEIGHBORS]) = { 197 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 1, 1, 8, 8, 5, 8, 2, 198 2, 2, 5, 9, 12, 6, 9, 3, 6, 10, 13, 7, 10, 11, 14, 0, 0, 199 }; 200 201 DECLARE_ALIGNED(16, static const int16_t, 202 col_scan_4x4_neighbors[17 * MAX_NEIGHBORS]) = { 203 0, 0, 0, 0, 4, 4, 0, 0, 8, 8, 1, 1, 5, 5, 1, 1, 9, 204 9, 2, 2, 6, 6, 2, 2, 3, 3, 10, 10, 7, 7, 11, 11, 0, 0, 205 }; 206 207 DECLARE_ALIGNED(16, static const int16_t, 208 row_scan_4x4_neighbors[17 * MAX_NEIGHBORS]) = { 209 0, 0, 0, 0, 0, 0, 1, 1, 4, 4, 2, 2, 5, 5, 4, 4, 8, 210 8, 6, 6, 8, 8, 9, 9, 12, 12, 10, 10, 13, 13, 14, 14, 0, 0, 211 }; 212 213 DECLARE_ALIGNED(16, static const int16_t, 214 col_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = { 215 0, 0, 0, 0, 8, 8, 0, 0, 16, 16, 1, 1, 24, 24, 9, 9, 1, 1, 32, 216 32, 17, 17, 2, 2, 25, 25, 10, 10, 40, 40, 2, 2, 18, 18, 33, 33, 3, 3, 217 48, 48, 11, 11, 26, 26, 3, 3, 41, 41, 19, 19, 34, 34, 4, 4, 27, 27, 12, 218 12, 49, 49, 42, 42, 20, 20, 4, 4, 35, 35, 5, 5, 28, 28, 50, 50, 43, 43, 219 13, 13, 36, 36, 5, 5, 21, 21, 51, 51, 29, 29, 6, 6, 44, 44, 14, 14, 6, 220 6, 37, 37, 52, 52, 22, 22, 7, 7, 30, 30, 45, 45, 15, 15, 38, 38, 23, 23, 221 53, 53, 31, 31, 46, 46, 39, 39, 54, 54, 47, 47, 55, 55, 0, 0, 222 }; 223 224 DECLARE_ALIGNED(16, static const int16_t, 225 row_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = { 226 0, 0, 0, 0, 1, 1, 0, 0, 8, 8, 2, 2, 8, 8, 9, 9, 3, 3, 16, 227 16, 10, 10, 16, 16, 4, 4, 17, 17, 24, 24, 11, 11, 18, 18, 25, 25, 24, 24, 228 5, 5, 12, 12, 19, 19, 32, 32, 26, 26, 6, 6, 33, 33, 32, 32, 20, 20, 27, 229 27, 40, 40, 13, 13, 34, 34, 40, 40, 41, 41, 28, 28, 35, 35, 48, 48, 21, 21, 230 42, 42, 14, 14, 48, 48, 36, 36, 49, 49, 43, 43, 29, 29, 56, 56, 22, 22, 50, 231 50, 57, 57, 44, 44, 37, 37, 51, 51, 30, 30, 58, 58, 52, 52, 45, 45, 59, 59, 232 38, 38, 60, 60, 46, 46, 53, 53, 54, 54, 61, 61, 62, 62, 0, 0, 233 }; 234 235 DECLARE_ALIGNED(16, static const int16_t, 236 default_scan_8x8_neighbors[65 * MAX_NEIGHBORS]) = { 237 0, 0, 0, 0, 0, 0, 8, 8, 1, 8, 1, 1, 9, 16, 16, 16, 2, 9, 2, 238 2, 10, 17, 17, 24, 24, 24, 3, 10, 3, 3, 18, 25, 25, 32, 11, 18, 32, 32, 239 4, 11, 26, 33, 19, 26, 4, 4, 33, 40, 12, 19, 40, 40, 5, 12, 27, 34, 34, 240 41, 20, 27, 13, 20, 5, 5, 41, 48, 48, 48, 28, 35, 35, 42, 21, 28, 6, 6, 241 6, 13, 42, 49, 49, 56, 36, 43, 14, 21, 29, 36, 7, 14, 43, 50, 50, 57, 22, 242 29, 37, 44, 15, 22, 44, 51, 51, 58, 30, 37, 23, 30, 52, 59, 45, 52, 38, 45, 243 31, 38, 53, 60, 46, 53, 39, 46, 54, 61, 47, 54, 55, 62, 0, 0, 244 }; 245 246 DECLARE_ALIGNED(16, static const int16_t, 247 col_scan_16x16_neighbors[257 * MAX_NEIGHBORS]) = { 248 0, 0, 0, 0, 16, 16, 32, 32, 0, 0, 48, 48, 1, 1, 64, 249 64, 17, 17, 80, 80, 33, 33, 1, 1, 49, 49, 96, 96, 2, 2, 250 65, 65, 18, 18, 112, 112, 34, 34, 81, 81, 2, 2, 50, 50, 128, 251 128, 3, 3, 97, 97, 19, 19, 66, 66, 144, 144, 82, 82, 35, 35, 252 113, 113, 3, 3, 51, 51, 160, 160, 4, 4, 98, 98, 129, 129, 67, 253 67, 20, 20, 83, 83, 114, 114, 36, 36, 176, 176, 4, 4, 145, 145, 254 52, 52, 99, 99, 5, 5, 130, 130, 68, 68, 192, 192, 161, 161, 21, 255 21, 115, 115, 84, 84, 37, 37, 146, 146, 208, 208, 53, 53, 5, 5, 256 100, 100, 177, 177, 131, 131, 69, 69, 6, 6, 224, 224, 116, 116, 22, 257 22, 162, 162, 85, 85, 147, 147, 38, 38, 193, 193, 101, 101, 54, 54, 258 6, 6, 132, 132, 178, 178, 70, 70, 163, 163, 209, 209, 7, 7, 117, 259 117, 23, 23, 148, 148, 7, 7, 86, 86, 194, 194, 225, 225, 39, 39, 260 179, 179, 102, 102, 133, 133, 55, 55, 164, 164, 8, 8, 71, 71, 210, 261 210, 118, 118, 149, 149, 195, 195, 24, 24, 87, 87, 40, 40, 56, 56, 262 134, 134, 180, 180, 226, 226, 103, 103, 8, 8, 165, 165, 211, 211, 72, 263 72, 150, 150, 9, 9, 119, 119, 25, 25, 88, 88, 196, 196, 41, 41, 264 135, 135, 181, 181, 104, 104, 57, 57, 227, 227, 166, 166, 120, 120, 151, 265 151, 197, 197, 73, 73, 9, 9, 212, 212, 89, 89, 136, 136, 182, 182, 266 10, 10, 26, 26, 105, 105, 167, 167, 228, 228, 152, 152, 42, 42, 121, 267 121, 213, 213, 58, 58, 198, 198, 74, 74, 137, 137, 183, 183, 168, 168, 268 10, 10, 90, 90, 229, 229, 11, 11, 106, 106, 214, 214, 153, 153, 27, 269 27, 199, 199, 43, 43, 184, 184, 122, 122, 169, 169, 230, 230, 59, 59, 270 11, 11, 75, 75, 138, 138, 200, 200, 215, 215, 91, 91, 12, 12, 28, 271 28, 185, 185, 107, 107, 154, 154, 44, 44, 231, 231, 216, 216, 60, 60, 272 123, 123, 12, 12, 76, 76, 201, 201, 170, 170, 232, 232, 139, 139, 92, 273 92, 13, 13, 108, 108, 29, 29, 186, 186, 217, 217, 155, 155, 45, 45, 274 13, 13, 61, 61, 124, 124, 14, 14, 233, 233, 77, 77, 14, 14, 171, 275 171, 140, 140, 202, 202, 30, 30, 93, 93, 109, 109, 46, 46, 156, 156, 276 62, 62, 187, 187, 15, 15, 125, 125, 218, 218, 78, 78, 31, 31, 172, 277 172, 47, 47, 141, 141, 94, 94, 234, 234, 203, 203, 63, 63, 110, 110, 278 188, 188, 157, 157, 126, 126, 79, 79, 173, 173, 95, 95, 219, 219, 142, 279 142, 204, 204, 235, 235, 111, 111, 158, 158, 127, 127, 189, 189, 220, 220, 280 143, 143, 174, 174, 205, 205, 236, 236, 159, 159, 190, 190, 221, 221, 175, 281 175, 237, 237, 206, 206, 222, 222, 191, 191, 238, 238, 207, 207, 223, 223, 282 239, 239, 0, 0, 283 }; 284 285 DECLARE_ALIGNED(16, static const int16_t, 286 row_scan_16x16_neighbors[257 * MAX_NEIGHBORS]) = { 287 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 16, 16, 3, 3, 17, 288 17, 16, 16, 4, 4, 32, 32, 18, 18, 5, 5, 33, 33, 32, 32, 289 19, 19, 48, 48, 6, 6, 34, 34, 20, 20, 49, 49, 48, 48, 7, 290 7, 35, 35, 64, 64, 21, 21, 50, 50, 36, 36, 64, 64, 8, 8, 291 65, 65, 51, 51, 22, 22, 37, 37, 80, 80, 66, 66, 9, 9, 52, 292 52, 23, 23, 81, 81, 67, 67, 80, 80, 38, 38, 10, 10, 53, 53, 293 82, 82, 96, 96, 68, 68, 24, 24, 97, 97, 83, 83, 39, 39, 96, 294 96, 54, 54, 11, 11, 69, 69, 98, 98, 112, 112, 84, 84, 25, 25, 295 40, 40, 55, 55, 113, 113, 99, 99, 12, 12, 70, 70, 112, 112, 85, 296 85, 26, 26, 114, 114, 100, 100, 128, 128, 41, 41, 56, 56, 71, 71, 297 115, 115, 13, 13, 86, 86, 129, 129, 101, 101, 128, 128, 72, 72, 130, 298 130, 116, 116, 27, 27, 57, 57, 14, 14, 87, 87, 42, 42, 144, 144, 299 102, 102, 131, 131, 145, 145, 117, 117, 73, 73, 144, 144, 88, 88, 132, 300 132, 103, 103, 28, 28, 58, 58, 146, 146, 118, 118, 43, 43, 160, 160, 301 147, 147, 89, 89, 104, 104, 133, 133, 161, 161, 119, 119, 160, 160, 74, 302 74, 134, 134, 148, 148, 29, 29, 59, 59, 162, 162, 176, 176, 44, 44, 303 120, 120, 90, 90, 105, 105, 163, 163, 177, 177, 149, 149, 176, 176, 135, 304 135, 164, 164, 178, 178, 30, 30, 150, 150, 192, 192, 75, 75, 121, 121, 305 60, 60, 136, 136, 193, 193, 106, 106, 151, 151, 179, 179, 192, 192, 45, 306 45, 165, 165, 166, 166, 194, 194, 91, 91, 180, 180, 137, 137, 208, 208, 307 122, 122, 152, 152, 208, 208, 195, 195, 76, 76, 167, 167, 209, 209, 181, 308 181, 224, 224, 107, 107, 196, 196, 61, 61, 153, 153, 224, 224, 182, 182, 309 168, 168, 210, 210, 46, 46, 138, 138, 92, 92, 183, 183, 225, 225, 211, 310 211, 240, 240, 197, 197, 169, 169, 123, 123, 154, 154, 198, 198, 77, 77, 311 212, 212, 184, 184, 108, 108, 226, 226, 199, 199, 62, 62, 227, 227, 241, 312 241, 139, 139, 213, 213, 170, 170, 185, 185, 155, 155, 228, 228, 242, 242, 313 124, 124, 93, 93, 200, 200, 243, 243, 214, 214, 215, 215, 229, 229, 140, 314 140, 186, 186, 201, 201, 78, 78, 171, 171, 109, 109, 156, 156, 244, 244, 315 216, 216, 230, 230, 94, 94, 245, 245, 231, 231, 125, 125, 202, 202, 246, 316 246, 232, 232, 172, 172, 217, 217, 141, 141, 110, 110, 157, 157, 187, 187, 317 247, 247, 126, 126, 233, 233, 218, 218, 248, 248, 188, 188, 203, 203, 142, 318 142, 173, 173, 158, 158, 249, 249, 234, 234, 204, 204, 219, 219, 174, 174, 319 189, 189, 250, 250, 220, 220, 190, 190, 205, 205, 235, 235, 206, 206, 236, 320 236, 251, 251, 221, 221, 252, 252, 222, 222, 237, 237, 238, 238, 253, 253, 321 254, 254, 0, 0, 322 }; 323 324 DECLARE_ALIGNED(16, static const int16_t, 325 default_scan_16x16_neighbors[257 * MAX_NEIGHBORS]) = { 326 0, 0, 0, 0, 0, 0, 16, 16, 1, 16, 1, 1, 32, 32, 17, 327 32, 2, 17, 2, 2, 48, 48, 18, 33, 33, 48, 3, 18, 49, 64, 328 64, 64, 34, 49, 3, 3, 19, 34, 50, 65, 4, 19, 65, 80, 80, 329 80, 35, 50, 4, 4, 20, 35, 66, 81, 81, 96, 51, 66, 96, 96, 330 5, 20, 36, 51, 82, 97, 21, 36, 67, 82, 97, 112, 5, 5, 52, 331 67, 112, 112, 37, 52, 6, 21, 83, 98, 98, 113, 68, 83, 6, 6, 332 113, 128, 22, 37, 53, 68, 84, 99, 99, 114, 128, 128, 114, 129, 69, 333 84, 38, 53, 7, 22, 7, 7, 129, 144, 23, 38, 54, 69, 100, 115, 334 85, 100, 115, 130, 144, 144, 130, 145, 39, 54, 70, 85, 8, 23, 55, 335 70, 116, 131, 101, 116, 145, 160, 24, 39, 8, 8, 86, 101, 131, 146, 336 160, 160, 146, 161, 71, 86, 40, 55, 9, 24, 117, 132, 102, 117, 161, 337 176, 132, 147, 56, 71, 87, 102, 25, 40, 147, 162, 9, 9, 176, 176, 338 162, 177, 72, 87, 41, 56, 118, 133, 133, 148, 103, 118, 10, 25, 148, 339 163, 57, 72, 88, 103, 177, 192, 26, 41, 163, 178, 192, 192, 10, 10, 340 119, 134, 73, 88, 149, 164, 104, 119, 134, 149, 42, 57, 178, 193, 164, 341 179, 11, 26, 58, 73, 193, 208, 89, 104, 135, 150, 120, 135, 27, 42, 342 74, 89, 208, 208, 150, 165, 179, 194, 165, 180, 105, 120, 194, 209, 43, 343 58, 11, 11, 136, 151, 90, 105, 151, 166, 180, 195, 59, 74, 121, 136, 344 209, 224, 195, 210, 224, 224, 166, 181, 106, 121, 75, 90, 12, 27, 181, 345 196, 12, 12, 210, 225, 152, 167, 167, 182, 137, 152, 28, 43, 196, 211, 346 122, 137, 91, 106, 225, 240, 44, 59, 13, 28, 107, 122, 182, 197, 168, 347 183, 211, 226, 153, 168, 226, 241, 60, 75, 197, 212, 138, 153, 29, 44, 348 76, 91, 13, 13, 183, 198, 123, 138, 45, 60, 212, 227, 198, 213, 154, 349 169, 169, 184, 227, 242, 92, 107, 61, 76, 139, 154, 14, 29, 14, 14, 350 184, 199, 213, 228, 108, 123, 199, 214, 228, 243, 77, 92, 30, 45, 170, 351 185, 155, 170, 185, 200, 93, 108, 124, 139, 214, 229, 46, 61, 200, 215, 352 229, 244, 15, 30, 109, 124, 62, 77, 140, 155, 215, 230, 31, 46, 171, 353 186, 186, 201, 201, 216, 78, 93, 230, 245, 125, 140, 47, 62, 216, 231, 354 156, 171, 94, 109, 231, 246, 141, 156, 63, 78, 202, 217, 187, 202, 110, 355 125, 217, 232, 172, 187, 232, 247, 79, 94, 157, 172, 126, 141, 203, 218, 356 95, 110, 233, 248, 218, 233, 142, 157, 111, 126, 173, 188, 188, 203, 234, 357 249, 219, 234, 127, 142, 158, 173, 204, 219, 189, 204, 143, 158, 235, 250, 358 174, 189, 205, 220, 159, 174, 220, 235, 221, 236, 175, 190, 190, 205, 236, 359 251, 206, 221, 237, 252, 191, 206, 222, 237, 207, 222, 238, 253, 223, 238, 360 239, 254, 0, 0, 361 }; 362 363 DECLARE_ALIGNED(16, static const int16_t, 364 default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]) = { 365 0, 0, 0, 0, 0, 0, 32, 32, 1, 32, 1, 1, 64, 64, 366 33, 64, 2, 33, 96, 96, 2, 2, 65, 96, 34, 65, 128, 128, 367 97, 128, 3, 34, 66, 97, 3, 3, 35, 66, 98, 129, 129, 160, 368 160, 160, 4, 35, 67, 98, 192, 192, 4, 4, 130, 161, 161, 192, 369 36, 67, 99, 130, 5, 36, 68, 99, 193, 224, 162, 193, 224, 224, 370 131, 162, 37, 68, 100, 131, 5, 5, 194, 225, 225, 256, 256, 256, 371 163, 194, 69, 100, 132, 163, 6, 37, 226, 257, 6, 6, 195, 226, 372 257, 288, 101, 132, 288, 288, 38, 69, 164, 195, 133, 164, 258, 289, 373 227, 258, 196, 227, 7, 38, 289, 320, 70, 101, 320, 320, 7, 7, 374 165, 196, 39, 70, 102, 133, 290, 321, 259, 290, 228, 259, 321, 352, 375 352, 352, 197, 228, 134, 165, 71, 102, 8, 39, 322, 353, 291, 322, 376 260, 291, 103, 134, 353, 384, 166, 197, 229, 260, 40, 71, 8, 8, 377 384, 384, 135, 166, 354, 385, 323, 354, 198, 229, 292, 323, 72, 103, 378 261, 292, 9, 40, 385, 416, 167, 198, 104, 135, 230, 261, 355, 386, 379 416, 416, 293, 324, 324, 355, 9, 9, 41, 72, 386, 417, 199, 230, 380 136, 167, 417, 448, 262, 293, 356, 387, 73, 104, 387, 418, 231, 262, 381 10, 41, 168, 199, 325, 356, 418, 449, 105, 136, 448, 448, 42, 73, 382 294, 325, 200, 231, 10, 10, 357, 388, 137, 168, 263, 294, 388, 419, 383 74, 105, 419, 450, 449, 480, 326, 357, 232, 263, 295, 326, 169, 200, 384 11, 42, 106, 137, 480, 480, 450, 481, 358, 389, 264, 295, 201, 232, 385 138, 169, 389, 420, 43, 74, 420, 451, 327, 358, 11, 11, 481, 512, 386 233, 264, 451, 482, 296, 327, 75, 106, 170, 201, 482, 513, 512, 512, 387 390, 421, 359, 390, 421, 452, 107, 138, 12, 43, 202, 233, 452, 483, 388 265, 296, 328, 359, 139, 170, 44, 75, 483, 514, 513, 544, 234, 265, 389 297, 328, 422, 453, 12, 12, 391, 422, 171, 202, 76, 107, 514, 545, 390 453, 484, 544, 544, 266, 297, 203, 234, 108, 139, 329, 360, 298, 329, 391 140, 171, 515, 546, 13, 44, 423, 454, 235, 266, 545, 576, 454, 485, 392 45, 76, 172, 203, 330, 361, 576, 576, 13, 13, 267, 298, 546, 577, 393 77, 108, 204, 235, 455, 486, 577, 608, 299, 330, 109, 140, 547, 578, 394 14, 45, 14, 14, 141, 172, 578, 609, 331, 362, 46, 77, 173, 204, 395 15, 15, 78, 109, 205, 236, 579, 610, 110, 141, 15, 46, 142, 173, 396 47, 78, 174, 205, 16, 16, 79, 110, 206, 237, 16, 47, 111, 142, 397 48, 79, 143, 174, 80, 111, 175, 206, 17, 48, 17, 17, 207, 238, 398 49, 80, 81, 112, 18, 18, 18, 49, 50, 81, 82, 113, 19, 50, 399 51, 82, 83, 114, 608, 608, 484, 515, 360, 391, 236, 267, 112, 143, 400 19, 19, 640, 640, 609, 640, 516, 547, 485, 516, 392, 423, 361, 392, 401 268, 299, 237, 268, 144, 175, 113, 144, 20, 51, 20, 20, 672, 672, 402 641, 672, 610, 641, 548, 579, 517, 548, 486, 517, 424, 455, 393, 424, 403 362, 393, 300, 331, 269, 300, 238, 269, 176, 207, 145, 176, 114, 145, 404 52, 83, 21, 52, 21, 21, 704, 704, 673, 704, 642, 673, 611, 642, 405 580, 611, 549, 580, 518, 549, 487, 518, 456, 487, 425, 456, 394, 425, 406 363, 394, 332, 363, 301, 332, 270, 301, 239, 270, 208, 239, 177, 208, 407 146, 177, 115, 146, 84, 115, 53, 84, 22, 53, 22, 22, 705, 736, 408 674, 705, 643, 674, 581, 612, 550, 581, 519, 550, 457, 488, 426, 457, 409 395, 426, 333, 364, 302, 333, 271, 302, 209, 240, 178, 209, 147, 178, 410 85, 116, 54, 85, 23, 54, 706, 737, 675, 706, 582, 613, 551, 582, 411 458, 489, 427, 458, 334, 365, 303, 334, 210, 241, 179, 210, 86, 117, 412 55, 86, 707, 738, 583, 614, 459, 490, 335, 366, 211, 242, 87, 118, 413 736, 736, 612, 643, 488, 519, 364, 395, 240, 271, 116, 147, 23, 23, 414 768, 768, 737, 768, 644, 675, 613, 644, 520, 551, 489, 520, 396, 427, 415 365, 396, 272, 303, 241, 272, 148, 179, 117, 148, 24, 55, 24, 24, 416 800, 800, 769, 800, 738, 769, 676, 707, 645, 676, 614, 645, 552, 583, 417 521, 552, 490, 521, 428, 459, 397, 428, 366, 397, 304, 335, 273, 304, 418 242, 273, 180, 211, 149, 180, 118, 149, 56, 87, 25, 56, 25, 25, 419 832, 832, 801, 832, 770, 801, 739, 770, 708, 739, 677, 708, 646, 677, 420 615, 646, 584, 615, 553, 584, 522, 553, 491, 522, 460, 491, 429, 460, 421 398, 429, 367, 398, 336, 367, 305, 336, 274, 305, 243, 274, 212, 243, 422 181, 212, 150, 181, 119, 150, 88, 119, 57, 88, 26, 57, 26, 26, 423 833, 864, 802, 833, 771, 802, 709, 740, 678, 709, 647, 678, 585, 616, 424 554, 585, 523, 554, 461, 492, 430, 461, 399, 430, 337, 368, 306, 337, 425 275, 306, 213, 244, 182, 213, 151, 182, 89, 120, 58, 89, 27, 58, 426 834, 865, 803, 834, 710, 741, 679, 710, 586, 617, 555, 586, 462, 493, 427 431, 462, 338, 369, 307, 338, 214, 245, 183, 214, 90, 121, 59, 90, 428 835, 866, 711, 742, 587, 618, 463, 494, 339, 370, 215, 246, 91, 122, 429 864, 864, 740, 771, 616, 647, 492, 523, 368, 399, 244, 275, 120, 151, 430 27, 27, 896, 896, 865, 896, 772, 803, 741, 772, 648, 679, 617, 648, 431 524, 555, 493, 524, 400, 431, 369, 400, 276, 307, 245, 276, 152, 183, 432 121, 152, 28, 59, 28, 28, 928, 928, 897, 928, 866, 897, 804, 835, 433 773, 804, 742, 773, 680, 711, 649, 680, 618, 649, 556, 587, 525, 556, 434 494, 525, 432, 463, 401, 432, 370, 401, 308, 339, 277, 308, 246, 277, 435 184, 215, 153, 184, 122, 153, 60, 91, 29, 60, 29, 29, 960, 960, 436 929, 960, 898, 929, 867, 898, 836, 867, 805, 836, 774, 805, 743, 774, 437 712, 743, 681, 712, 650, 681, 619, 650, 588, 619, 557, 588, 526, 557, 438 495, 526, 464, 495, 433, 464, 402, 433, 371, 402, 340, 371, 309, 340, 439 278, 309, 247, 278, 216, 247, 185, 216, 154, 185, 123, 154, 92, 123, 440 61, 92, 30, 61, 30, 30, 961, 992, 930, 961, 899, 930, 837, 868, 441 806, 837, 775, 806, 713, 744, 682, 713, 651, 682, 589, 620, 558, 589, 442 527, 558, 465, 496, 434, 465, 403, 434, 341, 372, 310, 341, 279, 310, 443 217, 248, 186, 217, 155, 186, 93, 124, 62, 93, 31, 62, 962, 993, 444 931, 962, 838, 869, 807, 838, 714, 745, 683, 714, 590, 621, 559, 590, 445 466, 497, 435, 466, 342, 373, 311, 342, 218, 249, 187, 218, 94, 125, 446 63, 94, 963, 994, 839, 870, 715, 746, 591, 622, 467, 498, 343, 374, 447 219, 250, 95, 126, 868, 899, 744, 775, 620, 651, 496, 527, 372, 403, 448 248, 279, 124, 155, 900, 931, 869, 900, 776, 807, 745, 776, 652, 683, 449 621, 652, 528, 559, 497, 528, 404, 435, 373, 404, 280, 311, 249, 280, 450 156, 187, 125, 156, 932, 963, 901, 932, 870, 901, 808, 839, 777, 808, 451 746, 777, 684, 715, 653, 684, 622, 653, 560, 591, 529, 560, 498, 529, 452 436, 467, 405, 436, 374, 405, 312, 343, 281, 312, 250, 281, 188, 219, 453 157, 188, 126, 157, 964, 995, 933, 964, 902, 933, 871, 902, 840, 871, 454 809, 840, 778, 809, 747, 778, 716, 747, 685, 716, 654, 685, 623, 654, 455 592, 623, 561, 592, 530, 561, 499, 530, 468, 499, 437, 468, 406, 437, 456 375, 406, 344, 375, 313, 344, 282, 313, 251, 282, 220, 251, 189, 220, 457 158, 189, 127, 158, 965, 996, 934, 965, 903, 934, 841, 872, 810, 841, 458 779, 810, 717, 748, 686, 717, 655, 686, 593, 624, 562, 593, 531, 562, 459 469, 500, 438, 469, 407, 438, 345, 376, 314, 345, 283, 314, 221, 252, 460 190, 221, 159, 190, 966, 997, 935, 966, 842, 873, 811, 842, 718, 749, 461 687, 718, 594, 625, 563, 594, 470, 501, 439, 470, 346, 377, 315, 346, 462 222, 253, 191, 222, 967, 998, 843, 874, 719, 750, 595, 626, 471, 502, 463 347, 378, 223, 254, 872, 903, 748, 779, 624, 655, 500, 531, 376, 407, 464 252, 283, 904, 935, 873, 904, 780, 811, 749, 780, 656, 687, 625, 656, 465 532, 563, 501, 532, 408, 439, 377, 408, 284, 315, 253, 284, 936, 967, 466 905, 936, 874, 905, 812, 843, 781, 812, 750, 781, 688, 719, 657, 688, 467 626, 657, 564, 595, 533, 564, 502, 533, 440, 471, 409, 440, 378, 409, 468 316, 347, 285, 316, 254, 285, 968, 999, 937, 968, 906, 937, 875, 906, 469 844, 875, 813, 844, 782, 813, 751, 782, 720, 751, 689, 720, 658, 689, 470 627, 658, 596, 627, 565, 596, 534, 565, 503, 534, 472, 503, 441, 472, 471 410, 441, 379, 410, 348, 379, 317, 348, 286, 317, 255, 286, 969, 1000, 472 938, 969, 907, 938, 845, 876, 814, 845, 783, 814, 721, 752, 690, 721, 473 659, 690, 597, 628, 566, 597, 535, 566, 473, 504, 442, 473, 411, 442, 474 349, 380, 318, 349, 287, 318, 970, 1001, 939, 970, 846, 877, 815, 846, 475 722, 753, 691, 722, 598, 629, 567, 598, 474, 505, 443, 474, 350, 381, 476 319, 350, 971, 1002, 847, 878, 723, 754, 599, 630, 475, 506, 351, 382, 477 876, 907, 752, 783, 628, 659, 504, 535, 380, 411, 908, 939, 877, 908, 478 784, 815, 753, 784, 660, 691, 629, 660, 536, 567, 505, 536, 412, 443, 479 381, 412, 940, 971, 909, 940, 878, 909, 816, 847, 785, 816, 754, 785, 480 692, 723, 661, 692, 630, 661, 568, 599, 537, 568, 506, 537, 444, 475, 481 413, 444, 382, 413, 972, 1003, 941, 972, 910, 941, 879, 910, 848, 879, 482 817, 848, 786, 817, 755, 786, 724, 755, 693, 724, 662, 693, 631, 662, 483 600, 631, 569, 600, 538, 569, 507, 538, 476, 507, 445, 476, 414, 445, 484 383, 414, 973, 1004, 942, 973, 911, 942, 849, 880, 818, 849, 787, 818, 485 725, 756, 694, 725, 663, 694, 601, 632, 570, 601, 539, 570, 477, 508, 486 446, 477, 415, 446, 974, 1005, 943, 974, 850, 881, 819, 850, 726, 757, 487 695, 726, 602, 633, 571, 602, 478, 509, 447, 478, 975, 1006, 851, 882, 488 727, 758, 603, 634, 479, 510, 880, 911, 756, 787, 632, 663, 508, 539, 489 912, 943, 881, 912, 788, 819, 757, 788, 664, 695, 633, 664, 540, 571, 490 509, 540, 944, 975, 913, 944, 882, 913, 820, 851, 789, 820, 758, 789, 491 696, 727, 665, 696, 634, 665, 572, 603, 541, 572, 510, 541, 976, 1007, 492 945, 976, 914, 945, 883, 914, 852, 883, 821, 852, 790, 821, 759, 790, 493 728, 759, 697, 728, 666, 697, 635, 666, 604, 635, 573, 604, 542, 573, 494 511, 542, 977, 1008, 946, 977, 915, 946, 853, 884, 822, 853, 791, 822, 495 729, 760, 698, 729, 667, 698, 605, 636, 574, 605, 543, 574, 978, 1009, 496 947, 978, 854, 885, 823, 854, 730, 761, 699, 730, 606, 637, 575, 606, 497 979, 1010, 855, 886, 731, 762, 607, 638, 884, 915, 760, 791, 636, 667, 498 916, 947, 885, 916, 792, 823, 761, 792, 668, 699, 637, 668, 948, 979, 499 917, 948, 886, 917, 824, 855, 793, 824, 762, 793, 700, 731, 669, 700, 500 638, 669, 980, 1011, 949, 980, 918, 949, 887, 918, 856, 887, 825, 856, 501 794, 825, 763, 794, 732, 763, 701, 732, 670, 701, 639, 670, 981, 1012, 502 950, 981, 919, 950, 857, 888, 826, 857, 795, 826, 733, 764, 702, 733, 503 671, 702, 982, 1013, 951, 982, 858, 889, 827, 858, 734, 765, 703, 734, 504 983, 1014, 859, 890, 735, 766, 888, 919, 764, 795, 920, 951, 889, 920, 505 796, 827, 765, 796, 952, 983, 921, 952, 890, 921, 828, 859, 797, 828, 506 766, 797, 984, 1015, 953, 984, 922, 953, 891, 922, 860, 891, 829, 860, 507 798, 829, 767, 798, 985, 1016, 954, 985, 923, 954, 861, 892, 830, 861, 508 799, 830, 986, 1017, 955, 986, 862, 893, 831, 862, 987, 1018, 863, 894, 509 892, 923, 924, 955, 893, 924, 956, 987, 925, 956, 894, 925, 988, 1019, 510 957, 988, 926, 957, 895, 926, 989, 1020, 958, 989, 927, 958, 990, 1021, 511 959, 990, 991, 1022, 0, 0, 512 }; 513 514 // Add 1 to iscan values. This represents the EOB position instead of the index. 515 DECLARE_ALIGNED(16, static const int16_t, vp9_default_iscan_4x4[16]) = { 516 1, 3, 6, 9, 2, 4, 10, 13, 5, 8, 12, 15, 7, 11, 14, 16, 517 }; 518 519 DECLARE_ALIGNED(16, static const int16_t, vp9_col_iscan_4x4[16]) = { 520 1, 4, 8, 12, 2, 6, 10, 13, 3, 7, 11, 15, 5, 9, 14, 16, 521 }; 522 523 DECLARE_ALIGNED(16, static const int16_t, vp9_row_iscan_4x4[16]) = { 524 1, 2, 4, 6, 3, 5, 7, 10, 8, 9, 12, 14, 11, 13, 15, 16, 525 }; 526 527 DECLARE_ALIGNED(16, static const int16_t, vp9_col_iscan_8x8[64]) = { 528 1, 4, 9, 16, 23, 33, 41, 48, 2, 6, 12, 19, 27, 35, 45, 52, 529 3, 8, 14, 21, 29, 39, 47, 55, 5, 11, 17, 25, 32, 42, 51, 57, 530 7, 13, 22, 28, 36, 44, 53, 59, 10, 18, 26, 34, 40, 49, 56, 61, 531 15, 24, 31, 38, 46, 54, 60, 63, 20, 30, 37, 43, 50, 58, 62, 64, 532 }; 533 534 DECLARE_ALIGNED(16, static const int16_t, vp9_row_iscan_8x8[64]) = { 535 1, 2, 3, 6, 9, 13, 20, 25, 4, 5, 8, 11, 16, 21, 31, 40, 536 7, 10, 14, 17, 22, 28, 38, 47, 12, 15, 18, 24, 29, 35, 45, 53, 537 19, 23, 26, 32, 36, 42, 51, 58, 27, 30, 34, 39, 44, 50, 56, 60, 538 33, 37, 43, 48, 52, 55, 61, 62, 41, 46, 49, 54, 57, 59, 63, 64, 539 }; 540 541 DECLARE_ALIGNED(16, static const int16_t, vp9_default_iscan_8x8[64]) = { 542 1, 3, 6, 10, 15, 23, 32, 38, 2, 5, 9, 14, 20, 27, 39, 45, 543 4, 7, 11, 18, 25, 31, 43, 50, 8, 12, 16, 22, 30, 37, 48, 54, 544 13, 17, 21, 28, 35, 44, 53, 58, 19, 24, 29, 36, 42, 49, 57, 61, 545 26, 33, 40, 46, 51, 56, 60, 63, 34, 41, 47, 52, 55, 59, 62, 64, 546 }; 547 548 DECLARE_ALIGNED(16, static const int16_t, vp9_col_iscan_16x16[256]) = { 549 1, 5, 12, 21, 32, 44, 60, 76, 86, 110, 131, 151, 166, 182, 196, 199, 550 2, 7, 15, 24, 35, 48, 65, 82, 96, 115, 136, 154, 172, 189, 202, 213, 551 3, 9, 17, 26, 39, 53, 68, 84, 102, 117, 137, 158, 173, 191, 206, 217, 552 4, 11, 19, 30, 42, 56, 72, 90, 104, 120, 142, 160, 177, 195, 209, 219, 553 6, 13, 22, 33, 46, 59, 75, 94, 105, 124, 145, 165, 180, 197, 211, 224, 554 8, 16, 27, 38, 50, 64, 79, 97, 113, 130, 147, 167, 183, 201, 216, 229, 555 10, 20, 29, 40, 55, 70, 87, 103, 118, 133, 152, 171, 188, 207, 221, 231, 556 14, 25, 36, 47, 61, 74, 92, 109, 123, 138, 155, 175, 190, 208, 225, 236, 557 18, 31, 41, 54, 67, 83, 99, 116, 127, 143, 162, 181, 198, 214, 228, 238, 558 23, 37, 49, 63, 77, 93, 106, 121, 134, 148, 168, 187, 204, 220, 233, 241, 559 28, 45, 57, 71, 85, 100, 114, 128, 141, 157, 176, 194, 210, 227, 237, 245, 560 34, 52, 69, 80, 95, 111, 126, 139, 150, 163, 185, 203, 218, 230, 242, 248, 561 43, 62, 78, 91, 107, 122, 135, 149, 161, 174, 192, 212, 226, 239, 246, 252, 562 51, 73, 88, 101, 119, 129, 146, 159, 169, 184, 205, 223, 234, 243, 250, 254, 563 58, 81, 98, 112, 132, 144, 156, 170, 179, 193, 215, 232, 240, 247, 251, 255, 564 66, 89, 108, 125, 140, 153, 164, 178, 186, 200, 222, 235, 244, 249, 253, 256, 565 }; 566 567 DECLARE_ALIGNED(16, static const int16_t, vp9_row_iscan_16x16[256]) = { 568 1, 2, 3, 5, 7, 10, 13, 18, 23, 30, 37, 44, 55, 65, 77, 569 87, 4, 6, 8, 12, 16, 20, 26, 33, 39, 49, 60, 69, 85, 100, 570 116, 131, 9, 11, 14, 19, 24, 28, 34, 43, 52, 61, 73, 89, 104, 571 120, 143, 168, 15, 17, 21, 27, 32, 38, 45, 54, 62, 74, 86, 101, 572 117, 136, 162, 186, 22, 25, 31, 36, 41, 48, 56, 66, 75, 82, 95, 573 113, 134, 155, 180, 206, 29, 35, 40, 46, 51, 59, 68, 78, 88, 97, 574 107, 122, 147, 170, 197, 213, 42, 47, 50, 57, 64, 71, 80, 91, 99, 575 108, 123, 139, 160, 183, 208, 223, 53, 58, 63, 70, 76, 84, 94, 103, 576 111, 121, 135, 151, 177, 196, 216, 227, 67, 72, 79, 83, 92, 98, 109, 577 114, 128, 137, 149, 169, 189, 203, 222, 233, 81, 90, 93, 102, 106, 115, 578 126, 132, 140, 152, 163, 178, 193, 209, 224, 235, 96, 105, 110, 118, 124, 579 129, 144, 145, 156, 166, 176, 191, 207, 220, 234, 240, 112, 119, 125, 130, 580 141, 148, 158, 165, 171, 182, 192, 204, 225, 231, 241, 244, 127, 133, 138, 581 146, 154, 161, 175, 179, 185, 198, 205, 217, 232, 238, 245, 247, 142, 150, 582 157, 167, 173, 181, 190, 200, 201, 211, 221, 229, 239, 243, 250, 252, 153, 583 164, 172, 184, 187, 194, 202, 212, 215, 219, 228, 237, 246, 248, 253, 254, 584 159, 174, 188, 195, 199, 210, 214, 218, 226, 230, 236, 242, 249, 251, 255, 585 256, 586 }; 587 588 DECLARE_ALIGNED(16, static const int16_t, vp9_default_iscan_16x16[256]) = { 589 1, 3, 6, 10, 18, 25, 37, 45, 56, 73, 89, 105, 129, 144, 167, 590 180, 2, 5, 9, 14, 21, 31, 41, 55, 67, 80, 97, 114, 142, 155, 591 179, 197, 4, 8, 12, 19, 26, 34, 47, 58, 72, 87, 102, 120, 149, 592 165, 187, 202, 7, 13, 17, 24, 32, 40, 54, 65, 79, 93, 111, 128, 593 154, 170, 194, 209, 11, 15, 20, 29, 38, 48, 59, 68, 85, 99, 115, 594 134, 162, 177, 199, 215, 16, 22, 27, 35, 44, 53, 66, 78, 92, 107, 595 121, 141, 166, 186, 206, 222, 23, 28, 33, 42, 49, 61, 74, 86, 100, 596 117, 131, 152, 176, 191, 212, 226, 30, 36, 43, 50, 60, 70, 82, 96, 597 109, 126, 140, 156, 183, 198, 218, 230, 39, 46, 52, 62, 69, 81, 94, 598 106, 119, 135, 151, 169, 192, 208, 224, 235, 51, 57, 64, 75, 84, 95, 599 110, 118, 130, 148, 164, 178, 200, 214, 229, 239, 63, 71, 77, 88, 98, 600 108, 123, 132, 146, 160, 173, 189, 211, 223, 236, 243, 76, 83, 91, 103, 601 113, 125, 139, 147, 158, 174, 188, 203, 220, 231, 241, 246, 90, 101, 112, 602 124, 133, 143, 157, 168, 181, 190, 204, 217, 232, 238, 247, 251, 104, 116, 603 127, 137, 150, 163, 172, 184, 195, 205, 216, 225, 237, 242, 249, 253, 122, 604 136, 145, 159, 171, 182, 193, 201, 210, 219, 228, 234, 244, 245, 252, 255, 605 138, 153, 161, 175, 185, 196, 207, 213, 221, 227, 233, 240, 248, 250, 254, 606 256, 607 }; 608 609 DECLARE_ALIGNED(16, static const int16_t, vp9_default_iscan_32x32[1024]) = { 610 1, 3, 6, 11, 18, 26, 39, 48, 63, 84, 102, 122, 146, 611 171, 194, 205, 211, 220, 230, 234, 246, 258, 276, 300, 343, 357, 612 378, 406, 456, 472, 496, 528, 2, 5, 9, 16, 23, 31, 46, 613 59, 75, 93, 113, 134, 159, 185, 204, 216, 223, 229, 235, 238, 614 257, 275, 299, 318, 356, 377, 405, 427, 471, 495, 527, 552, 4, 615 8, 13, 19, 29, 37, 53, 65, 83, 103, 119, 143, 165, 190, 616 209, 218, 225, 232, 236, 239, 274, 298, 317, 330, 376, 404, 426, 617 441, 494, 526, 551, 568, 7, 12, 17, 24, 32, 44, 61, 74, 618 91, 110, 127, 151, 174, 197, 212, 221, 227, 233, 237, 240, 297, 619 316, 329, 336, 403, 425, 440, 448, 525, 550, 567, 576, 10, 15, 620 20, 30, 38, 51, 66, 79, 96, 117, 135, 158, 180, 202, 215, 621 224, 245, 256, 273, 296, 342, 355, 375, 402, 455, 470, 493, 524, 622 583, 597, 618, 646, 14, 21, 27, 36, 45, 55, 73, 86, 106, 623 124, 141, 164, 183, 206, 217, 226, 255, 272, 295, 315, 354, 374, 624 401, 424, 469, 492, 523, 549, 596, 617, 645, 667, 22, 28, 34, 625 43, 54, 64, 81, 95, 114, 133, 152, 173, 191, 210, 219, 228, 626 271, 294, 314, 328, 373, 400, 423, 439, 491, 522, 548, 566, 616, 627 644, 666, 681, 25, 33, 40, 49, 58, 72, 89, 105, 121, 140, 628 160, 179, 198, 213, 222, 231, 293, 313, 327, 335, 399, 422, 438, 629 447, 521, 547, 565, 575, 643, 665, 680, 688, 35, 41, 47, 57, 630 69, 82, 97, 112, 131, 148, 168, 187, 244, 254, 270, 292, 341, 631 353, 372, 398, 454, 468, 490, 520, 582, 595, 615, 642, 694, 706, 632 724, 748, 42, 50, 56, 68, 78, 92, 108, 125, 139, 162, 178, 633 195, 253, 269, 291, 312, 352, 371, 397, 421, 467, 489, 519, 546, 634 594, 614, 641, 664, 705, 723, 747, 766, 52, 60, 67, 77, 90, 635 100, 120, 132, 150, 169, 182, 201, 268, 290, 311, 326, 370, 396, 636 420, 437, 488, 518, 545, 564, 613, 640, 663, 679, 722, 746, 765, 637 778, 62, 70, 76, 88, 101, 115, 130, 145, 163, 181, 192, 208, 638 289, 310, 325, 334, 395, 419, 436, 446, 517, 544, 563, 574, 639, 639 662, 678, 687, 745, 764, 777, 784, 71, 80, 87, 98, 109, 123, 640 138, 156, 243, 252, 267, 288, 340, 351, 369, 394, 453, 466, 487, 641 516, 581, 593, 612, 638, 693, 704, 721, 744, 789, 799, 814, 834, 642 85, 94, 104, 111, 126, 142, 155, 172, 251, 266, 287, 309, 350, 643 368, 393, 418, 465, 486, 515, 543, 592, 611, 637, 661, 703, 720, 644 743, 763, 798, 813, 833, 849, 99, 107, 116, 128, 144, 157, 170, 645 186, 265, 286, 308, 324, 367, 392, 417, 435, 485, 514, 542, 562, 646 610, 636, 660, 677, 719, 742, 762, 776, 812, 832, 848, 859, 118, 647 129, 137, 149, 161, 176, 189, 199, 285, 307, 323, 333, 391, 416, 648 434, 445, 513, 541, 561, 573, 635, 659, 676, 686, 741, 761, 775, 649 783, 831, 847, 858, 864, 136, 147, 153, 166, 242, 250, 264, 284, 650 339, 349, 366, 390, 452, 464, 484, 512, 580, 591, 609, 634, 692, 651 702, 718, 740, 788, 797, 811, 830, 868, 876, 888, 904, 154, 167, 652 175, 184, 249, 263, 283, 306, 348, 365, 389, 415, 463, 483, 511, 653 540, 590, 608, 633, 658, 701, 717, 739, 760, 796, 810, 829, 846, 654 875, 887, 903, 916, 177, 188, 196, 203, 262, 282, 305, 322, 364, 655 388, 414, 433, 482, 510, 539, 560, 607, 632, 657, 675, 716, 738, 656 759, 774, 809, 828, 845, 857, 886, 902, 915, 924, 193, 200, 207, 657 214, 281, 304, 321, 332, 387, 413, 432, 444, 509, 538, 559, 572, 658 631, 656, 674, 685, 737, 758, 773, 782, 827, 844, 856, 863, 901, 659 914, 923, 928, 241, 248, 261, 280, 338, 347, 363, 386, 451, 462, 660 481, 508, 579, 589, 606, 630, 691, 700, 715, 736, 787, 795, 808, 661 826, 867, 874, 885, 900, 931, 937, 946, 958, 247, 260, 279, 303, 662 346, 362, 385, 412, 461, 480, 507, 537, 588, 605, 629, 655, 699, 663 714, 735, 757, 794, 807, 825, 843, 873, 884, 899, 913, 936, 945, 664 957, 967, 259, 278, 302, 320, 361, 384, 411, 431, 479, 506, 536, 665 558, 604, 628, 654, 673, 713, 734, 756, 772, 806, 824, 842, 855, 666 883, 898, 912, 922, 944, 956, 966, 973, 277, 301, 319, 331, 383, 667 410, 430, 443, 505, 535, 557, 571, 627, 653, 672, 684, 733, 755, 668 771, 781, 823, 841, 854, 862, 897, 911, 921, 927, 955, 965, 972, 669 976, 337, 345, 360, 382, 450, 460, 478, 504, 578, 587, 603, 626, 670 690, 698, 712, 732, 786, 793, 805, 822, 866, 872, 882, 896, 930, 671 935, 943, 954, 978, 982, 988, 996, 344, 359, 381, 409, 459, 477, 672 503, 534, 586, 602, 625, 652, 697, 711, 731, 754, 792, 804, 821, 673 840, 871, 881, 895, 910, 934, 942, 953, 964, 981, 987, 995, 1002, 674 358, 380, 408, 429, 476, 502, 533, 556, 601, 624, 651, 671, 710, 675 730, 753, 770, 803, 820, 839, 853, 880, 894, 909, 920, 941, 952, 676 963, 971, 986, 994, 1001, 1006, 379, 407, 428, 442, 501, 532, 555, 677 570, 623, 650, 670, 683, 729, 752, 769, 780, 819, 838, 852, 861, 678 893, 908, 919, 926, 951, 962, 970, 975, 993, 1000, 1005, 1008, 449, 679 458, 475, 500, 577, 585, 600, 622, 689, 696, 709, 728, 785, 791, 680 802, 818, 865, 870, 879, 892, 929, 933, 940, 950, 977, 980, 985, 681 992, 1009, 1011, 1014, 1018, 457, 474, 499, 531, 584, 599, 621, 649, 682 695, 708, 727, 751, 790, 801, 817, 837, 869, 878, 891, 907, 932, 683 939, 949, 961, 979, 984, 991, 999, 1010, 1013, 1017, 1021, 473, 498, 684 530, 554, 598, 620, 648, 669, 707, 726, 750, 768, 800, 816, 836, 685 851, 877, 890, 906, 918, 938, 948, 960, 969, 983, 990, 998, 1004, 686 1012, 1016, 1020, 1023, 497, 529, 553, 569, 619, 647, 668, 682, 725, 687 749, 767, 779, 815, 835, 850, 860, 889, 905, 917, 925, 947, 959, 688 968, 974, 989, 997, 1003, 1007, 1015, 1019, 1022, 1024, 689 }; 690 691 const ScanOrder vp9_default_scan_orders[TX_SIZES] = { 692 { default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors }, 693 { default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors }, 694 { default_scan_16x16, vp9_default_iscan_16x16, default_scan_16x16_neighbors }, 695 { default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors }, 696 }; 697 698 const ScanOrder vp9_scan_orders[TX_SIZES][TX_TYPES] = { 699 { // TX_4X4 700 { default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors }, 701 { row_scan_4x4, vp9_row_iscan_4x4, row_scan_4x4_neighbors }, 702 { col_scan_4x4, vp9_col_iscan_4x4, col_scan_4x4_neighbors }, 703 { default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors } }, 704 { // TX_8X8 705 { default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors }, 706 { row_scan_8x8, vp9_row_iscan_8x8, row_scan_8x8_neighbors }, 707 { col_scan_8x8, vp9_col_iscan_8x8, col_scan_8x8_neighbors }, 708 { default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors } }, 709 { // TX_16X16 710 { default_scan_16x16, vp9_default_iscan_16x16, 711 default_scan_16x16_neighbors }, 712 { row_scan_16x16, vp9_row_iscan_16x16, row_scan_16x16_neighbors }, 713 { col_scan_16x16, vp9_col_iscan_16x16, col_scan_16x16_neighbors }, 714 { default_scan_16x16, vp9_default_iscan_16x16, 715 default_scan_16x16_neighbors } }, 716 { // TX_32X32 717 { default_scan_32x32, vp9_default_iscan_32x32, 718 default_scan_32x32_neighbors }, 719 { default_scan_32x32, vp9_default_iscan_32x32, 720 default_scan_32x32_neighbors }, 721 { default_scan_32x32, vp9_default_iscan_32x32, 722 default_scan_32x32_neighbors }, 723 { default_scan_32x32, vp9_default_iscan_32x32, 724 default_scan_32x32_neighbors } } 725 }; 726