Home | History | Annotate | Download | only in common
      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 "vp9/common/vp9_entropy.h"
     12 #include "vp9/common/vp9_blockd.h"
     13 #include "vp9/common/vp9_onyxc_int.h"
     14 #include "vp9/common/vp9_entropymode.h"
     15 #include "vpx_mem/vpx_mem.h"
     16 #include "vpx/vpx_integer.h"
     17 
     18 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES)
     19 
     20 DECLARE_ALIGNED(16, const uint8_t, vp9_norm[256]) = {
     21   0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
     22   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
     23   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     24   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
     25   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     26   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     27   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     28   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     29   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     30   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     31   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     32   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     33   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     34   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     35   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
     36   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
     37 };
     38 
     39 DECLARE_ALIGNED(16, const uint8_t,
     40                 vp9_coefband_trans_8x8plus[MAXBAND_INDEX + 1]) = {
     41   0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
     42   4, 4, 4, 4, 4, 5
     43 };
     44 
     45 DECLARE_ALIGNED(16, const uint8_t,
     46                 vp9_coefband_trans_4x4[MAXBAND_INDEX + 1]) = {
     47   0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5,
     48   5, 5, 5, 5, 5, 5
     49 };
     50 
     51 DECLARE_ALIGNED(16, const uint8_t, vp9_pt_energy_class[MAX_ENTROPY_TOKENS]) = {
     52   0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5
     53 };
     54 
     55 DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_4x4[16]) = {
     56   0,  4,  1,  5,
     57   8,  2, 12,  9,
     58   3,  6, 13, 10,
     59   7, 14, 11, 15,
     60 };
     61 
     62 DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_4x4[16]) = {
     63   0,  4,  8,  1,
     64   12,  5,  9,  2,
     65   13,  6, 10,  3,
     66   7, 14, 11, 15,
     67 };
     68 
     69 DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_4x4[16]) = {
     70   0,  1,  4,  2,
     71   5,  3,  6,  8,
     72   9,  7, 12, 10,
     73   13, 11, 14, 15,
     74 };
     75 
     76 DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_8x8[64]) = {
     77   0,  8,  1, 16,  9,  2, 17, 24,
     78   10,  3, 18, 25, 32, 11,  4, 26,
     79   33, 19, 40, 12, 34, 27,  5, 41,
     80   20, 48, 13, 35, 42, 28, 21,  6,
     81   49, 56, 36, 43, 29,  7, 14, 50,
     82   57, 44, 22, 37, 15, 51, 58, 30,
     83   45, 23, 52, 59, 38, 31, 60, 53,
     84   46, 39, 61, 54, 47, 62, 55, 63,
     85 };
     86 
     87 DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_8x8[64]) = {
     88   0,  8, 16,  1, 24,  9, 32, 17,
     89   2, 40, 25, 10, 33, 18, 48,  3,
     90   26, 41, 11, 56, 19, 34,  4, 49,
     91   27, 42, 12, 35, 20, 57, 50, 28,
     92   5, 43, 13, 36, 58, 51, 21, 44,
     93   6, 29, 59, 37, 14, 52, 22,  7,
     94   45, 60, 30, 15, 38, 53, 23, 46,
     95   31, 61, 39, 54, 47, 62, 55, 63,
     96 };
     97 
     98 DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_8x8[64]) = {
     99   0,  1,  2,  8,  9,  3, 16, 10,
    100   4, 17, 11, 24,  5, 18, 25, 12,
    101   19, 26, 32,  6, 13, 20, 33, 27,
    102   7, 34, 40, 21, 28, 41, 14, 35,
    103   48, 42, 29, 36, 49, 22, 43, 15,
    104   56, 37, 50, 44, 30, 57, 23, 51,
    105   58, 45, 38, 52, 31, 59, 53, 46,
    106   60, 39, 61, 47, 54, 55, 62, 63,
    107 };
    108 
    109 DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_16x16[256]) = {
    110   0,  16,   1,  32,  17,   2,  48,  33,  18,   3,  64,  34,  49,  19,  65,  80,
    111   50,   4,  35,  66,  20,  81,  96,  51,   5,  36,  82,  97,  67, 112,  21,  52,
    112   98,  37,  83, 113,   6,  68, 128,  53,  22,  99, 114,  84,   7, 129,  38,  69,
    113   100, 115, 144, 130,  85,  54,  23,   8, 145,  39,  70, 116, 101, 131, 160, 146,
    114   55,  86,  24,  71, 132, 117, 161,  40,   9, 102, 147, 176, 162,  87,  56,  25,
    115   133, 118, 177, 148,  72, 103,  41, 163,  10, 192, 178,  88,  57, 134, 149, 119,
    116   26, 164,  73, 104, 193,  42, 179, 208,  11, 135,  89, 165, 120, 150,  58, 194,
    117   180,  27,  74, 209, 105, 151, 136,  43,  90, 224, 166, 195, 181, 121, 210,  59,
    118   12, 152, 106, 167, 196,  75, 137, 225, 211, 240, 182, 122,  91,  28, 197,  13,
    119   226, 168, 183, 153,  44, 212, 138, 107, 241,  60,  29, 123, 198, 184, 227, 169,
    120   242,  76, 213, 154,  45,  92,  14, 199, 139,  61, 228, 214, 170, 185, 243, 108,
    121   77, 155,  30,  15, 200, 229, 124, 215, 244,  93,  46, 186, 171, 201, 109, 140,
    122   230,  62, 216, 245,  31, 125,  78, 156, 231,  47, 187, 202, 217,  94, 246, 141,
    123   63, 232, 172, 110, 247, 157,  79, 218, 203, 126, 233, 188, 248,  95, 173, 142,
    124   219, 111, 249, 234, 158, 127, 189, 204, 250, 235, 143, 174, 220, 205, 159, 251,
    125   190, 221, 175, 236, 237, 191, 206, 252, 222, 253, 207, 238, 223, 254, 239, 255,
    126 };
    127 
    128 DECLARE_ALIGNED(16, const int16_t, vp9_col_scan_16x16[256]) = {
    129   0,  16,  32,  48,   1,  64,  17,  80,  33,  96,  49,   2,  65, 112,  18,  81,
    130   34, 128,  50,  97,   3,  66, 144,  19, 113,  35,  82, 160,  98,  51, 129,   4,
    131   67, 176,  20, 114, 145,  83,  36,  99, 130,  52, 192,   5, 161,  68, 115,  21,
    132   146,  84, 208, 177,  37, 131, 100,  53, 162, 224,  69,   6, 116, 193, 147,  85,
    133   22, 240, 132,  38, 178, 101, 163,  54, 209, 117,  70,   7, 148, 194,  86, 179,
    134   225,  23, 133,  39, 164,   8, 102, 210, 241,  55, 195, 118, 149,  71, 180,  24,
    135   87, 226, 134, 165, 211,  40, 103,  56,  72, 150, 196, 242, 119,   9, 181, 227,
    136   88, 166,  25, 135,  41, 104, 212,  57, 151, 197, 120,  73, 243, 182, 136, 167,
    137   213,  89,  10, 228, 105, 152, 198,  26,  42, 121, 183, 244, 168,  58, 137, 229,
    138   74, 214,  90, 153, 199, 184,  11, 106, 245,  27, 122, 230, 169,  43, 215,  59,
    139   200, 138, 185, 246,  75,  12,  91, 154, 216, 231, 107,  28,  44, 201, 123, 170,
    140   60, 247, 232,  76, 139,  13,  92, 217, 186, 248, 155, 108,  29, 124,  45, 202,
    141   233, 171,  61,  14,  77, 140,  15, 249,  93,  30, 187, 156, 218,  46, 109, 125,
    142   62, 172,  78, 203,  31, 141, 234,  94,  47, 188,  63, 157, 110, 250, 219,  79,
    143   126, 204, 173, 142,  95, 189, 111, 235, 158, 220, 251, 127, 174, 143, 205, 236,
    144   159, 190, 221, 252, 175, 206, 237, 191, 253, 222, 238, 207, 254, 223, 239, 255,
    145 };
    146 
    147 DECLARE_ALIGNED(16, const int16_t, vp9_row_scan_16x16[256]) = {
    148   0,   1,   2,  16,   3,  17,   4,  18,  32,   5,  33,  19,   6,  34,  48,  20,
    149   49,   7,  35,  21,  50,  64,   8,  36,  65,  22,  51,  37,  80,   9,  66,  52,
    150   23,  38,  81,  67,  10,  53,  24,  82,  68,  96,  39,  11,  54,  83,  97,  69,
    151   25,  98,  84,  40, 112,  55,  12,  70,  99, 113,  85,  26,  41,  56, 114, 100,
    152   13,  71, 128,  86,  27, 115, 101, 129,  42,  57,  72, 116,  14,  87, 130, 102,
    153   144,  73, 131, 117,  28,  58,  15,  88,  43, 145, 103, 132, 146, 118,  74, 160,
    154   89, 133, 104,  29,  59, 147, 119,  44, 161, 148,  90, 105, 134, 162, 120, 176,
    155   75, 135, 149,  30,  60, 163, 177,  45, 121,  91, 106, 164, 178, 150, 192, 136,
    156   165, 179,  31, 151, 193,  76, 122,  61, 137, 194, 107, 152, 180, 208,  46, 166,
    157   167, 195,  92, 181, 138, 209, 123, 153, 224, 196,  77, 168, 210, 182, 240, 108,
    158   197,  62, 154, 225, 183, 169, 211,  47, 139,  93, 184, 226, 212, 241, 198, 170,
    159   124, 155, 199,  78, 213, 185, 109, 227, 200,  63, 228, 242, 140, 214, 171, 186,
    160   156, 229, 243, 125,  94, 201, 244, 215, 216, 230, 141, 187, 202,  79, 172, 110,
    161   157, 245, 217, 231,  95, 246, 232, 126, 203, 247, 233, 173, 218, 142, 111, 158,
    162   188, 248, 127, 234, 219, 249, 189, 204, 143, 174, 159, 250, 235, 205, 220, 175,
    163   190, 251, 221, 191, 206, 236, 207, 237, 252, 222, 253, 223, 238, 239, 254, 255,
    164 };
    165 
    166 DECLARE_ALIGNED(16, const int16_t, vp9_default_scan_32x32[1024]) = {
    167   0,   32,    1,   64,   33,    2,   96,   65,   34,  128,    3,   97,   66,  160,  129,   35,   98,    4,   67,  130,  161,  192,   36,   99,  224,    5,  162,  193,   68,  131,   37,  100,
    168   225,  194,  256,  163,   69,  132,    6,  226,  257,  288,  195,  101,  164,   38,  258,    7,  227,  289,  133,  320,   70,  196,  165,  290,  259,  228,   39,  321,  102,  352,    8,  197,
    169   71,  134,  322,  291,  260,  353,  384,  229,  166,  103,   40,  354,  323,  292,  135,  385,  198,  261,   72,    9,  416,  167,  386,  355,  230,  324,  104,  293,   41,  417,  199,  136,
    170   262,  387,  448,  325,  356,   10,   73,  418,  231,  168,  449,  294,  388,  105,  419,  263,   42,  200,  357,  450,  137,  480,   74,  326,  232,   11,  389,  169,  295,  420,  106,  451,
    171   481,  358,  264,  327,  201,   43,  138,  512,  482,  390,  296,  233,  170,  421,   75,  452,  359,   12,  513,  265,  483,  328,  107,  202,  514,  544,  422,  391,  453,  139,   44,  234,
    172   484,  297,  360,  171,   76,  515,  545,  266,  329,  454,   13,  423,  203,  108,  546,  485,  576,  298,  235,  140,  361,  330,  172,  547,   45,  455,  267,  577,  486,   77,  204,  362,
    173   608,   14,  299,  578,  109,  236,  487,  609,  331,  141,  579,   46,   15,  173,  610,  363,   78,  205,   16,  110,  237,  611,  142,   47,  174,   79,  206,   17,  111,  238,   48,  143,
    174   80,  175,  112,  207,   49,   18,  239,   81,  113,   19,   50,   82,  114,   51,   83,  115,  640,  516,  392,  268,  144,   20,  672,  641,  548,  517,  424,  393,  300,  269,  176,  145,
    175   52,   21,  704,  673,  642,  580,  549,  518,  456,  425,  394,  332,  301,  270,  208,  177,  146,   84,   53,   22,  736,  705,  674,  643,  612,  581,  550,  519,  488,  457,  426,  395,
    176   364,  333,  302,  271,  240,  209,  178,  147,  116,   85,   54,   23,  737,  706,  675,  613,  582,  551,  489,  458,  427,  365,  334,  303,  241,  210,  179,  117,   86,   55,  738,  707,
    177   614,  583,  490,  459,  366,  335,  242,  211,  118,   87,  739,  615,  491,  367,  243,  119,  768,  644,  520,  396,  272,  148,   24,  800,  769,  676,  645,  552,  521,  428,  397,  304,
    178   273,  180,  149,   56,   25,  832,  801,  770,  708,  677,  646,  584,  553,  522,  460,  429,  398,  336,  305,  274,  212,  181,  150,   88,   57,   26,  864,  833,  802,  771,  740,  709,
    179   678,  647,  616,  585,  554,  523,  492,  461,  430,  399,  368,  337,  306,  275,  244,  213,  182,  151,  120,   89,   58,   27,  865,  834,  803,  741,  710,  679,  617,  586,  555,  493,
    180   462,  431,  369,  338,  307,  245,  214,  183,  121,   90,   59,  866,  835,  742,  711,  618,  587,  494,  463,  370,  339,  246,  215,  122,   91,  867,  743,  619,  495,  371,  247,  123,
    181   896,  772,  648,  524,  400,  276,  152,   28,  928,  897,  804,  773,  680,  649,  556,  525,  432,  401,  308,  277,  184,  153,   60,   29,  960,  929,  898,  836,  805,  774,  712,  681,
    182   650,  588,  557,  526,  464,  433,  402,  340,  309,  278,  216,  185,  154,   92,   61,   30,  992,  961,  930,  899,  868,  837,  806,  775,  744,  713,  682,  651,  620,  589,  558,  527,
    183   496,  465,  434,  403,  372,  341,  310,  279,  248,  217,  186,  155,  124,   93,   62,   31,  993,  962,  931,  869,  838,  807,  745,  714,  683,  621,  590,  559,  497,  466,  435,  373,
    184   342,  311,  249,  218,  187,  125,   94,   63,  994,  963,  870,  839,  746,  715,  622,  591,  498,  467,  374,  343,  250,  219,  126,   95,  995,  871,  747,  623,  499,  375,  251,  127,
    185   900,  776,  652,  528,  404,  280,  156,  932,  901,  808,  777,  684,  653,  560,  529,  436,  405,  312,  281,  188,  157,  964,  933,  902,  840,  809,  778,  716,  685,  654,  592,  561,
    186   530,  468,  437,  406,  344,  313,  282,  220,  189,  158,  996,  965,  934,  903,  872,  841,  810,  779,  748,  717,  686,  655,  624,  593,  562,  531,  500,  469,  438,  407,  376,  345,
    187   314,  283,  252,  221,  190,  159,  997,  966,  935,  873,  842,  811,  749,  718,  687,  625,  594,  563,  501,  470,  439,  377,  346,  315,  253,  222,  191,  998,  967,  874,  843,  750,
    188   719,  626,  595,  502,  471,  378,  347,  254,  223,  999,  875,  751,  627,  503,  379,  255,  904,  780,  656,  532,  408,  284,  936,  905,  812,  781,  688,  657,  564,  533,  440,  409,
    189   316,  285,  968,  937,  906,  844,  813,  782,  720,  689,  658,  596,  565,  534,  472,  441,  410,  348,  317,  286, 1000,  969,  938,  907,  876,  845,  814,  783,  752,  721,  690,  659,
    190   628,  597,  566,  535,  504,  473,  442,  411,  380,  349,  318,  287, 1001,  970,  939,  877,  846,  815,  753,  722,  691,  629,  598,  567,  505,  474,  443,  381,  350,  319, 1002,  971,
    191   878,  847,  754,  723,  630,  599,  506,  475,  382,  351, 1003,  879,  755,  631,  507,  383,  908,  784,  660,  536,  412,  940,  909,  816,  785,  692,  661,  568,  537,  444,  413,  972,
    192   941,  910,  848,  817,  786,  724,  693,  662,  600,  569,  538,  476,  445,  414, 1004,  973,  942,  911,  880,  849,  818,  787,  756,  725,  694,  663,  632,  601,  570,  539,  508,  477,
    193   446,  415, 1005,  974,  943,  881,  850,  819,  757,  726,  695,  633,  602,  571,  509,  478,  447, 1006,  975,  882,  851,  758,  727,  634,  603,  510,  479, 1007,  883,  759,  635,  511,
    194   912,  788,  664,  540,  944,  913,  820,  789,  696,  665,  572,  541,  976,  945,  914,  852,  821,  790,  728,  697,  666,  604,  573,  542, 1008,  977,  946,  915,  884,  853,  822,  791,
    195   760,  729,  698,  667,  636,  605,  574,  543, 1009,  978,  947,  885,  854,  823,  761,  730,  699,  637,  606,  575, 1010,  979,  886,  855,  762,  731,  638,  607, 1011,  887,  763,  639,
    196   916,  792,  668,  948,  917,  824,  793,  700,  669,  980,  949,  918,  856,  825,  794,  732,  701,  670, 1012,  981,  950,  919,  888,  857,  826,  795,  764,  733,  702,  671, 1013,  982,
    197   951,  889,  858,  827,  765,  734,  703, 1014,  983,  890,  859,  766,  735, 1015,  891,  767,  920,  796,  952,  921,  828,  797,  984,  953,  922,  860,  829,  798, 1016,  985,  954,  923,
    198   892,  861,  830,  799, 1017,  986,  955,  893,  862,  831, 1018,  987,  894,  863, 1019,  895,  924,  956,  925,  988,  957,  926, 1020,  989,  958,  927, 1021,  990,  959, 1022,  991, 1023,
    199 };
    200 
    201 /* Array indices are identical to previously-existing CONTEXT_NODE indices */
    202 
    203 const vp9_tree_index vp9_coef_tree[ 22] =     /* corresponding _CONTEXT_NODEs */
    204 {
    205   -DCT_EOB_TOKEN, 2,                          /* 0 = EOB */
    206   -ZERO_TOKEN, 4,                             /* 1 = ZERO */
    207   -ONE_TOKEN, 6,                              /* 2 = ONE */
    208   8, 12,                                      /* 3 = LOW_VAL */
    209   -TWO_TOKEN, 10,                            /* 4 = TWO */
    210   -THREE_TOKEN, -FOUR_TOKEN,                /* 5 = THREE */
    211   14, 16,                                   /* 6 = HIGH_LOW */
    212   -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2,   /* 7 = CAT_ONE */
    213   18, 20,                                   /* 8 = CAT_THREEFOUR */
    214   -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4,   /* 9 = CAT_THREE */
    215   -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6    /* 10 = CAT_FIVE */
    216 };
    217 
    218 struct vp9_token vp9_coef_encodings[MAX_ENTROPY_TOKENS];
    219 
    220 /* Trees for extra bits.  Probabilities are constant and
    221    do not depend on previously encoded bits */
    222 
    223 static const vp9_prob Pcat1[] = { 159};
    224 static const vp9_prob Pcat2[] = { 165, 145};
    225 static const vp9_prob Pcat3[] = { 173, 148, 140};
    226 static const vp9_prob Pcat4[] = { 176, 155, 140, 135};
    227 static const vp9_prob Pcat5[] = { 180, 157, 141, 134, 130};
    228 static const vp9_prob Pcat6[] = {
    229   254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
    230 };
    231 
    232 const vp9_tree_index vp9_coefmodel_tree[6] = {
    233   -DCT_EOB_MODEL_TOKEN, 2,                      /* 0 = EOB */
    234   -ZERO_TOKEN, 4,                               /* 1 = ZERO */
    235   -ONE_TOKEN, -TWO_TOKEN,
    236 };
    237 
    238 // Model obtained from a 2-sided zero-centerd distribuition derived
    239 // from a Pareto distribution. The cdf of the distribution is:
    240 // cdf(x) = 0.5 + 0.5 * sgn(x) * [1 - {alpha/(alpha + |x|)} ^ beta]
    241 //
    242 // For a given beta and a given probablity of the 1-node, the alpha
    243 // is first solved, and then the {alpha, beta} pair is used to generate
    244 // the probabilities for the rest of the nodes.
    245 
    246 // beta = 8
    247 static const vp9_prob modelcoefprobs_pareto8[COEFPROB_MODELS][MODEL_NODES] = {
    248   {  3,  86, 128,   6,  86,  23,  88,  29},
    249   {  9,  86, 129,  17,  88,  61,  94,  76},
    250   { 15,  87, 129,  28,  89,  93, 100, 110},
    251   { 20,  88, 130,  38,  91, 118, 106, 136},
    252   { 26,  89, 131,  48,  92, 139, 111, 156},
    253   { 31,  90, 131,  58,  94, 156, 117, 171},
    254   { 37,  90, 132,  66,  95, 171, 122, 184},
    255   { 42,  91, 132,  75,  97, 183, 127, 194},
    256   { 47,  92, 133,  83,  98, 193, 132, 202},
    257   { 52,  93, 133,  90, 100, 201, 137, 208},
    258   { 57,  94, 134,  98, 101, 208, 142, 214},
    259   { 62,  94, 135, 105, 103, 214, 146, 218},
    260   { 66,  95, 135, 111, 104, 219, 151, 222},
    261   { 71,  96, 136, 117, 106, 224, 155, 225},
    262   { 76,  97, 136, 123, 107, 227, 159, 228},
    263   { 80,  98, 137, 129, 109, 231, 162, 231},
    264   { 84,  98, 138, 134, 110, 234, 166, 233},
    265   { 89,  99, 138, 140, 112, 236, 170, 235},
    266   { 93, 100, 139, 145, 113, 238, 173, 236},
    267   { 97, 101, 140, 149, 115, 240, 176, 238},
    268   {101, 102, 140, 154, 116, 242, 179, 239},
    269   {105, 103, 141, 158, 118, 243, 182, 240},
    270   {109, 104, 141, 162, 119, 244, 185, 241},
    271   {113, 104, 142, 166, 120, 245, 187, 242},
    272   {116, 105, 143, 170, 122, 246, 190, 243},
    273   {120, 106, 143, 173, 123, 247, 192, 244},
    274   {123, 107, 144, 177, 125, 248, 195, 244},
    275   {127, 108, 145, 180, 126, 249, 197, 245},
    276   {130, 109, 145, 183, 128, 249, 199, 245},
    277   {134, 110, 146, 186, 129, 250, 201, 246},
    278   {137, 111, 147, 189, 131, 251, 203, 246},
    279   {140, 112, 147, 192, 132, 251, 205, 247},
    280   {143, 113, 148, 194, 133, 251, 207, 247},
    281   {146, 114, 149, 197, 135, 252, 208, 248},
    282   {149, 115, 149, 199, 136, 252, 210, 248},
    283   {152, 115, 150, 201, 138, 252, 211, 248},
    284   {155, 116, 151, 204, 139, 253, 213, 249},
    285   {158, 117, 151, 206, 140, 253, 214, 249},
    286   {161, 118, 152, 208, 142, 253, 216, 249},
    287   {163, 119, 153, 210, 143, 253, 217, 249},
    288   {166, 120, 153, 212, 144, 254, 218, 250},
    289   {168, 121, 154, 213, 146, 254, 220, 250},
    290   {171, 122, 155, 215, 147, 254, 221, 250},
    291   {173, 123, 155, 217, 148, 254, 222, 250},
    292   {176, 124, 156, 218, 150, 254, 223, 250},
    293   {178, 125, 157, 220, 151, 254, 224, 251},
    294   {180, 126, 157, 221, 152, 254, 225, 251},
    295   {183, 127, 158, 222, 153, 254, 226, 251},
    296   {185, 128, 159, 224, 155, 255, 227, 251},
    297   {187, 129, 160, 225, 156, 255, 228, 251},
    298   {189, 131, 160, 226, 157, 255, 228, 251},
    299   {191, 132, 161, 227, 159, 255, 229, 251},
    300   {193, 133, 162, 228, 160, 255, 230, 252},
    301   {195, 134, 163, 230, 161, 255, 231, 252},
    302   {197, 135, 163, 231, 162, 255, 231, 252},
    303   {199, 136, 164, 232, 163, 255, 232, 252},
    304   {201, 137, 165, 233, 165, 255, 233, 252},
    305   {202, 138, 166, 233, 166, 255, 233, 252},
    306   {204, 139, 166, 234, 167, 255, 234, 252},
    307   {206, 140, 167, 235, 168, 255, 235, 252},
    308   {207, 141, 168, 236, 169, 255, 235, 252},
    309   {209, 142, 169, 237, 171, 255, 236, 252},
    310   {210, 144, 169, 237, 172, 255, 236, 252},
    311   {212, 145, 170, 238, 173, 255, 237, 252},
    312   {214, 146, 171, 239, 174, 255, 237, 253},
    313   {215, 147, 172, 240, 175, 255, 238, 253},
    314   {216, 148, 173, 240, 176, 255, 238, 253},
    315   {218, 149, 173, 241, 177, 255, 239, 253},
    316   {219, 150, 174, 241, 179, 255, 239, 253},
    317   {220, 152, 175, 242, 180, 255, 240, 253},
    318   {222, 153, 176, 242, 181, 255, 240, 253},
    319   {223, 154, 177, 243, 182, 255, 240, 253},
    320   {224, 155, 178, 244, 183, 255, 241, 253},
    321   {225, 156, 178, 244, 184, 255, 241, 253},
    322   {226, 158, 179, 244, 185, 255, 242, 253},
    323   {228, 159, 180, 245, 186, 255, 242, 253},
    324   {229, 160, 181, 245, 187, 255, 242, 253},
    325   {230, 161, 182, 246, 188, 255, 243, 253},
    326   {231, 163, 183, 246, 189, 255, 243, 253},
    327   {232, 164, 184, 247, 190, 255, 243, 253},
    328   {233, 165, 185, 247, 191, 255, 244, 253},
    329   {234, 166, 185, 247, 192, 255, 244, 253},
    330   {235, 168, 186, 248, 193, 255, 244, 253},
    331   {236, 169, 187, 248, 194, 255, 244, 253},
    332   {236, 170, 188, 248, 195, 255, 245, 253},
    333   {237, 171, 189, 249, 196, 255, 245, 254},
    334   {238, 173, 190, 249, 197, 255, 245, 254},
    335   {239, 174, 191, 249, 198, 255, 245, 254},
    336   {240, 175, 192, 249, 199, 255, 246, 254},
    337   {240, 177, 193, 250, 200, 255, 246, 254},
    338   {241, 178, 194, 250, 201, 255, 246, 254},
    339   {242, 179, 195, 250, 202, 255, 246, 254},
    340   {242, 181, 196, 250, 203, 255, 247, 254},
    341   {243, 182, 197, 251, 204, 255, 247, 254},
    342   {244, 184, 198, 251, 205, 255, 247, 254},
    343   {244, 185, 199, 251, 206, 255, 247, 254},
    344   {245, 186, 200, 251, 207, 255, 247, 254},
    345   {246, 188, 201, 252, 207, 255, 248, 254},
    346   {246, 189, 202, 252, 208, 255, 248, 254},
    347   {247, 191, 203, 252, 209, 255, 248, 254},
    348   {247, 192, 204, 252, 210, 255, 248, 254},
    349   {248, 194, 205, 252, 211, 255, 248, 254},
    350   {248, 195, 206, 252, 212, 255, 249, 254},
    351   {249, 197, 207, 253, 213, 255, 249, 254},
    352   {249, 198, 208, 253, 214, 255, 249, 254},
    353   {250, 200, 210, 253, 215, 255, 249, 254},
    354   {250, 201, 211, 253, 215, 255, 249, 254},
    355   {250, 203, 212, 253, 216, 255, 249, 254},
    356   {251, 204, 213, 253, 217, 255, 250, 254},
    357   {251, 206, 214, 254, 218, 255, 250, 254},
    358   {252, 207, 216, 254, 219, 255, 250, 254},
    359   {252, 209, 217, 254, 220, 255, 250, 254},
    360   {252, 211, 218, 254, 221, 255, 250, 254},
    361   {253, 213, 219, 254, 222, 255, 250, 254},
    362   {253, 214, 221, 254, 223, 255, 250, 254},
    363   {253, 216, 222, 254, 224, 255, 251, 254},
    364   {253, 218, 224, 254, 225, 255, 251, 254},
    365   {254, 220, 225, 254, 225, 255, 251, 254},
    366   {254, 222, 227, 255, 226, 255, 251, 254},
    367   {254, 224, 228, 255, 227, 255, 251, 254},
    368   {254, 226, 230, 255, 228, 255, 251, 254},
    369   {255, 228, 231, 255, 230, 255, 251, 254},
    370   {255, 230, 233, 255, 231, 255, 252, 254},
    371   {255, 232, 235, 255, 232, 255, 252, 254},
    372   {255, 235, 237, 255, 233, 255, 252, 254},
    373   {255, 238, 240, 255, 235, 255, 252, 255},
    374   {255, 241, 243, 255, 236, 255, 252, 254},
    375   {255, 246, 247, 255, 239, 255, 253, 255}
    376 };
    377 
    378 static void extend_model_to_full_distribution(vp9_prob p,
    379                                               vp9_prob *tree_probs) {
    380   const int l = (p - 1) / 2;
    381   const vp9_prob (*model)[MODEL_NODES] = modelcoefprobs_pareto8;
    382   if (p & 1) {
    383     vpx_memcpy(tree_probs + UNCONSTRAINED_NODES,
    384                model[l], MODEL_NODES * sizeof(vp9_prob));
    385   } else {
    386     // interpolate
    387     int i;
    388     for (i = UNCONSTRAINED_NODES; i < ENTROPY_NODES; ++i)
    389       tree_probs[i] = (model[l][i - UNCONSTRAINED_NODES] +
    390                        model[l + 1][i - UNCONSTRAINED_NODES]) >> 1;
    391   }
    392 }
    393 
    394 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full) {
    395   if (full != model)
    396     vpx_memcpy(full, model, sizeof(vp9_prob) * UNCONSTRAINED_NODES);
    397   extend_model_to_full_distribution(model[PIVOT_NODE], full);
    398 }
    399 
    400 static vp9_tree_index cat1[2], cat2[4], cat3[6], cat4[8], cat5[10], cat6[28];
    401 
    402 static void init_bit_tree(vp9_tree_index *p, int n) {
    403   int i = 0;
    404 
    405   while (++i < n) {
    406     p[0] = p[1] = i << 1;
    407     p += 2;
    408   }
    409 
    410   p[0] = p[1] = 0;
    411 }
    412 
    413 static void init_bit_trees() {
    414   init_bit_tree(cat1, 1);
    415   init_bit_tree(cat2, 2);
    416   init_bit_tree(cat3, 3);
    417   init_bit_tree(cat4, 4);
    418   init_bit_tree(cat5, 5);
    419   init_bit_tree(cat6, 14);
    420 }
    421 
    422 const vp9_extra_bit vp9_extra_bits[12] = {
    423   { 0, 0, 0, 0},
    424   { 0, 0, 0, 1},
    425   { 0, 0, 0, 2},
    426   { 0, 0, 0, 3},
    427   { 0, 0, 0, 4},
    428   { cat1, Pcat1, 1, 5},
    429   { cat2, Pcat2, 2, 7},
    430   { cat3, Pcat3, 3, 11},
    431   { cat4, Pcat4, 4, 19},
    432   { cat5, Pcat5, 5, 35},
    433   { cat6, Pcat6, 14, 67},
    434   { 0, 0, 0, 0}
    435 };
    436 
    437 #include "vp9/common/vp9_default_coef_probs.h"
    438 
    439 void vp9_default_coef_probs(VP9_COMMON *cm) {
    440   vp9_copy(cm->fc.coef_probs[TX_4X4], default_coef_probs_4x4);
    441   vp9_copy(cm->fc.coef_probs[TX_8X8], default_coef_probs_8x8);
    442   vp9_copy(cm->fc.coef_probs[TX_16X16], default_coef_probs_16x16);
    443   vp9_copy(cm->fc.coef_probs[TX_32X32], default_coef_probs_32x32);
    444 }
    445 
    446 // Neighborhood 5-tuples for various scans and blocksizes,
    447 // in {top, left, topleft, topright, bottomleft} order
    448 // for each position in raster scan order.
    449 // -1 indicates the neighbor does not exist.
    450 DECLARE_ALIGNED(16, int16_t,
    451                 vp9_default_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    452 DECLARE_ALIGNED(16, int16_t,
    453                 vp9_col_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    454 DECLARE_ALIGNED(16, int16_t,
    455                 vp9_row_scan_4x4_neighbors[17 * MAX_NEIGHBORS]);
    456 DECLARE_ALIGNED(16, int16_t,
    457                 vp9_col_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    458 DECLARE_ALIGNED(16, int16_t,
    459                 vp9_row_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    460 DECLARE_ALIGNED(16, int16_t,
    461                 vp9_default_scan_8x8_neighbors[65 * MAX_NEIGHBORS]);
    462 DECLARE_ALIGNED(16, int16_t,
    463                 vp9_col_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    464 DECLARE_ALIGNED(16, int16_t,
    465                 vp9_row_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    466 DECLARE_ALIGNED(16, int16_t,
    467                 vp9_default_scan_16x16_neighbors[257 * MAX_NEIGHBORS]);
    468 DECLARE_ALIGNED(16, int16_t,
    469                 vp9_default_scan_32x32_neighbors[1025 * MAX_NEIGHBORS]);
    470 
    471 DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_4x4[16]);
    472 DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_4x4[16]);
    473 DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_4x4[16]);
    474 DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_8x8[64]);
    475 DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_8x8[64]);
    476 DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_8x8[64]);
    477 DECLARE_ALIGNED(16, int16_t, vp9_col_iscan_16x16[256]);
    478 DECLARE_ALIGNED(16, int16_t, vp9_row_iscan_16x16[256]);
    479 DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_16x16[256]);
    480 DECLARE_ALIGNED(16, int16_t, vp9_default_iscan_32x32[1024]);
    481 
    482 static int find_in_scan(const int16_t *scan, int l, int idx) {
    483   int n, l2 = l * l;
    484   for (n = 0; n < l2; n++) {
    485     int rc = scan[n];
    486     if (rc == idx)
    487       return  n;
    488   }
    489   assert(0);
    490   return -1;
    491 }
    492 static void init_scan_neighbors(const int16_t *scan,
    493                                 int16_t *iscan,
    494                                 int l, int16_t *neighbors) {
    495   int l2 = l * l;
    496   int n, i, j;
    497 
    498   // dc doesn't use this type of prediction
    499   neighbors[MAX_NEIGHBORS * 0 + 0] = 0;
    500   neighbors[MAX_NEIGHBORS * 0 + 1] = 0;
    501   iscan[0] = find_in_scan(scan, l, 0);
    502   for (n = 1; n < l2; n++) {
    503     int rc = scan[n];
    504     iscan[n] = find_in_scan(scan, l, n);
    505     i = rc / l;
    506     j = rc % l;
    507     if (i > 0 && j > 0) {
    508       // col/row scan is used for adst/dct, and generally means that
    509       // energy decreases to zero much faster in the dimension in
    510       // which ADST is used compared to the direction in which DCT
    511       // is used. Likewise, we find much higher correlation between
    512       // coefficients within the direction in which DCT is used.
    513       // Therefore, if we use ADST/DCT, prefer the DCT neighbor coeff
    514       // as a context. If ADST or DCT is used in both directions, we
    515       // use the combination of the two as a context.
    516       int a = (i - 1) * l + j;
    517       int b =  i      * l + j - 1;
    518       if (scan == vp9_col_scan_4x4 || scan == vp9_col_scan_8x8 ||
    519           scan == vp9_col_scan_16x16) {
    520         // in the col/row scan cases (as well as left/top edge cases), we set
    521         // both contexts to the same value, so we can branchlessly do a+b+1>>1
    522         // which automatically becomes a if a == b
    523         neighbors[MAX_NEIGHBORS * n + 0] =
    524         neighbors[MAX_NEIGHBORS * n + 1] = a;
    525       } else if (scan == vp9_row_scan_4x4 || scan == vp9_row_scan_8x8 ||
    526                  scan == vp9_row_scan_16x16) {
    527         neighbors[MAX_NEIGHBORS * n + 0] =
    528         neighbors[MAX_NEIGHBORS * n + 1] = b;
    529       } else {
    530         neighbors[MAX_NEIGHBORS * n + 0] = a;
    531         neighbors[MAX_NEIGHBORS * n + 1] = b;
    532       }
    533     } else if (i > 0) {
    534       neighbors[MAX_NEIGHBORS * n + 0] =
    535       neighbors[MAX_NEIGHBORS * n + 1] = (i - 1) * l + j;
    536     } else {
    537       assert(j > 0);
    538       neighbors[MAX_NEIGHBORS * n + 0] =
    539       neighbors[MAX_NEIGHBORS * n + 1] =  i      * l + j - 1;
    540     }
    541     assert(iscan[neighbors[MAX_NEIGHBORS * n + 0]] < n);
    542   }
    543   // one padding item so we don't have to add branches in code to handle
    544   // calls to get_coef_context() for the token after the final dc token
    545   neighbors[MAX_NEIGHBORS * l2 + 0] = 0;
    546   neighbors[MAX_NEIGHBORS * l2 + 1] = 0;
    547 }
    548 
    549 void vp9_init_neighbors() {
    550   init_scan_neighbors(vp9_default_scan_4x4, vp9_default_iscan_4x4, 4,
    551                       vp9_default_scan_4x4_neighbors);
    552   init_scan_neighbors(vp9_row_scan_4x4, vp9_row_iscan_4x4, 4,
    553                       vp9_row_scan_4x4_neighbors);
    554   init_scan_neighbors(vp9_col_scan_4x4, vp9_col_iscan_4x4, 4,
    555                       vp9_col_scan_4x4_neighbors);
    556   init_scan_neighbors(vp9_default_scan_8x8, vp9_default_iscan_8x8, 8,
    557                       vp9_default_scan_8x8_neighbors);
    558   init_scan_neighbors(vp9_row_scan_8x8, vp9_row_iscan_8x8, 8,
    559                       vp9_row_scan_8x8_neighbors);
    560   init_scan_neighbors(vp9_col_scan_8x8, vp9_col_iscan_8x8, 8,
    561                       vp9_col_scan_8x8_neighbors);
    562   init_scan_neighbors(vp9_default_scan_16x16, vp9_default_iscan_16x16, 16,
    563                       vp9_default_scan_16x16_neighbors);
    564   init_scan_neighbors(vp9_row_scan_16x16, vp9_row_iscan_16x16, 16,
    565                       vp9_row_scan_16x16_neighbors);
    566   init_scan_neighbors(vp9_col_scan_16x16, vp9_col_iscan_16x16, 16,
    567                       vp9_col_scan_16x16_neighbors);
    568   init_scan_neighbors(vp9_default_scan_32x32, vp9_default_iscan_32x32, 32,
    569                       vp9_default_scan_32x32_neighbors);
    570 }
    571 
    572 const int16_t *vp9_get_coef_neighbors_handle(const int16_t *scan) {
    573   if (scan == vp9_default_scan_4x4) {
    574     return vp9_default_scan_4x4_neighbors;
    575   } else if (scan == vp9_row_scan_4x4) {
    576     return vp9_row_scan_4x4_neighbors;
    577   } else if (scan == vp9_col_scan_4x4) {
    578     return vp9_col_scan_4x4_neighbors;
    579   } else if (scan == vp9_default_scan_8x8) {
    580     return vp9_default_scan_8x8_neighbors;
    581   } else if (scan == vp9_row_scan_8x8) {
    582     return vp9_row_scan_8x8_neighbors;
    583   } else if (scan == vp9_col_scan_8x8) {
    584     return vp9_col_scan_8x8_neighbors;
    585   } else if (scan == vp9_default_scan_16x16) {
    586     return vp9_default_scan_16x16_neighbors;
    587   } else if (scan == vp9_row_scan_16x16) {
    588     return vp9_row_scan_16x16_neighbors;
    589   } else if (scan == vp9_col_scan_16x16) {
    590     return vp9_col_scan_16x16_neighbors;
    591   } else {
    592     assert(scan == vp9_default_scan_32x32);
    593     return vp9_default_scan_32x32_neighbors;
    594   }
    595 }
    596 
    597 void vp9_coef_tree_initialize() {
    598   vp9_init_neighbors();
    599   init_bit_trees();
    600   vp9_tokens_from_tree(vp9_coef_encodings, vp9_coef_tree);
    601 }
    602 
    603 // #define COEF_COUNT_TESTING
    604 
    605 #define COEF_COUNT_SAT 24
    606 #define COEF_MAX_UPDATE_FACTOR 112
    607 #define COEF_COUNT_SAT_KEY 24
    608 #define COEF_MAX_UPDATE_FACTOR_KEY 112
    609 #define COEF_COUNT_SAT_AFTER_KEY 24
    610 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128
    611 
    612 static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE tx_size,
    613                              unsigned int count_sat,
    614                              unsigned int update_factor) {
    615   FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
    616 
    617   vp9_coeff_probs_model *dst_coef_probs = cm->fc.coef_probs[tx_size];
    618   vp9_coeff_probs_model *pre_coef_probs = pre_fc->coef_probs[tx_size];
    619   vp9_coeff_count_model *coef_counts = cm->counts.coef[tx_size];
    620   unsigned int (*eob_branch_count)[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS] =
    621       cm->counts.eob_branch[tx_size];
    622   int t, i, j, k, l;
    623   unsigned int branch_ct[UNCONSTRAINED_NODES][2];
    624   vp9_prob coef_probs[UNCONSTRAINED_NODES];
    625 
    626   for (i = 0; i < BLOCK_TYPES; ++i)
    627     for (j = 0; j < REF_TYPES; ++j)
    628       for (k = 0; k < COEF_BANDS; ++k)
    629         for (l = 0; l < PREV_COEF_CONTEXTS; ++l) {
    630           if (l >= 3 && k == 0)
    631             continue;
    632           vp9_tree_probs_from_distribution(vp9_coefmodel_tree, coef_probs,
    633                                            branch_ct, coef_counts[i][j][k][l],
    634                                            0);
    635           branch_ct[0][1] = eob_branch_count[i][j][k][l] - branch_ct[0][0];
    636           coef_probs[0] = get_binary_prob(branch_ct[0][0], branch_ct[0][1]);
    637           for (t = 0; t < UNCONSTRAINED_NODES; ++t)
    638             dst_coef_probs[i][j][k][l][t] = merge_probs(
    639                 pre_coef_probs[i][j][k][l][t], coef_probs[t],
    640                 branch_ct[t], count_sat, update_factor);
    641         }
    642 }
    643 
    644 void vp9_adapt_coef_probs(VP9_COMMON *cm) {
    645   TX_SIZE t;
    646   unsigned int count_sat, update_factor;
    647 
    648   if (cm->frame_type == KEY_FRAME || cm->intra_only) {
    649     update_factor = COEF_MAX_UPDATE_FACTOR_KEY;
    650     count_sat = COEF_COUNT_SAT_KEY;
    651   } else if (cm->last_frame_type == KEY_FRAME) {
    652     update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY;  /* adapt quickly */
    653     count_sat = COEF_COUNT_SAT_AFTER_KEY;
    654   } else {
    655     update_factor = COEF_MAX_UPDATE_FACTOR;
    656     count_sat = COEF_COUNT_SAT;
    657   }
    658   for (t = TX_4X4; t <= TX_32X32; t++)
    659     adapt_coef_probs(cm, t, count_sat, update_factor);
    660 }
    661