15ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang/* 25ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 35ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * 45ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * Use of this source code is governed by a BSD-style license 55ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * that can be found in the LICENSE file in the root of the source 65ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * tree. An additional intellectual property rights grant can be found 75ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * in the file PATENTS. All contributing project authors may 85ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * be found in the AUTHORS file in the root of the source tree. 95ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang */ 105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include <assert.h> 125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include "vp9/common/vp9_scan.h" 145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 15b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, default_scan_4x4[16]) = { 165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 4, 1, 5, 175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 8, 2, 12, 9, 185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 3, 6, 13, 10, 195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 7, 14, 11, 15, 205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 22b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, col_scan_4x4[16]) = { 235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 4, 8, 1, 245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 12, 5, 9, 2, 255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 13, 6, 10, 3, 265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 7, 14, 11, 15, 275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, row_scan_4x4[16]) = { 305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 1, 4, 2, 315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 5, 3, 6, 8, 325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 9, 7, 12, 10, 335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 13, 11, 14, 15, 345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 36b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, default_scan_8x8[64]) = { 375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 8, 1, 16, 9, 2, 17, 24, 385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 10, 3, 18, 25, 32, 11, 4, 26, 395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 33, 19, 40, 12, 34, 27, 5, 41, 405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 20, 48, 13, 35, 42, 28, 21, 6, 415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 49, 56, 36, 43, 29, 7, 14, 50, 425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 57, 44, 22, 37, 15, 51, 58, 30, 435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 45, 23, 52, 59, 38, 31, 60, 53, 445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 46, 39, 61, 54, 47, 62, 55, 63, 455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 47b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, col_scan_8x8[64]) = { 485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 8, 16, 1, 24, 9, 32, 17, 495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 2, 40, 25, 10, 33, 18, 48, 3, 505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 26, 41, 11, 56, 19, 34, 4, 49, 515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 27, 42, 12, 35, 20, 57, 50, 28, 525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 5, 43, 13, 36, 58, 51, 21, 44, 535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 6, 29, 59, 37, 14, 52, 22, 7, 545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 45, 60, 30, 15, 38, 53, 23, 46, 555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 31, 61, 39, 54, 47, 62, 55, 63, 565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 58b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, row_scan_8x8[64]) = { 595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 1, 2, 8, 9, 3, 16, 10, 605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 4, 17, 11, 24, 5, 18, 25, 12, 615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 19, 26, 32, 6, 13, 20, 33, 27, 625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 7, 34, 40, 21, 28, 41, 14, 35, 635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 48, 42, 29, 36, 49, 22, 43, 15, 645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 56, 37, 50, 44, 30, 57, 23, 51, 655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 58, 45, 38, 52, 31, 59, 53, 46, 665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 60, 39, 61, 47, 54, 55, 62, 63, 675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 69b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, default_scan_16x16[256]) = { 705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 64, 34, 49, 19, 65, 80, 715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 50, 4, 35, 66, 20, 81, 96, 51, 5, 36, 82, 97, 67, 112, 21, 52, 725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 98, 37, 83, 113, 6, 68, 128, 53, 22, 99, 114, 84, 7, 129, 38, 69, 735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 100, 115, 144, 130, 85, 54, 23, 8, 145, 39, 70, 116, 101, 131, 160, 146, 745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 55, 86, 24, 71, 132, 117, 161, 40, 9, 102, 147, 176, 162, 87, 56, 25, 755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 133, 118, 177, 148, 72, 103, 41, 163, 10, 192, 178, 88, 57, 134, 149, 119, 765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 26, 164, 73, 104, 193, 42, 179, 208, 11, 135, 89, 165, 120, 150, 58, 194, 775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 180, 27, 74, 209, 105, 151, 136, 43, 90, 224, 166, 195, 181, 121, 210, 59, 785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 12, 152, 106, 167, 196, 75, 137, 225, 211, 240, 182, 122, 91, 28, 197, 13, 795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 226, 168, 183, 153, 44, 212, 138, 107, 241, 60, 29, 123, 198, 184, 227, 169, 805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 242, 76, 213, 154, 45, 92, 14, 199, 139, 61, 228, 214, 170, 185, 243, 108, 815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 77, 155, 30, 15, 200, 229, 124, 215, 244, 93, 46, 186, 171, 201, 109, 140, 825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 230, 62, 216, 245, 31, 125, 78, 156, 231, 47, 187, 202, 217, 94, 246, 141, 835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 63, 232, 172, 110, 247, 157, 79, 218, 203, 126, 233, 188, 248, 95, 173, 142, 845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 219, 111, 249, 234, 158, 127, 189, 204, 250, 235, 143, 174, 220, 205, 159, 855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 251, 865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 190, 221, 175, 236, 237, 191, 206, 252, 222, 253, 207, 238, 223, 254, 239, 875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 255, 885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 90b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, col_scan_16x16[256]) = { 915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 16, 32, 48, 1, 64, 17, 80, 33, 96, 49, 2, 65, 112, 18, 81, 925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 34, 128, 50, 97, 3, 66, 144, 19, 113, 35, 82, 160, 98, 51, 129, 4, 935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 67, 176, 20, 114, 145, 83, 36, 99, 130, 52, 192, 5, 161, 68, 115, 21, 945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 146, 84, 208, 177, 37, 131, 100, 53, 162, 224, 69, 6, 116, 193, 147, 85, 955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 22, 240, 132, 38, 178, 101, 163, 54, 209, 117, 70, 7, 148, 194, 86, 179, 965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 225, 23, 133, 39, 164, 8, 102, 210, 241, 55, 195, 118, 149, 71, 180, 24, 975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 87, 226, 134, 165, 211, 40, 103, 56, 72, 150, 196, 242, 119, 9, 181, 227, 985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 88, 166, 25, 135, 41, 104, 212, 57, 151, 197, 120, 73, 243, 182, 136, 167, 995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 213, 89, 10, 228, 105, 152, 198, 26, 42, 121, 183, 244, 168, 58, 137, 229, 1005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 74, 214, 90, 153, 199, 184, 11, 106, 245, 27, 122, 230, 169, 43, 215, 59, 1015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 200, 138, 185, 246, 75, 12, 91, 154, 216, 231, 107, 28, 44, 201, 123, 170, 1025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 60, 247, 232, 76, 139, 13, 92, 217, 186, 248, 155, 108, 29, 124, 45, 202, 1035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 233, 171, 61, 14, 77, 140, 15, 249, 93, 30, 187, 156, 218, 46, 109, 125, 1045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 62, 172, 78, 203, 31, 141, 234, 94, 47, 188, 63, 157, 110, 250, 219, 79, 1055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 126, 204, 173, 142, 95, 189, 111, 235, 158, 220, 251, 127, 174, 143, 205, 1065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 236, 1075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 159, 190, 221, 252, 175, 206, 237, 191, 253, 222, 238, 207, 254, 223, 239, 1085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 255, 1095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 1105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 111b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, row_scan_16x16[256]) = { 1125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 1, 2, 16, 3, 17, 4, 18, 32, 5, 33, 19, 6, 34, 48, 20, 1135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 49, 7, 35, 21, 50, 64, 8, 36, 65, 22, 51, 37, 80, 9, 66, 52, 1145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 23, 38, 81, 67, 10, 53, 24, 82, 68, 96, 39, 11, 54, 83, 97, 69, 1155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 25, 98, 84, 40, 112, 55, 12, 70, 99, 113, 85, 26, 41, 56, 114, 100, 1165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 13, 71, 128, 86, 27, 115, 101, 129, 42, 57, 72, 116, 14, 87, 130, 102, 1175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 144, 73, 131, 117, 28, 58, 15, 88, 43, 145, 103, 132, 146, 118, 74, 160, 1185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 89, 133, 104, 29, 59, 147, 119, 44, 161, 148, 90, 105, 134, 162, 120, 176, 1195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 75, 135, 149, 30, 60, 163, 177, 45, 121, 91, 106, 164, 178, 150, 192, 136, 1205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 165, 179, 31, 151, 193, 76, 122, 61, 137, 194, 107, 152, 180, 208, 46, 166, 1215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 167, 195, 92, 181, 138, 209, 123, 153, 224, 196, 77, 168, 210, 182, 240, 108, 1225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 197, 62, 154, 225, 183, 169, 211, 47, 139, 93, 184, 226, 212, 241, 198, 170, 1235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 124, 155, 199, 78, 213, 185, 109, 227, 200, 63, 228, 242, 140, 214, 171, 186, 1245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 156, 229, 243, 125, 94, 201, 244, 215, 216, 230, 141, 187, 202, 79, 172, 110, 1255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 157, 245, 217, 231, 95, 246, 232, 126, 203, 247, 233, 173, 218, 142, 111, 1265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 158, 1275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 188, 248, 127, 234, 219, 249, 189, 204, 143, 174, 159, 250, 235, 205, 220, 1285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 175, 1295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 190, 251, 221, 191, 206, 236, 207, 237, 252, 222, 253, 223, 238, 239, 254, 1305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 255, 1315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 1325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 133b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static const int16_t, default_scan_32x32[1024]) = { 1345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 0, 32, 1, 64, 33, 2, 96, 65, 34, 128, 3, 97, 66, 160, 1355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 129, 35, 98, 4, 67, 130, 161, 192, 36, 99, 224, 5, 162, 193, 1365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 68, 131, 37, 100, 1375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 225, 194, 256, 163, 69, 132, 6, 226, 257, 288, 195, 101, 164, 38, 1385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 258, 7, 227, 289, 133, 320, 70, 196, 165, 290, 259, 228, 39, 321, 1395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 102, 352, 8, 197, 1405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 71, 134, 322, 291, 260, 353, 384, 229, 166, 103, 40, 354, 323, 292, 1415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 135, 385, 198, 261, 72, 9, 416, 167, 386, 355, 230, 324, 104, 293, 1425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 41, 417, 199, 136, 1435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 262, 387, 448, 325, 356, 10, 73, 418, 231, 168, 449, 294, 388, 105, 1445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 419, 263, 42, 200, 357, 450, 137, 480, 74, 326, 232, 11, 389, 169, 1455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 295, 420, 106, 451, 1465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 481, 358, 264, 327, 201, 43, 138, 512, 482, 390, 296, 233, 170, 421, 1475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 75, 452, 359, 12, 513, 265, 483, 328, 107, 202, 514, 544, 422, 391, 1485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 453, 139, 44, 234, 1495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 484, 297, 360, 171, 76, 515, 545, 266, 329, 454, 13, 423, 203, 108, 1505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 546, 485, 576, 298, 235, 140, 361, 330, 172, 547, 45, 455, 267, 577, 1515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 486, 77, 204, 362, 1525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 608, 14, 299, 578, 109, 236, 487, 609, 331, 141, 579, 46, 15, 173, 1535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 610, 363, 78, 205, 16, 110, 237, 611, 142, 47, 174, 79, 206, 17, 1545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 111, 238, 48, 143, 1555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 80, 175, 112, 207, 49, 18, 239, 81, 113, 19, 50, 82, 114, 51, 1565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 83, 115, 640, 516, 392, 268, 144, 20, 672, 641, 548, 517, 424, 1575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 393, 300, 269, 176, 145, 1585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 52, 21, 704, 673, 642, 580, 549, 518, 456, 425, 394, 332, 301, 1595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 270, 208, 177, 146, 84, 53, 22, 736, 705, 674, 643, 612, 581, 1605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 550, 519, 488, 457, 426, 395, 1615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 364, 333, 302, 271, 240, 209, 178, 147, 116, 85, 54, 23, 737, 1625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 706, 675, 613, 582, 551, 489, 458, 427, 365, 334, 303, 241, 1635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 210, 179, 117, 86, 55, 738, 707, 1645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 614, 583, 490, 459, 366, 335, 242, 211, 118, 87, 739, 615, 491, 1655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 367, 243, 119, 768, 644, 520, 396, 272, 148, 24, 800, 769, 676, 1665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 645, 552, 521, 428, 397, 304, 1675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 273, 180, 149, 56, 25, 832, 801, 770, 708, 677, 646, 584, 553, 1685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 522, 460, 429, 398, 336, 305, 274, 212, 181, 150, 88, 57, 26, 1695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 864, 833, 802, 771, 740, 709, 1705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 678, 647, 616, 585, 554, 523, 492, 461, 430, 399, 368, 337, 306, 1715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 275, 244, 213, 182, 151, 120, 89, 58, 27, 865, 834, 803, 741, 1725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 710, 679, 617, 586, 555, 493, 1735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 462, 431, 369, 338, 307, 245, 214, 183, 121, 90, 59, 866, 835, 1745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 742, 711, 618, 587, 494, 463, 370, 339, 246, 215, 122, 91, 867, 1755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 743, 619, 495, 371, 247, 123, 1765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 896, 772, 648, 524, 400, 276, 152, 28, 928, 897, 804, 773, 680, 1775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 649, 556, 525, 432, 401, 308, 277, 184, 153, 60, 29, 960, 929, 1785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 898, 836, 805, 774, 712, 681, 1795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 650, 588, 557, 526, 464, 433, 402, 340, 309, 278, 216, 185, 154, 1805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 92, 61, 30, 992, 961, 930, 899, 868, 837, 806, 775, 744, 713, 682, 1815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 651, 620, 589, 558, 527, 1825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 496, 465, 434, 403, 372, 341, 310, 279, 248, 217, 186, 155, 124, 1835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 93, 62, 31, 993, 962, 931, 869, 838, 807, 745, 714, 683, 621, 590, 1845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 559, 497, 466, 435, 373, 1855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 342, 311, 249, 218, 187, 125, 94, 63, 994, 963, 870, 839, 746, 715, 1865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 622, 591, 498, 467, 374, 343, 250, 219, 126, 95, 995, 871, 747, 623, 1875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 499, 375, 251, 127, 1885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 900, 776, 652, 528, 404, 280, 156, 932, 901, 808, 777, 684, 653, 560, 1895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 529, 436, 405, 312, 281, 188, 157, 964, 933, 902, 840, 809, 778, 716, 1905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 685, 654, 592, 561, 1915ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 530, 468, 437, 406, 344, 313, 282, 220, 189, 158, 996, 965, 934, 903, 1925ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 872, 841, 810, 779, 748, 717, 686, 655, 624, 593, 562, 531, 500, 469, 1935ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 438, 407, 376, 345, 1945ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 314, 283, 252, 221, 190, 159, 997, 966, 935, 873, 842, 811, 749, 718, 1955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 687, 625, 594, 563, 501, 470, 439, 377, 346, 315, 253, 222, 191, 998, 1965ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 967, 874, 843, 750, 1975ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 719, 626, 595, 502, 471, 378, 347, 254, 223, 999, 875, 751, 627, 503, 1985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 379, 255, 904, 780, 656, 532, 408, 284, 936, 905, 812, 781, 688, 657, 1995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 564, 533, 440, 409, 2005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 316, 285, 968, 937, 906, 844, 813, 782, 720, 689, 658, 596, 565, 534, 2015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 472, 441, 410, 348, 317, 286, 1000, 969, 938, 907, 876, 845, 814, 783, 2025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 752, 721, 690, 659, 2035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 628, 597, 566, 535, 504, 473, 442, 411, 380, 349, 318, 287, 1001, 970, 2045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 939, 877, 846, 815, 753, 722, 691, 629, 598, 567, 505, 474, 443, 381, 2055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 350, 319, 1002, 971, 2065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 878, 847, 754, 723, 630, 599, 506, 475, 382, 351, 1003, 879, 755, 631, 2075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 507, 383, 908, 784, 660, 536, 412, 940, 909, 816, 785, 692, 661, 568, 2085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 537, 444, 413, 972, 2095ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 941, 910, 848, 817, 786, 724, 693, 662, 600, 569, 538, 476, 445, 414, 2105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1004, 973, 942, 911, 880, 849, 818, 787, 756, 725, 694, 663, 632, 601, 2115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 570, 539, 508, 477, 2125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 446, 415, 1005, 974, 943, 881, 850, 819, 757, 726, 695, 633, 602, 571, 2135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 509, 478, 447, 1006, 975, 882, 851, 758, 727, 634, 603, 510, 479, 2145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1007, 883, 759, 635, 511, 2155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 912, 788, 664, 540, 944, 913, 820, 789, 696, 665, 572, 541, 976, 945, 2165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 914, 852, 821, 790, 728, 697, 666, 604, 573, 542, 1008, 977, 946, 915, 2175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 884, 853, 822, 791, 2185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 760, 729, 698, 667, 636, 605, 574, 543, 1009, 978, 947, 885, 854, 823, 2195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 761, 730, 699, 637, 606, 575, 1010, 979, 886, 855, 762, 731, 638, 607, 2205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1011, 887, 763, 639, 2215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 916, 792, 668, 948, 917, 824, 793, 700, 669, 980, 949, 918, 856, 825, 2225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 794, 732, 701, 670, 1012, 981, 950, 919, 888, 857, 826, 795, 764, 733, 2235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 702, 671, 1013, 982, 2245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 951, 889, 858, 827, 765, 734, 703, 1014, 983, 890, 859, 766, 735, 1015, 2255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 891, 767, 920, 796, 952, 921, 828, 797, 984, 953, 922, 860, 829, 798, 2265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1016, 985, 954, 923, 2275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 892, 861, 830, 799, 1017, 986, 955, 893, 862, 831, 1018, 987, 894, 863, 2285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 1019, 895, 924, 956, 925, 988, 957, 926, 1020, 989, 958, 927, 1021, 2295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 990, 959, 1022, 991, 1023, 2305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 2315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 2325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang// Neighborhood 5-tuples for various scans and blocksizes, 2335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang// in {top, left, topleft, topright, bottomleft} order 2345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang// for each position in raster scan order. 2355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang// -1 indicates the neighbor does not exist. 236b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 237b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_4x4_neighbors[17 * MAX_NEIGHBORS]); 238b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 239b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_4x4_neighbors[17 * MAX_NEIGHBORS]); 240b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 241b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_4x4_neighbors[17 * MAX_NEIGHBORS]); 242b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 243b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_8x8_neighbors[65 * MAX_NEIGHBORS]); 244b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 245b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_8x8_neighbors[65 * MAX_NEIGHBORS]); 246b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 247b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_8x8_neighbors[65 * MAX_NEIGHBORS]); 248b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 249b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_16x16_neighbors[257 * MAX_NEIGHBORS]); 250b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 251b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_16x16_neighbors[257 * MAX_NEIGHBORS]); 252b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 253b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_16x16_neighbors[257 * MAX_NEIGHBORS]); 254b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, 255b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]); 2565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 257b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_default_iscan_4x4[16]); 258b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_col_iscan_4x4[16]); 259b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_row_iscan_4x4[16]); 260b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_col_iscan_8x8[64]); 261b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_row_iscan_8x8[64]); 262b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_default_iscan_8x8[64]); 263b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_col_iscan_16x16[256]); 264b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_row_iscan_16x16[256]); 265b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_default_iscan_16x16[256]); 266b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh VenkatasubramanianDECLARE_ALIGNED(16, static int16_t, vp9_default_iscan_32x32[1024]); 2675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 268b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianconst scan_order vp9_default_scan_orders[TX_SIZES] = { 269b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors}, 270b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors}, 271b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_16x16, vp9_default_iscan_16x16, default_scan_16x16_neighbors}, 272b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors}, 273b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}; 274b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 275b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianconst scan_order vp9_scan_orders[TX_SIZES][TX_TYPES] = { 276b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian { // TX_4X4 277b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors}, 278b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {row_scan_4x4, vp9_row_iscan_4x4, row_scan_4x4_neighbors}, 279b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {col_scan_4x4, vp9_col_iscan_4x4, col_scan_4x4_neighbors}, 280b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_4x4, vp9_default_iscan_4x4, default_scan_4x4_neighbors} 281b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian }, { // TX_8X8 282b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors}, 283b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {row_scan_8x8, vp9_row_iscan_8x8, row_scan_8x8_neighbors}, 284b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {col_scan_8x8, vp9_col_iscan_8x8, col_scan_8x8_neighbors}, 285b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_8x8, vp9_default_iscan_8x8, default_scan_8x8_neighbors} 286b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian }, { // TX_16X16 287b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_16x16, vp9_default_iscan_16x16, default_scan_16x16_neighbors}, 288b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {row_scan_16x16, vp9_row_iscan_16x16, row_scan_16x16_neighbors}, 289b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {col_scan_16x16, vp9_col_iscan_16x16, col_scan_16x16_neighbors}, 290b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_16x16, vp9_default_iscan_16x16, default_scan_16x16_neighbors} 291b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian }, { // TX_32X32 292b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors}, 293b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors}, 294b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors}, 295b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian {default_scan_32x32, vp9_default_iscan_32x32, default_scan_32x32_neighbors}, 296b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } 297b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian}; 2985ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 2995ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangstatic int find_in_scan(const int16_t *scan, int l, int idx) { 3005ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int n, l2 = l * l; 3015ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang for (n = 0; n < l2; n++) { 3025ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int rc = scan[n]; 3035ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang if (rc == idx) 3045ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang return n; 3055ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 3065ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang assert(0); 3075ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang return -1; 3085ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang} 309b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 310b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianstatic void init_scan_neighbors(const int16_t *scan, int16_t *iscan, int l, 311b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian int16_t *neighbors) { 3125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int l2 = l * l; 3135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int n, i, j; 3145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 3155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // dc doesn't use this type of prediction 3165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * 0 + 0] = 0; 3175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * 0 + 1] = 0; 3185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang iscan[0] = find_in_scan(scan, l, 0); 3195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang for (n = 1; n < l2; n++) { 3205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int rc = scan[n]; 3215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang iscan[n] = find_in_scan(scan, l, n); 3225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang i = rc / l; 3235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang j = rc % l; 3245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang if (i > 0 && j > 0) { 3255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // col/row scan is used for adst/dct, and generally means that 3265ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // energy decreases to zero much faster in the dimension in 3275ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // which ADST is used compared to the direction in which DCT 3285ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // is used. Likewise, we find much higher correlation between 3295ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // coefficients within the direction in which DCT is used. 3305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // Therefore, if we use ADST/DCT, prefer the DCT neighbor coeff 3315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // as a context. If ADST or DCT is used in both directions, we 3325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // use the combination of the two as a context. 3335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int a = (i - 1) * l + j; 3345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int b = i * l + j - 1; 335b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian if (scan == col_scan_4x4 || scan == col_scan_8x8 || 336b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian scan == col_scan_16x16) { 3375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // in the col/row scan cases (as well as left/top edge cases), we set 3385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // both contexts to the same value, so we can branchlessly do a+b+1>>1 3395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // which automatically becomes a if a == b 3405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 0] = 3415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 1] = a; 342b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian } else if (scan == row_scan_4x4 || scan == row_scan_8x8 || 343b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian scan == row_scan_16x16) { 3445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 0] = 3455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 1] = b; 3465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } else { 3475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 0] = a; 3485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 1] = b; 3495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 3505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } else if (i > 0) { 3515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 0] = 3525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 1] = (i - 1) * l + j; 3535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } else { 3545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang assert(j > 0); 3555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 0] = 3565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * n + 1] = i * l + j - 1; 3575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 3585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang assert(iscan[neighbors[MAX_NEIGHBORS * n + 0]] < n); 3595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang } 3605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // one padding item so we don't have to add branches in code to handle 3615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang // calls to get_coef_context() for the token after the final dc token 3625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * l2 + 0] = 0; 3635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang neighbors[MAX_NEIGHBORS * l2 + 1] = 0; 3645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang} 3655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 3665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid vp9_init_neighbors() { 367b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(default_scan_4x4, vp9_default_iscan_4x4, 4, 368b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_4x4_neighbors); 369b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(row_scan_4x4, vp9_row_iscan_4x4, 4, 370b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_4x4_neighbors); 371b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(col_scan_4x4, vp9_col_iscan_4x4, 4, 372b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_4x4_neighbors); 373b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(default_scan_8x8, vp9_default_iscan_8x8, 8, 374b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_8x8_neighbors); 375b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(row_scan_8x8, vp9_row_iscan_8x8, 8, 376b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_8x8_neighbors); 377b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(col_scan_8x8, vp9_col_iscan_8x8, 8, 378b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_8x8_neighbors); 379b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(default_scan_16x16, vp9_default_iscan_16x16, 16, 380b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_16x16_neighbors); 381b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(row_scan_16x16, vp9_row_iscan_16x16, 16, 382b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian row_scan_16x16_neighbors); 383b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(col_scan_16x16, vp9_col_iscan_16x16, 16, 384b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian col_scan_16x16_neighbors); 385b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian init_scan_neighbors(default_scan_32x32, vp9_default_iscan_32x32, 32, 386b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian default_scan_32x32_neighbors); 3875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang} 388